steinm          Fri Jan 26 00:20:23 2001 EDT

  Modified files:              
    /php4/ext/pdf       pdf.c php_pdf.h 
  Log:
  - This is major change of the php pdf api to be closer to the pdflib api
    done by Rainer Schaaf from pdflib GmbH.
  - Some more functions has been implemented as well.
  - backwards compatibility has been maintained a much as possible
  
  
Index: php4/ext/pdf/pdf.c
diff -u php4/ext/pdf/pdf.c:1.65 php4/ext/pdf/pdf.c:1.66
--- php4/ext/pdf/pdf.c:1.65     Wed Jan  3 08:52:59 2001
+++ php4/ext/pdf/pdf.c  Fri Jan 26 00:20:23 2001
@@ -16,10 +16,10 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: pdf.c,v 1.65 2001/01/03 16:52:59 sniper Exp $ */
+/* $Id: pdf.c,v 1.66 2001/01/26 08:20:23 steinm Exp $ */
 
-/* pdflib 2.02 is subject to the ALADDIN FREE PUBLIC LICENSE. 
-   Copyright (C) 1997 Thomas Merz. */
+/* pdflib 2.02 ... 3.0x is subject to the ALADDIN FREE PUBLIC LICENSE.
+   Copyright (C) 1997-1999 Thomas Merz. 2000-2001 PDFlib GmbH */
 /* Note that there is no code from the pdflib package in this file */
 
 #include "php.h"
@@ -46,93 +46,134 @@
 
 #include "php_pdf.h"
 
-static int le_pdf_image, le_outline, le_pdf;
+static int le_pdf;
 
+/*
+ * to adopt the php way of error handling to PDFlib
+ * The image related functions in PDFlib return -1 on error
+ * but they may return 0 (FALSE) in normal cases
+ * so this offset will repair this
+ */
+#define PDFLIB_IMAGE_OFFSET    1
+#define PDFLIB_FONT_OFFSET     1
+
 function_entry pdf_functions[] = {
-       PHP_FE(pdf_set_info,                    NULL)
-       PHP_FE(pdf_set_info_creator,    NULL)   /* deprecated */
-       PHP_FE(pdf_set_info_title,              NULL)   /* deprecated */
-       PHP_FE(pdf_set_info_subject,    NULL)   /* deprecated */
-       PHP_FE(pdf_set_info_author,             NULL)   /* deprecated */
-       PHP_FE(pdf_set_info_keywords,   NULL)   /* deprecated */
-       PHP_FE(pdf_open,                                NULL)
-       PHP_FE(pdf_close,                               NULL)
-       PHP_FE(pdf_begin_page,                  NULL)
-       PHP_FE(pdf_end_page,                    NULL)
-       PHP_FE(pdf_show,                                NULL)
-       PHP_FE(pdf_show_xy,                             NULL)
-       PHP_FE(pdf_show_boxed,                  NULL)
-       PHP_FE(pdf_skew,                                NULL)
-       PHP_FE(pdf_set_font,                    NULL)
-       PHP_FE(pdf_set_leading,                 NULL)   /* deprecated */
-       PHP_FE(pdf_set_text_rendering,  NULL)   /* deprecated */
-       PHP_FE(pdf_set_horiz_scaling,   NULL)   /* deprecated */
-       PHP_FE(pdf_set_text_rise,               NULL)   /* deprecated */
-       PHP_FE(pdf_set_text_pos,                NULL)
-       PHP_FE(pdf_set_char_spacing,    NULL)   /* deprecated */
-       PHP_FE(pdf_set_word_spacing,    NULL)   /* deprecated */
-       PHP_FE(pdf_get_font,                    NULL)
-       PHP_FE(pdf_get_fontname,                NULL)
-       PHP_FE(pdf_get_fontsize,                NULL)
-       PHP_FE(pdf_continue_text,               NULL)
-       PHP_FE(pdf_stringwidth,                 NULL)
-       PHP_FE(pdf_save,                                NULL)
-       PHP_FE(pdf_restore,                             NULL)
-       PHP_FE(pdf_translate,                   NULL)
-       PHP_FE(pdf_scale,                               NULL)
-       PHP_FE(pdf_rotate,                              NULL)
-       PHP_FE(pdf_setflat,                             NULL)
-       PHP_FE(pdf_setlinejoin,                 NULL)
-       PHP_FE(pdf_setlinecap,                  NULL)
-       PHP_FE(pdf_setmiterlimit,               NULL)
-       PHP_FE(pdf_setlinewidth,                NULL)
-       PHP_FE(pdf_setdash,                             NULL)
-       PHP_FE(pdf_moveto,                              NULL)
-       PHP_FE(pdf_lineto,                              NULL)
-       PHP_FE(pdf_curveto,                             NULL)
-       PHP_FE(pdf_circle,                              NULL)
-       PHP_FE(pdf_arc,                                 NULL)
-       PHP_FE(pdf_rect,                                NULL)
-       PHP_FE(pdf_closepath,                   NULL)
-       PHP_FE(pdf_stroke,                              NULL)
-       PHP_FE(pdf_closepath_stroke,    NULL)
-       PHP_FE(pdf_fill,                                NULL)
-       PHP_FE(pdf_fill_stroke,                 NULL)
-       PHP_FE(pdf_closepath_fill_stroke,       NULL)
-       PHP_FE(pdf_endpath,                     NULL)
-       PHP_FE(pdf_clip,                                NULL)
-       PHP_FE(pdf_set_parameter,               NULL)
-       PHP_FE(pdf_get_parameter,               NULL)
-       PHP_FE(pdf_set_value,                   NULL)
-       PHP_FE(pdf_get_value,                   NULL)
-       PHP_FE(pdf_setgray_fill,                NULL)
-       PHP_FE(pdf_setgray_stroke,              NULL)
-       PHP_FE(pdf_setgray,                     NULL)
-       PHP_FE(pdf_setrgbcolor_fill,    NULL)
-       PHP_FE(pdf_setrgbcolor_stroke,  NULL)
-       PHP_FE(pdf_setrgbcolor,                 NULL)
-       PHP_FE(pdf_add_outline,                 NULL)
-       PHP_FALIAS(pdf_add_bookmark, pdf_add_outline, NULL)
-       PHP_FE(pdf_set_transition,              NULL)   /* deprecated */
-       PHP_FE(pdf_set_duration,                NULL)   /* deprecated */
-       PHP_FE(pdf_open_jpeg,                   NULL)   /* deprecated */
-       PHP_FE(pdf_open_tiff,                   NULL)   /* deprecated */
-       PHP_FE(pdf_open_png,                    NULL)   /* deprecated */
-       PHP_FE(pdf_open_gif,                    NULL)   /* deprecated */
-       PHP_FE(pdf_open_image_file,             NULL)
+       /* sorry for sorting this stuff like the pdflib manual,
+          but this helps me to see what is done :) RJS 
+          I'll try to avoid rearanging the sources below that => new functions to the 
+end */
+       PHP_FE(pdf_new, NULL)           /* new function */
+       PHP_FE(pdf_delete, NULL)        /* new function */
+       PHP_FE(pdf_open_file, NULL)     /* new function */
+       PHP_FE(pdf_get_buffer, NULL)    /* new function */
+       PHP_FE(pdf_close, NULL)
+       PHP_FE(pdf_begin_page, NULL)
+       PHP_FE(pdf_end_page, NULL)
+       PHP_FE(pdf_get_value, NULL)
+       PHP_FE(pdf_set_value, NULL)
+       PHP_FE(pdf_get_parameter, NULL)
+       PHP_FE(pdf_set_parameter, NULL)
+       PHP_FE(pdf_findfont, NULL)      /* new function */
+       PHP_FE(pdf_setfont, NULL)       /* new function */
+       PHP_FE(pdf_show, NULL)
+       PHP_FE(pdf_show_xy, NULL)
+       PHP_FE(pdf_continue_text, NULL)
+       PHP_FE(pdf_show_boxed, NULL)
+       PHP_FE(pdf_stringwidth, NULL)   /* new parameters: [int font, float size] */
+       PHP_FE(pdf_set_text_pos, NULL)
+       PHP_FE(pdf_setdash, NULL)
+       PHP_FE(pdf_setpolydash, NULL)   /* new function: not yet finished */
+       PHP_FE(pdf_setflat, NULL)
+       PHP_FE(pdf_setlinejoin, NULL)
+       PHP_FE(pdf_setlinecap, NULL)
+       PHP_FE(pdf_setmiterlimit, NULL)
+       PHP_FE(pdf_setlinewidth, NULL)
+       PHP_FE(pdf_save, NULL)
+       PHP_FE(pdf_restore, NULL)
+       PHP_FE(pdf_translate, NULL)
+       PHP_FE(pdf_scale, NULL)
+       PHP_FE(pdf_rotate, NULL)
+       PHP_FE(pdf_skew, NULL)
+       PHP_FE(pdf_concat, NULL)        /* new function */
+       PHP_FE(pdf_moveto, NULL)
+       PHP_FE(pdf_lineto, NULL)
+       PHP_FE(pdf_curveto, NULL)
+       PHP_FE(pdf_circle, NULL)
+       PHP_FE(pdf_arc, NULL)
+       PHP_FE(pdf_rect, NULL)
+       PHP_FE(pdf_closepath, NULL)
+       PHP_FE(pdf_stroke, NULL)
+       PHP_FE(pdf_closepath_stroke, NULL)
+       PHP_FE(pdf_fill, NULL)
+       PHP_FE(pdf_fill_stroke, NULL)
+       PHP_FE(pdf_closepath_fill_stroke, NULL)
+       PHP_FE(pdf_clip, NULL)
+       PHP_FE(pdf_endpath, NULL)
+       PHP_FE(pdf_setgray_fill, NULL)
+       PHP_FE(pdf_setgray_stroke, NULL)
+       PHP_FE(pdf_setgray, NULL)
+       PHP_FE(pdf_setrgbcolor_fill, NULL)
+       PHP_FE(pdf_setrgbcolor_stroke, NULL)
+       PHP_FE(pdf_setrgbcolor, NULL)
+       PHP_FE(pdf_open_image_file, NULL)  /* new parameters: [char *stringpram, int 
+intparam] */
+       PHP_FE(pdf_open_CCITT, NULL)    /* new function */
+       PHP_FE(pdf_open_image, NULL)    /* new function */
+       PHP_FE(pdf_close_image, NULL)
+       PHP_FE(pdf_place_image, NULL)
+       PHP_FE(pdf_add_bookmark, NULL)
+       PHP_FE(pdf_set_info, NULL)
+       PHP_FE(pdf_attach_file, NULL)   /* new function */
+       PHP_FE(pdf_add_note, NULL)      /* new function */
+       PHP_FE(pdf_add_pdflink, NULL)
+       PHP_FE(pdf_add_locallink, NULL) /* new function */
+       PHP_FE(pdf_add_launchlink, NULL)/* new function */
+       PHP_FE(pdf_add_weblink, NULL)
+       PHP_FE(pdf_set_border_style, NULL)
+       PHP_FE(pdf_set_border_color, NULL)
+       PHP_FE(pdf_set_border_dash, NULL)
+
+       /* End of the official PDFLIB V3.x API */
+
+       /* aliases for compatibility reasons */
+       PHP_FALIAS(pdf_add_outline, pdf_add_bookmark, NULL)
+
+       /* old font handling */
+       PHP_FE(pdf_set_font, NULL)              /* deprecated */
+       PHP_FE(pdf_get_font, NULL)              /* deprecated */
+       PHP_FE(pdf_get_fontname, NULL)          /* deprecated */
+       PHP_FE(pdf_get_fontsize, NULL)          /* deprecated */
+
+       /* old way of starting a PDF document */
+       PHP_FE(pdf_open, NULL)                  /* deprecated */
+
+       /* old stuff for setting infos */
+       PHP_FE(pdf_set_info_creator, NULL)      /* deprecated */
+       PHP_FE(pdf_set_info_title, NULL)        /* deprecated */
+       PHP_FE(pdf_set_info_subject, NULL)      /* deprecated */
+       PHP_FE(pdf_set_info_author, NULL)       /* deprecated */
+       PHP_FE(pdf_set_info_keywords, NULL)     /* deprecated */
+       PHP_FE(pdf_set_leading, NULL)           /* deprecated */
+       PHP_FE(pdf_set_text_rendering, NULL)    /* deprecated */
+       PHP_FE(pdf_set_horiz_scaling, NULL)     /* deprecated */
+       PHP_FE(pdf_set_text_rise, NULL)         /* deprecated */
+       PHP_FE(pdf_set_char_spacing, NULL)      /* deprecated */
+       PHP_FE(pdf_set_word_spacing, NULL)      /* deprecated */
+       PHP_FE(pdf_set_transition, NULL)        /* deprecated */
+       PHP_FE(pdf_set_duration, NULL)          /* deprecated */
+       PHP_FE(pdf_get_image_height, NULL)      /* deprecated */
+       PHP_FE(pdf_get_image_width, NULL)       /* deprecated */
+
+       /* old stuff for opening images */
+       PHP_FE(pdf_open_jpeg, NULL)             /* deprecated */
+       PHP_FE(pdf_open_tiff, NULL)             /* deprecated */
+       PHP_FE(pdf_open_png, NULL)              /* deprecated */
+       PHP_FE(pdf_open_gif, NULL)              /* deprecated */
+
+       /* some more stuff for compatibility */
+       PHP_FE(pdf_add_annotation, NULL)
 #if HAVE_LIBGD13
-       PHP_FE(pdf_open_memory_image,   NULL)
+       PHP_FE(pdf_open_memory_image, NULL)
 #endif
-       PHP_FE(pdf_close_image,                 NULL)
-       PHP_FE(pdf_place_image,                 NULL)
-       PHP_FE(pdf_add_weblink,                 NULL)
-       PHP_FE(pdf_add_pdflink,                 NULL)
-       PHP_FE(pdf_add_annotation,              NULL)
-       PHP_FE(pdf_set_border_style,    NULL)
-       PHP_FE(pdf_set_border_color,    NULL)
-       PHP_FE(pdf_set_border_dash,             NULL)
-       PHP_FE(pdf_get_image_height,    NULL)
-       PHP_FE(pdf_get_image_width,             NULL)
+
        {NULL, NULL, NULL}
 };
 
@@ -160,7 +201,9 @@
 static void _free_pdf_doc(zend_rsrc_list_entry *rsrc)
 {
        PDF *pdf = (PDF *)rsrc->ptr;
-       PDF_close(pdf);
+       /* RJS: TODO:
+          check whether pdf-Pointer is still valid, before pdf_delete()
+          + remove php-resource */
        PDF_delete(pdf);
 }
 
@@ -174,6 +217,14 @@
 {
        switch (type){
                case PDF_NonfatalError:
+                       /*
+                        * PDFlib warings should be visible to the user
+                        * If he decides to live with PDFlib warnings
+                        * he may user the PDFlib function
+                        * pdf_set_parameter($p, "warning" 0) to switch off
+                        * the warnings inside PDFlib
+                        */
+                       php_error(E_WARNING,"Internal PDFlib warning: %s", shortmsg);
                        return;
                case PDF_MemoryError: /* give up in all other cases */
                case PDF_IOError:
@@ -188,7 +239,7 @@
                case PDF_UnknownError:
                default:
                        if (p !=NULL) PDF_delete(p); /* clean up PDFlib */
-                       php_error(E_ERROR,"Internal pdflib error: %s", shortmsg);
+                       php_error(E_ERROR,"PDFlib error: %s", shortmsg);
                }
 }
 
@@ -222,27 +273,25 @@
 
        php_info_print_table_start();
        php_info_print_table_row(2, "PDF Support", "enabled" );
-       php_info_print_table_row(2, "PDFLib Version", tmp );
+       php_info_print_table_row(2, "PDFlib GmbH Version", tmp );
        php_info_print_table_row(2, "CJK Font Support", "yes" );
-#ifdef PDF_OPEN_MEM_SUPPORTED
        php_info_print_table_row(2, "In-memory PDF Creation Support", "yes" );
-#else
-       php_info_print_table_row(2, "In-memory PDF Creation Support", "no" );
-#endif
        php_info_print_table_end();
 
 }
 
 PHP_MINIT_FUNCTION(pdf)
 {
-       le_pdf_image = zend_register_list_destructors_ex(_free_pdf_image, NULL, "pdf 
image", module_number);
-       le_outline = zend_register_list_destructors_ex(_free_outline, NULL, "pdf 
outline", module_number);
        le_pdf = zend_register_list_destructors_ex(_free_pdf_doc, NULL, "pdf 
document", module_number);
+
+       /* this does something like setlocale("C", ...) in PDFlib 3.x */
+       PDF_boot();
        return SUCCESS;
 }
 
 PHP_MSHUTDOWN_FUNCTION(pdf)
 {
+       PDF_shutdown();
        return SUCCESS;
 }
 
@@ -326,7 +375,9 @@
 
 
 /* {{{ proto int pdf_open([int filedesc])
-   Opens a new pdf document. If filedesc is NULL, document is created in memory. This 
is not yet fully supported.*/
+   Opens a new pdf document. If filedesc is NULL, document is created in memory.
+   This is the old interface, only for compatibility 
+   use pdf_new + pdf_open_file instead */
 PHP_FUNCTION(pdf_open) 
 {
        zval **file;
@@ -337,18 +388,14 @@
        if(argc > 1) 
                WRONG_PARAM_COUNT;
        if (argc != 1 || zend_get_parameters_ex(1, &file) == FAILURE) {
-#if defined PDF_OPEN_MEM_SUPPORTED
                fp = NULL;
-#else
-               php_error(E_WARNING, "Your version of pdflib does not support in 
memory creation of PDF documents. You have to pass a file handle to pdf_open()");
-               WRONG_PARAM_COUNT;
-#endif
        } else {
                ZEND_FETCH_RESOURCE(fp, FILE *, file, -1, "File-Handle", 
php_file_le_fopen());
                /* XXX should do a zend_list_addref for <fp> here! */
        }
 
        pdf = PDF_new2(custom_errorhandler, pdf_emalloc, pdf_realloc, pdf_efree, NULL);
+       PDF_set_parameter(pdf, "imagewarning", "true");
 
        if(fp) {
                if (PDF_open_fp(pdf, fp) < 0) RETURN_FALSE;
@@ -373,8 +420,9 @@
        }
 
        ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       PDF_close(pdf);
 
-       zend_list_delete((*arg1)->value.lval);
        RETURN_TRUE;
 }
 
@@ -533,7 +581,7 @@
        convert_to_string_ex(arg4);
 
        font = PDF_findfont(pdf, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg4), embed);
-       if (font < 0) {
+       if (font == -1) {
                php_error(E_WARNING,"Font %s not found", Z_STRVAL_PP(arg2));
                RETURN_FALSE;
        }
@@ -598,20 +646,27 @@
        ZEND_FETCH_RESOURCE(pdf, PDF *, argv[0], -1, "pdf document", le_pdf);
 
        convert_to_string_ex(argv[1]);
+       if(argc == 3)
+           convert_to_double_ex(argv[2]);
 
-       if(0 == (strncmp(Z_STRVAL_PP(argv[1]), "image", 5))) {
-               int *pdf_image;
+       if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "imagewidth"))) {
                if(argc < 3) WRONG_PARAM_COUNT;
-
-               ZEND_FETCH_RESOURCE(pdf_image, int *, argv[2], -1, "pdf image", 
le_pdf_image);
-               value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), *pdf_image);
-
+               value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), 
+Z_DVAL_PP(argv[2])-PDFLIB_IMAGE_OFFSET);
+       } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "imageheight"))) {
+               if(argc < 3) WRONG_PARAM_COUNT;
+               value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), 
+Z_DVAL_PP(argv[2])-PDFLIB_IMAGE_OFFSET);
+       } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "resx"))) {
+               if(argc < 3) WRONG_PARAM_COUNT;
+               value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), 
+Z_DVAL_PP(argv[2])-PDFLIB_IMAGE_OFFSET);
+       } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "resy"))) {
+               if(argc < 3) WRONG_PARAM_COUNT;
+               value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), 
+Z_DVAL_PP(argv[2])-PDFLIB_IMAGE_OFFSET);
+       } else if(0 == (strcmp(Z_STRVAL_PP(argv[1]), "font"))) {
+               value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), 
+0.0)+PDFLIB_IMAGE_OFFSET;
        } else {
-
                if(argc < 3) {
-                       value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), 0.0);
+                   value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), 0.0);
                } else {
-                       convert_to_double_ex(argv[2]);
                        value = PDF_get_value(pdf, Z_STRVAL_PP(argv[1]), 
Z_DVAL_PP(argv[2]));
                }
        }
@@ -635,7 +690,7 @@
        ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
        
        font = (int) PDF_get_value(pdf, "font", 0);
-       RETURN_LONG(font);
+       RETURN_LONG(font+PDFLIB_FONT_OFFSET);
 }
 /* }}} */
 
@@ -764,22 +819,42 @@
 }
 /* }}} */
 
-/* {{{ proto double pdf_stringwidth(int pdfdoc, string text)
+/* {{{ proto double pdf_stringwidth(int pdfdoc, string text [, int font, double size])
    Returns width of text in current font*/
 PHP_FUNCTION(pdf_stringwidth)
 {
-       zval **arg1, **arg2;
-       double width;
+       zval **arg1, **arg2, **arg3, **arg4;
+       int font;
+       double width, size;
        PDF *pdf;
 
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == 
FAILURE) {
+       switch (ZEND_NUM_ARGS()) {
+       case 2:
+               if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
+                       WRONG_PARAM_COUNT;
+               break;
+       case 4:
+               if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE)
+                       WRONG_PARAM_COUNT;
+               convert_to_long_ex(arg3);
+               break;
+       default:
                WRONG_PARAM_COUNT;
        }
 
        ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
 
        convert_to_string_ex(arg2);
-       width = (double) PDF_stringwidth(pdf, Z_STRVAL_PP(arg2), PDF_get_value(pdf, 
"font", 0), PDF_get_value(pdf, "fontsize", 0));
+       if (ZEND_NUM_ARGS() == 2) {
+           font = PDF_get_value(pdf, "font", 0)+PDFLIB_FONT_OFFSET;
+           size = PDF_get_value(pdf, "fontsize", 0);
+       } else {
+           convert_to_long_ex(arg3);
+           font = Z_LVAL_PP(arg3);
+           convert_to_double_ex(arg4);
+           size = Z_DVAL_PP(arg4);
+       }
+       width = (double) PDF_stringwidth(pdf, Z_STRVAL_PP(arg2), 
+font-PDFLIB_FONT_OFFSET, size);
        RETURN_DOUBLE((double) width);
 }
 /* }}} */
@@ -913,10 +988,12 @@
        ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
 
        convert_to_double_ex(arg2);
+       /* pdflib will do this for you, will throw some exception
        if((Z_LVAL_PP(arg2) > 100) && (Z_LVAL_PP(arg2) < 0)) {
                php_error(E_WARNING,"Parameter of pdf_setflat() has to between 0 and 
100");
                RETURN_FALSE;
        }
+       */
 
        PDF_setflat(pdf, (float) Z_DVAL_PP(arg2));
        RETURN_TRUE;
@@ -937,10 +1014,12 @@
        ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
 
        convert_to_long_ex(arg2);
+       /* pdflib will do this for you, will throw some exception
        if((Z_LVAL_PP(arg2) > 2) && (Z_LVAL_PP(arg2) < 0)) {
                php_error(E_WARNING,"Parameter of pdf_setlinejoin() must be between 0 
and 2");
                RETURN_FALSE;
        }
+       */
 
        PDF_setlinejoin(pdf, Z_LVAL_PP(arg2));
        RETURN_TRUE;
@@ -961,10 +1040,12 @@
        ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
 
        convert_to_long_ex(arg2);
+       /* pdflib will do this for you, will throw some exception
        if((Z_LVAL_PP(arg2) > 2) && (Z_LVAL_PP(arg2) < 0)) {
                php_error(E_WARNING,"Parameter of pdf_setlinecap() must be > 0 and <= 
2");
                RETURN_FALSE;
        }
+       */
 
        PDF_setlinecap(pdf, Z_LVAL_PP(arg2));
        RETURN_TRUE;
@@ -985,10 +1066,12 @@
        ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
 
        convert_to_double_ex(arg2);
+       /* pdflib will do this for you, will throw some exception
        if(Z_DVAL_PP(arg2) < 1) {
                php_error(E_WARNING,"Parameter of pdf_setmiterlimit() must be >= 1");
                RETURN_FALSE;
        }
+       */
 
        PDF_setmiterlimit(pdf, (float) Z_DVAL_PP(arg2));
        RETURN_TRUE;
@@ -1342,11 +1425,6 @@
        convert_to_string_ex(arg2);
        convert_to_string_ex(arg3);
 
-    if (Z_STRVAL_PP(arg2) == "compatibility") {
-               php_error(E_ERROR,"Compatibility modes not supported at this time");
-               RETURN_FALSE;
-       }
-       
        PDF_set_parameter(pdf, Z_STRVAL_PP(arg2), Z_STRVAL_PP(arg3));
        RETURN_TRUE;
 }
@@ -1499,12 +1577,12 @@
 }
 /* }}} */
 
-/* {{{ proto int pdf_add_outline(int pdfdoc, string text [, int parent, int open]);
+/* {{{ proto int pdf_add_bookmark(int pdfdoc, string text [, int parent, int open]);
    Add bookmark for current page */
-PHP_FUNCTION(pdf_add_outline)
+PHP_FUNCTION(pdf_add_bookmark)
 {
        zval **arg1, **arg2, **arg3, **arg4;
-       int *outline, *parent, parentid, open, id;
+       int parentid, open, id;
        PDF *pdf;
 
        switch (ZEND_NUM_ARGS()) {
@@ -1532,12 +1610,8 @@
        convert_to_string_ex(arg2);
 
        if (ZEND_NUM_ARGS() > 2) {
-               ZEND_FETCH_RESOURCE(parent, int *, arg3, -1, "pdf outline", 
le_outline);
-               if (parent) {
-                       parentid = *parent;
-               } else {
-                       parentid = 0;
-               }
+               convert_to_long_ex(arg3);
+               parentid = Z_LVAL_PP(arg3);
 
                if (ZEND_NUM_ARGS() > 3) {
                        convert_to_long_ex(arg4);
@@ -1550,10 +1624,10 @@
                open = 0;
        }
 
+       /* will never return 0 */
        id = PDF_add_bookmark(pdf, Z_STRVAL_PP(arg2), parentid, open);
-       outline  = (int *) emalloc(sizeof(int));
-       *outline = id;
-       ZEND_REGISTER_RESOURCE(return_value, outline, le_outline);
+
+       RETURN_LONG(id);
 }
 /* }}} */
 
@@ -1647,14 +1721,7 @@
         
        pdf_image = PDF_open_image_file(pdf, type, image, "", 0);
 
-       if(pdf_image < 0) {
-               php_error(E_WARNING, "Could not open image");
-               RETURN_FALSE;
-       }
-
-       img = (int *) emalloc(sizeof(int));
-       *img = pdf_image;
-       ZEND_REGISTER_RESOURCE(return_value, img, le_pdf_image);
+       RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
 }
 
 /* {{{ proto int pdf_open_gif(int pdf, string giffile)
@@ -1689,16 +1756,25 @@
 }
 /* }}} */
 
-/* {{{ proto int pdf_open_image_file(int pdf, string type, string file)
+/* {{{ proto int pdf_open_image_file(int pdf, string type, string file, string 
+stringparam, int intparam)
    Opens an image file of the given type and returns an image for placement in a pdf 
document */
 PHP_FUNCTION(pdf_open_image_file)
 {
-       zval **arg1, **arg2, **arg3;
+       zval **arg1, **arg2, **arg3, **arg4, **arg5;
        PDF *pdf;
-       int pdf_image, *img;
+       int pdf_image, argc;
        char *image;
 
-       if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == 
FAILURE) {
+       switch ((argc = ZEND_NUM_ARGS())) {
+       case 3:
+               if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
+                       WRONG_PARAM_COUNT;
+               break;
+       case 5:
+               if (zend_get_parameters_ex(5, &arg1, &arg2, &arg3, &arg4, &arg5) == 
+FAILURE)
+                       WRONG_PARAM_COUNT;
+               break;
+       default:
                WRONG_PARAM_COUNT;
        }
 
@@ -1712,17 +1788,22 @@
 #else
        image = Z_STRVAL_PP(arg3);
 #endif  
-
-       pdf_image = PDF_open_image_file(pdf, Z_STRVAL_PP(arg2), image, "", 0);
 
-       if(pdf_image < 0) {
-               php_error(E_WARNING, "Could not open image: %s", image);
-               RETURN_FALSE;
+       if (argc == 3) {
+               pdf_image = PDF_open_image_file(pdf, Z_STRVAL_PP(arg2), image, "", 0);
+       } else {
+           convert_to_string_ex(arg4);
+           convert_to_long_ex(arg5);
+               pdf_image = PDF_open_image_file(pdf, Z_STRVAL_PP(arg2), image, 
+Z_STRVAL_PP(arg4), Z_LVAL_PP(arg5));
        }
 
-       img = (int *) emalloc(sizeof(int));
-       *img = pdf_image;
-       ZEND_REGISTER_RESOURCE(return_value, img, le_pdf_image);
+       if (pdf_image == -1) {
+           /* pdflib will do this for you, will throw some exception
+           php_error(E_WARNING, "Could not open image: %s", image);
+           */
+           RETURN_FALSE;
+       }
+       RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
 
 }
 /* }}} */
@@ -1765,35 +1846,33 @@
        efree(buffer);
 
        if(pdf_image == -1) {
+               /* pdflib will do this for you, will throw some exception
                php_error(E_WARNING, "Could not open image");
+               */
                efree(buffer);
                RETURN_FALSE;
        }
 
-       img = (int *) emalloc(sizeof(int));
-       *img = pdf_image;
-       ZEND_REGISTER_RESOURCE(return_value, img, le_pdf_image);
+       RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
 }
 /* }}} */
 #endif /* HAVE_LIBGD13 */
 
-/* {{{ proto void pdf_close_image(int pdfimage)
+/* {{{ proto void pdf_close_image(int *pdf, int pdfimage)
    Closes the pdf image */
 PHP_FUNCTION(pdf_close_image)
 {
        zval **arg1, **arg2;
        PDF *pdf;
-       int *pdf_image;
 
        if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == 
FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
        ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
-       ZEND_FETCH_RESOURCE(pdf_image, int *, arg2, -1, "pdf image", le_pdf_image);
+       convert_to_long_ex(arg2);
 
-       PDF_close_image(pdf, *pdf_image);
-       RETURN_TRUE;
+       PDF_close_image(pdf, Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
 }
 /* }}} */
 
@@ -1803,19 +1882,19 @@
 {
        zval **arg1, **arg2, **arg3, **arg4, **arg5;
        PDF *pdf;
-       int *pdf_image;
 
        if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &arg1, &arg2, &arg3, 
&arg4, &arg5) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
        ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
-       ZEND_FETCH_RESOURCE(pdf_image, int *, arg2, -1, "pdf image", le_pdf_image);
 
+       convert_to_long_ex(arg2);
        convert_to_double_ex(arg3);
        convert_to_double_ex(arg4);
        convert_to_double_ex(arg5);
-       PDF_place_image(pdf, *pdf_image, (float) Z_DVAL_PP(arg3), (float) 
Z_DVAL_PP(arg4), Z_DVAL_PP(arg5));
+
+       PDF_place_image(pdf, Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET, (float) 
+Z_DVAL_PP(arg3), (float) Z_DVAL_PP(arg4), Z_DVAL_PP(arg5));
        RETURN_TRUE;
 }
 /* }}} */
@@ -1826,16 +1905,16 @@
 {
        zval **arg1, **arg2;
        PDF *pdf;
-       int *pdf_image, width;
+       int width;
 
        if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == 
FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
        ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
-       ZEND_FETCH_RESOURCE(pdf_image, int *, arg2, -1, "pdf image", le_pdf_image);
+       convert_to_long_ex(arg2);
 
-       width = PDF_get_value(pdf, "imagewidth", *pdf_image);
+       width = PDF_get_value(pdf, "imagewidth", Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
        RETURN_LONG(width);
 }
 /* }}} */
@@ -1846,16 +1925,16 @@
 {
        zval **arg1, **arg2;
        PDF *pdf;
-       int *pdf_image, height;
+       int height;
 
        if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == 
FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
        ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
-       ZEND_FETCH_RESOURCE(pdf_image, int *, arg2, -1, "pdf image", le_pdf_image);
+       convert_to_long_ex(arg2);
 
-       height = PDF_get_value(pdf, "imageheight", *pdf_image);
+       height = PDF_get_value(pdf, "imageheight", 
+Z_LVAL_PP(arg2)-PDFLIB_IMAGE_OFFSET);
        RETURN_LONG(height);
 }
 /* }}} */
@@ -1981,7 +2060,7 @@
 /* }}} */
 
 /* {{{ proto void pdf_add_annotation(int pdfdoc, double xll, double yll, double xur, 
double xur, string title, string text)
-   Sets annotation */
+   Sets annotation (depreciated use pdf_add_note instead)*/
 PHP_FUNCTION(pdf_add_annotation)
 {
        zval **argv[7];
@@ -2007,6 +2086,481 @@
                                          Z_STRVAL_PP(argv[6]),
                                          Z_STRVAL_PP(argv[5]),
                                          "note", 1);
+
+       RETURN_TRUE;
+}
+/* }}} */
+
+/* RJS: START OF NEW CODE */
+
+/* {{{ proto PDF *pdf_new()
+    Create a new PDF object */
+PHP_FUNCTION(pdf_new) {
+       PDF *pdf;
+
+       pdf = PDF_new2(custom_errorhandler, pdf_emalloc, pdf_realloc, pdf_efree, NULL);
+       PDF_set_parameter(pdf, "imagewarning", "true");
+
+       ZEND_REGISTER_RESOURCE(return_value, pdf, le_pdf);
+}
+
+/* }}} */
+
+/* {{{ proto void pdf_delete(int pdfdoc)
+
+   Deletes the pdf object */
+PHP_FUNCTION(pdf_delete) {
+       zval **arg1;
+       PDF *pdf;
+
+       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       PDF_delete(pdf);
+       zend_list_delete(Z_LVAL_PP(arg1));
+
+       RETURN_TRUE;
+}
+
+/* }}} */
+
+/* {{{ proto int pdf_open_file(int pdfdoc [, char *filename])
+
+   Opens a new pdf document. If filename is NULL, document is created in memory.
+   This is not yet fully supported. */
+
+PHP_FUNCTION(pdf_open_file) {
+       zval **arg1, **arg2;
+       int pdf_file;
+       char *filename;
+       int argc;
+       PDF *pdf;
+
+       if((argc = ZEND_NUM_ARGS()) > 2)
+               WRONG_PARAM_COUNT;
+
+       if (argc == 1) {
+               if (zend_get_parameters_ex(1, &arg1) == FAILURE)
+                       WRONG_PARAM_COUNT;
+       } else {
+               if (zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE)
+                       WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       if (argc == 2) {
+               convert_to_string_ex(arg2);
+#ifdef VIRTUAL_DIR
+               virtual_filepath(Z_STRVAL_PP(arg2), &filename);
+#else
+               filename = Z_STRVAL_PP(arg2);
+#endif
+               pdf_file = PDF_open_file(pdf, filename);
+       } else {
+               /* open in memory */
+               pdf_file = PDF_open_file(pdf, "");
+       }
+
+       if (pdf_file == -1)
+           RETURN_FALSE;
+
+       RETURN_TRUE;
+}
+
+/* }}} */
+
+/* {{{ proto const char *pdf_get_buffer(int pdfdoc)
+
+   Fetch the full buffer containig the generated PDF data */
+PHP_FUNCTION(pdf_get_buffer) {
+       zval **arg1;
+       long size;
+       PDF *pdf;
+       const char *buffer;
+
+       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg1) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       buffer = PDF_get_buffer(pdf, &size);
+
+       RETURN_STRINGL((char *)buffer, size, 0);
+}
+
+/* }}} */
+
+/* {{{ proto int pdf_findfont(int pdfdoc, string fontname, string encoding [, int 
+embed])
+   Prepare the font fontname for later use with pdf_setfont */
+PHP_FUNCTION(pdf_findfont) {
+       zval **arg1, **arg2, **arg3, **arg4;
+       int id, embed, font;
+       const char *fontname, *encoding;
+       PDF *pdf;
+
+       switch (ZEND_NUM_ARGS()) {
+       case 3:
+               if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE) {
+                       WRONG_PARAM_COUNT;
+               }
+               embed = 0;
+               break;
+       case 4:
+               if (zend_get_parameters_ex(4, &arg1, &arg2, &arg3, &arg4) == FAILURE) {
+                       WRONG_PARAM_COUNT;
+               }
+               convert_to_long_ex(arg4);
+               embed = Z_LVAL_PP(arg4);
+               break;
+       default:
+               WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       convert_to_string_ex(arg2);
+       fontname = Z_STRVAL_PP(arg2);
+
+       convert_to_string_ex(arg3);
+       encoding = Z_STRVAL_PP(arg3);
+
+       font = PDF_findfont(pdf, fontname, encoding, embed);
+       if (font == -1) {
+               /* pdflib will do this for you, will throw some exception
+               php_error(E_WARNING,"Font %s not found", fontname);
+               */
+               RETURN_FALSE;
+       }
+
+       RETURN_LONG(font+PDFLIB_FONT_OFFSET);
+}
+/* }}} */
+
+/* {{{ proto void pdf_setfont(int pdfdoc, int font, float fontsize)
+   Set the curren font in the fiven fontsize */
+PHP_FUNCTION(pdf_setfont) {
+       zval **arg1, **arg2, **arg3;
+       int font, argc;
+       float fontsize;
+       PDF *pdf;
+
+       if(argc != 3)
+               WRONG_PARAM_COUNT;
+       if (zend_get_parameters_ex(3, &arg1, &arg2, &arg3) == FAILURE)
+               WRONG_PARAM_COUNT;
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       convert_to_long_ex(arg2);
+       font = Z_LVAL_PP(arg2);
+
+       convert_to_double_ex(arg3);
+       fontsize = (float)Z_DVAL_PP(arg3);
+
+       PDF_setfont(pdf, font+PDFLIB_FONT_OFFSET, fontsize);
+
+       RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto void pdf_setpolydash(int pdfdoc, double *darray)
+   Sets more complicated dash pattern 
+   RJS: TODO: not yet working, dont know how to handle this pointer to an array ... 
+   maybe we have to ommit this from the interface ??? */
+PHP_FUNCTION(pdf_setpolydash) {
+       zval **arg1, **arg2;
+       HashTable *array;
+       int len, i;
+       float *darray;
+       PDF *pdf;
+
+       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &arg1, &arg2) == 
+FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       convert_to_array_ex(arg2);
+       array = Z_ARRVAL_PP(arg2);
+       len = zend_hash_num_elements(array);
+
+       if (NULL == (darray = emalloc(len * sizeof(double)))) {
+           RETURN_FALSE;
+       }
+       zend_hash_internal_pointer_reset(array);
+       for (i=0; i<len; i++) {
+           zval *keydata, **keydataptr;
+
+           zend_hash_get_current_data(array, (void **) &keydataptr);
+           keydata = *keydataptr;
+           if (keydata->type == IS_DOUBLE) {
+               darray[i] = (float) keydata->value.dval;
+           } else if (keydata->type == IS_LONG) {
+               darray[i] = (float) keydata->value.lval;
+           } else {
+               php_error(E_WARNING,"PDFlib set_polydash: illegal darray value");
+           }
+           zend_hash_move_forward(array);
+       }
+
+       PDF_setpolydash(pdf, darray, len);
+
+       efree(darray);
+       RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto void pdf_concat(int pdf, double a, double b, double c, double d, double 
+e, double f)
+   Concatenate a matrix to the curren transformation matrix for text and graphics */
+PHP_FUNCTION(pdf_concat) {
+       zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
+       PDF *pdf;
+
+       if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, 
+&arg4, &arg5, &arg6, &arg7) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       convert_to_double_ex(arg2);
+       convert_to_double_ex(arg3);
+       convert_to_double_ex(arg4);
+       convert_to_double_ex(arg5);
+       convert_to_double_ex(arg6);
+
+       PDF_concat(pdf,
+           (float) Z_DVAL_PP(arg2),
+           (float) Z_DVAL_PP(arg3),
+           (float) Z_DVAL_PP(arg4),
+           (float) Z_DVAL_PP(arg5),
+           (float) Z_DVAL_PP(arg6),
+           (float) Z_DVAL_PP(arg7));
+
+       RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto int pdf_open_CCITT(int pdf, string filename, int width, int height, int 
+BitReverse, int K, Int Blackls1)
+   Open an Image file with raw CCITTG3 or G4 compresed bitmap data */
+PHP_FUNCTION(pdf_open_CCITT) {
+       zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
+       PDF *pdf;
+       int pdf_image, *img;
+       char *image;
+
+       if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, 
+&arg4, &arg5, &arg6, &arg7) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       convert_to_string_ex(arg2);
+#ifdef VIRTUAL_DIR
+       virtual_filepath(Z_STRVAL_PP(arg2), &image);
+#else
+       image = Z_STRVAL_PP(arg2);
+#endif  
+
+       convert_to_long_ex(arg3);
+       convert_to_long_ex(arg4);
+       convert_to_long_ex(arg5);
+       convert_to_long_ex(arg6);
+       convert_to_long_ex(arg7);
+
+       pdf_image = PDF_open_CCITT(pdf,
+           image,
+           Z_LVAL_PP(arg3),
+           Z_LVAL_PP(arg4),
+           Z_LVAL_PP(arg5),
+           Z_LVAL_PP(arg6),
+           Z_LVAL_PP(arg7));
+
+       RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
+}
+/* }}} */
+
+/* {{{ proto int pdf_open_image(int pdf, string type, string source,
+       string data, long length, int width, int height, int components,
+       int bpc, string params)
+   Opens an image of the given type and returns an image for placement in a pdf 
+document */
+PHP_FUNCTION(pdf_open_image) {
+       zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, 
+**arg10;
+       PDF *pdf;
+       int pdf_image, *img;
+       const char *image;
+
+       if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &arg1, &arg2, &arg3, 
+&arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       convert_to_string_ex(arg2);
+       convert_to_string_ex(arg3);
+       convert_to_string_ex(arg4);
+       convert_to_long_ex(arg5);
+       convert_to_long_ex(arg6);
+       convert_to_long_ex(arg7);
+       convert_to_long_ex(arg8);
+       convert_to_long_ex(arg9);
+       convert_to_string_ex(arg10);
+
+#ifdef VIRTUAL_DIR
+       virtual_filepath(Z_STRVAL_PP(arg4), &image);
+#else
+       image = Z_STRVAL_PP(arg4);
+#endif  
+
+       pdf_image = PDF_open_image(pdf,
+               Z_STRVAL_PP(arg2),
+               Z_STRVAL_PP(arg3),
+               image,
+               Z_LVAL_PP(arg5),
+               Z_LVAL_PP(arg6),
+               Z_LVAL_PP(arg7),
+               Z_LVAL_PP(arg8),
+               Z_LVAL_PP(arg9),
+               Z_STRVAL_PP(arg10));
+
+       RETURN_LONG(pdf_image+PDFLIB_IMAGE_OFFSET);
+}
+/* }}} */
+
+/* {{{ proto void pdf_attach_file(int pdf, double lly, double lly,
+       double urx, double ury, string filename,
+       string description, string author, string mimetype, string icon)
+   Add a file attachment annotation at the rectangle specified by his lower left and 
+upper right corners */
+PHP_FUNCTION(pdf_attach_file) {
+       zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9, 
+**arg10;
+       PDF *pdf;
+       int attach;
+
+       if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &arg1, &arg2, &arg3, 
+&arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       convert_to_long_ex(arg2);
+       convert_to_long_ex(arg3);
+       convert_to_long_ex(arg4);
+       convert_to_long_ex(arg5);
+       convert_to_string_ex(arg6);
+       convert_to_string_ex(arg7);
+       convert_to_string_ex(arg8);
+       convert_to_string_ex(arg9);
+       convert_to_string_ex(arg10);
+
+       PDF_attach_file(pdf,
+               (float) Z_DVAL_PP(arg2),
+               (float) Z_DVAL_PP(arg3),
+               (float) Z_DVAL_PP(arg4),
+               (float) Z_DVAL_PP(arg5),
+               Z_STRVAL_PP(arg6),
+               Z_STRVAL_PP(arg7),
+               Z_STRVAL_PP(arg8),
+               Z_STRVAL_PP(arg9),
+               Z_STRVAL_PP(arg10));
+
+       RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto void pdf_add_note(int pdfdoc, double llx, double lly, double urx, double 
+ury, string contents, string title, string icon, int open)
+   Sets annotation */
+PHP_FUNCTION(pdf_add_note) {
+       zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7, **arg8, **arg9;
+       PDF *pdf;
+
+       if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &arg1, &arg2, &arg3, 
+&arg4, &arg5, &arg6, &arg7, &arg8, &arg9) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       convert_to_double_ex(arg2);
+       convert_to_double_ex(arg3);
+       convert_to_double_ex(arg4);
+       convert_to_double_ex(arg5);
+       convert_to_string_ex(arg6);
+       convert_to_string_ex(arg7);
+       convert_to_string_ex(arg8);
+       convert_to_long_ex(arg9);
+
+       PDF_add_note(pdf,
+                (float) Z_DVAL_PP(arg2),
+                (float) Z_DVAL_PP(arg3),
+                (float) Z_DVAL_PP(arg4),
+                (float) Z_DVAL_PP(arg5),
+                Z_STRVAL_PP(arg6),
+                Z_STRVAL_PP(arg7),
+                Z_STRVAL_PP(arg8),
+                Z_LVAL_PP(arg9));
+
+       RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto void pdf_add_locallink(int pdfdoc, double llx, double lly, double urx, 
+double ury, int page, string dest)
+   Adds link to web resource */
+PHP_FUNCTION(pdf_add_locallink) {
+       zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6, **arg7;
+       PDF *pdf;
+
+       if (ZEND_NUM_ARGS() != 7 || zend_get_parameters_ex(7, &arg1, &arg2, &arg3, 
+&arg4, &arg5, &arg6) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       convert_to_double_ex(arg2);
+       convert_to_double_ex(arg3);
+       convert_to_double_ex(arg4);
+       convert_to_double_ex(arg5);
+       convert_to_long_ex(arg6);
+       convert_to_string_ex(arg7);
+
+       PDF_add_locallink(pdf,
+               (float) Z_DVAL_PP(arg2),
+               (float) Z_DVAL_PP(arg3),
+               (float) Z_DVAL_PP(arg4),
+               (float) Z_DVAL_PP(arg5),
+               Z_LVAL_PP(arg6),
+               Z_STRVAL_PP(arg7));
+
+       RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto void pdf_add_launchlink(int pdfdoc, double llx, double lly, double urx, 
+double ury, string filename)
+   Adds link to web resource */
+PHP_FUNCTION(pdf_add_launchlink) {
+       zval **arg1, **arg2, **arg3, **arg4, **arg5, **arg6;
+       PDF *pdf;
+
+       if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &arg1, &arg2, &arg3, 
+&arg4, &arg5, &arg6) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+
+       ZEND_FETCH_RESOURCE(pdf, PDF *, arg1, -1, "pdf document", le_pdf);
+
+       convert_to_double_ex(arg2);
+       convert_to_double_ex(arg3);
+       convert_to_double_ex(arg4);
+       convert_to_double_ex(arg5);
+       convert_to_string_ex(arg6);
+
+       PDF_add_launchlink(pdf,
+               (float) Z_DVAL_PP(arg2),
+               (float) Z_DVAL_PP(arg3),
+               (float) Z_DVAL_PP(arg4),
+               (float) Z_DVAL_PP(arg5),
+               Z_STRVAL_PP(arg6));
 
        RETURN_TRUE;
 }
Index: php4/ext/pdf/php_pdf.h
diff -u php4/ext/pdf/php_pdf.h:1.11 php4/ext/pdf/php_pdf.h:1.12
--- php4/ext/pdf/php_pdf.h:1.11 Wed Jan  3 08:05:44 2001
+++ php4/ext/pdf/php_pdf.h      Fri Jan 26 00:20:23 2001
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_pdf.h,v 1.11 2001/01/03 16:05:44 sniper Exp $ */
+/* $Id: php_pdf.h,v 1.12 2001/01/26 08:20:23 steinm Exp $ */
 
 #ifndef PHP_PDF_H
 #define PHP_PDF_H
@@ -35,97 +35,116 @@
 extern PHP_MINFO_FUNCTION(pdf);
 extern PHP_MINIT_FUNCTION(pdf);
 extern PHP_MSHUTDOWN_FUNCTION(pdf);
-PHP_FUNCTION(pdf_set_info);
-PHP_FUNCTION(pdf_set_info_creator);
-PHP_FUNCTION(pdf_set_info_title);
-PHP_FUNCTION(pdf_set_info_subject);
-PHP_FUNCTION(pdf_set_info_author);
-PHP_FUNCTION(pdf_set_info_keywords);
-PHP_FUNCTION(pdf_open);
+PHP_FUNCTION(pdf_new);         /* new function */
+PHP_FUNCTION(pdf_delete);      /* new function */
+PHP_FUNCTION(pdf_open_file);
+PHP_FUNCTION(pdf_get_buffer);  /* new function */
 PHP_FUNCTION(pdf_close);
 PHP_FUNCTION(pdf_begin_page);
 PHP_FUNCTION(pdf_end_page);
+PHP_FUNCTION(pdf_get_value);
+PHP_FUNCTION(pdf_set_value);
+PHP_FUNCTION(pdf_get_parameter);
+PHP_FUNCTION(pdf_set_parameter);
+PHP_FUNCTION(pdf_findfont);    /* new function */
+PHP_FUNCTION(pdf_setfont);     /* new function */
 PHP_FUNCTION(pdf_show);
 PHP_FUNCTION(pdf_show_xy);
-#if PDFLIB_MAJORVERSION >= 3 | (PDFLIB_MAJORVERSION >= 2 & PDFLIB_MINORVERSION >= 20)
+PHP_FUNCTION(pdf_continue_text);
 PHP_FUNCTION(pdf_show_boxed);
-PHP_FUNCTION(pdf_skew);
-#endif
-PHP_FUNCTION(pdf_set_font);
-PHP_FUNCTION(pdf_get_font);
-PHP_FUNCTION(pdf_get_fontname);
-PHP_FUNCTION(pdf_get_fontsize);
-PHP_FUNCTION(pdf_set_leading);
-PHP_FUNCTION(pdf_set_text_rendering);
-PHP_FUNCTION(pdf_set_horiz_scaling);
-PHP_FUNCTION(pdf_set_text_rise);
-#if PDFLIB_MAJORVERSION < 3 & PDFLIB_MINORVERSION < 30
-PHP_FUNCTION(pdf_set_text_matrix);
-#endif
+PHP_FUNCTION(pdf_stringwidth); /* new parameters: [int font, float size] */
 PHP_FUNCTION(pdf_set_text_pos);
-PHP_FUNCTION(pdf_set_char_spacing);
-PHP_FUNCTION(pdf_set_word_spacing);
-PHP_FUNCTION(pdf_continue_text);
-PHP_FUNCTION(pdf_stringwidth);
-PHP_FUNCTION(pdf_save);
-PHP_FUNCTION(pdf_restore);
-PHP_FUNCTION(pdf_translate);
-PHP_FUNCTION(pdf_scale);
-PHP_FUNCTION(pdf_rotate);
+PHP_FUNCTION(pdf_setdash);
+PHP_FUNCTION(pdf_setpolydash); /* new function: not yet finished */
 PHP_FUNCTION(pdf_setflat);
 PHP_FUNCTION(pdf_setlinejoin);
 PHP_FUNCTION(pdf_setlinecap);
 PHP_FUNCTION(pdf_setmiterlimit);
 PHP_FUNCTION(pdf_setlinewidth);
-PHP_FUNCTION(pdf_setdash);
+PHP_FUNCTION(pdf_save);
+PHP_FUNCTION(pdf_restore);
+PHP_FUNCTION(pdf_translate);
+PHP_FUNCTION(pdf_scale);
+PHP_FUNCTION(pdf_rotate);
+PHP_FUNCTION(pdf_skew);
+PHP_FUNCTION(pdf_concat);      /* new function */
 PHP_FUNCTION(pdf_moveto);
-PHP_FUNCTION(pdf_curveto);
 PHP_FUNCTION(pdf_lineto);
+PHP_FUNCTION(pdf_curveto);
 PHP_FUNCTION(pdf_circle);
 PHP_FUNCTION(pdf_arc);
 PHP_FUNCTION(pdf_rect);
 PHP_FUNCTION(pdf_closepath);
-PHP_FUNCTION(pdf_closepath_stroke);
 PHP_FUNCTION(pdf_stroke);
+PHP_FUNCTION(pdf_closepath_stroke);
 PHP_FUNCTION(pdf_fill);
 PHP_FUNCTION(pdf_fill_stroke);
 PHP_FUNCTION(pdf_closepath_fill_stroke);
-PHP_FUNCTION(pdf_endpath);
 PHP_FUNCTION(pdf_clip);
-PHP_FUNCTION(pdf_set_parameter);
-PHP_FUNCTION(pdf_get_parameter);
-PHP_FUNCTION(pdf_set_value);
-PHP_FUNCTION(pdf_get_value);
+PHP_FUNCTION(pdf_endpath);
 PHP_FUNCTION(pdf_setgray_fill);
 PHP_FUNCTION(pdf_setgray_stroke);
 PHP_FUNCTION(pdf_setgray);
 PHP_FUNCTION(pdf_setrgbcolor_fill);
 PHP_FUNCTION(pdf_setrgbcolor_stroke);
 PHP_FUNCTION(pdf_setrgbcolor);
-PHP_FUNCTION(pdf_add_outline);
-PHP_FUNCTION(pdf_set_transition);
-PHP_FUNCTION(pdf_set_duration);
-PHP_FUNCTION(pdf_open_jpeg);
-PHP_FUNCTION(pdf_open_tiff);
-PHP_FUNCTION(pdf_open_png);
-PHP_FUNCTION(pdf_open_gif);
-PHP_FUNCTION(pdf_open_image_file);
-#if HAVE_LIBGD13
-PHP_FUNCTION(pdf_open_memory_image);
-#endif
+PHP_FUNCTION(pdf_open_image_file);  /* new parameters: [char *stringpram, int 
+intparam] */
+PHP_FUNCTION(pdf_open_CCITT);  /* new function */
+PHP_FUNCTION(pdf_open_image);  /* new function: checkit not yet completeted :( */
 PHP_FUNCTION(pdf_close_image);
 PHP_FUNCTION(pdf_place_image);
-PHP_FUNCTION(pdf_put_image);
-PHP_FUNCTION(pdf_execute_image);
-PHP_FUNCTION(pdf_add_weblink);
+PHP_FUNCTION(pdf_add_bookmark);
+PHP_FUNCTION(pdf_set_info);
+PHP_FUNCTION(pdf_attach_file); /* new function */
+PHP_FUNCTION(pdf_add_note);    /* new function */
 PHP_FUNCTION(pdf_add_pdflink);
-PHP_FUNCTION(pdf_add_annotation);
+PHP_FUNCTION(pdf_add_locallink);       /* new function */
+PHP_FUNCTION(pdf_add_launchlink);      /* new function */
+PHP_FUNCTION(pdf_add_weblink);
 PHP_FUNCTION(pdf_set_border_style);
 PHP_FUNCTION(pdf_set_border_color);
 PHP_FUNCTION(pdf_set_border_dash);
-PHP_FUNCTION(pdf_get_image_width);
-PHP_FUNCTION(pdf_get_image_height);
 
+/* RJS:
+   End of the official PDFLIB V3.x API */
+
+/* old font handling */
+PHP_FUNCTION(pdf_set_font);            /* deprecated */
+PHP_FUNCTION(pdf_get_font);            /* deprecated */
+PHP_FUNCTION(pdf_get_fontname);                /* deprecated */
+PHP_FUNCTION(pdf_get_fontsize);                /* deprecated */
+
+/* old way of starting a PDF document */
+PHP_FUNCTION(pdf_open);                        /* deprecated */
+
+/* old stuff for setting infos */
+PHP_FUNCTION(pdf_set_info_creator);    /* deprecated */
+PHP_FUNCTION(pdf_set_info_title);      /* deprecated */
+PHP_FUNCTION(pdf_set_info_subject);    /* deprecated */
+PHP_FUNCTION(pdf_set_info_author);     /* deprecated */
+PHP_FUNCTION(pdf_set_info_keywords);   /* deprecated */
+PHP_FUNCTION(pdf_set_leading);         /* deprecated */
+PHP_FUNCTION(pdf_set_text_rendering);  /* deprecated */
+PHP_FUNCTION(pdf_set_horiz_scaling);   /* deprecated */
+PHP_FUNCTION(pdf_set_text_rise);               /* deprecated */
+PHP_FUNCTION(pdf_set_char_spacing);    /* deprecated */
+PHP_FUNCTION(pdf_set_word_spacing);    /* deprecated */
+PHP_FUNCTION(pdf_set_transition);      /* deprecated */
+PHP_FUNCTION(pdf_set_duration);                /* deprecated */
+PHP_FUNCTION(pdf_get_image_height);    /* deprecated */
+PHP_FUNCTION(pdf_get_image_width);     /* deprecated */
+
+/* old stuff for opening images */
+PHP_FUNCTION(pdf_open_jpeg);           /* deprecated */
+PHP_FUNCTION(pdf_open_tiff);           /* deprecated */
+PHP_FUNCTION(pdf_open_png);            /* deprecated */
+PHP_FUNCTION(pdf_open_gif);            /* deprecated */
+
+/* some more stuff for compatibility */
+PHP_FUNCTION(pdf_add_annotation);
+#if HAVE_LIBGD13
+PHP_FUNCTION(pdf_open_memory_image);
+#endif
 
 #ifdef ZTS
 #define PDFG(v) (pdf_globals->v)

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to