This is what I already submitted as a comment to the cpdf_text function. Maybe you can include this simple patch in one of the following releases... it would be great. Here's the text I submitted as comment:
Unfortunately there hasn't been anyone else adding the textBox feature to the php CPDF functions, so I had to it. ;) Do the following, in order to get a cpdf_textbox function, so that you don't have to call the cpdf_text function for every single line of text you want to print. Add the following line to <php-source-dir>/ext/cpdf/php_cpdf.h line 58: PHP_FUNCTION(cpdf_textbox); Add the following line to <php-source-dir>/ext/cpdf/cpdf.c line 96: PHP_FE(cpdf_textbox, NULL) Add the code block below to <php-source-dir>/ext/cpdf/cpdf.c somewhere after the cpdf_text function (i.e. line 847) snip----------- /* {{{ proto void cpdf_textbox(int pdfdoc, double x-koor, double y-koor, double width, double height, double angle, double linespace, string text [, int alignmode [, float paragraphspacing [, int newlinemode]]]); Output a textbox */ PHP_FUNCTION(cpdf_textbox) { pval *argv[11]; int id, type, argc, mode=0; CPDFdoc *pdf; CPDFtboxAttr tbattr; argc = ZEND_NUM_ARGS(); if((argc < 8) || (argc > 11)) WRONG_PARAM_COUNT; if (getParametersArray(ht, argc, argv) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(argv[0]); convert_to_double(argv[1]); convert_to_double(argv[2]); convert_to_double(argv[3]); convert_to_double(argv[4]); convert_to_double(argv[5]); convert_to_double(argv[6]); convert_to_string(argv[7]); id=argv[0]->value.lval; pdf = zend_list_find(id, &type); if(!pdf || type!=CPDF_GLOBAL(le_cpdf)) { php_error(E_WARNING, "Unable to find identifier %d", id); RETURN_FALSE; } tbattr.alignmode = TBOX_LEFT; tbattr.NLmode = 0; tbattr.paragraphSpacing = 0.0; tbattr.noMark = 0; switch(argc) { case 9: convert_to_long(argv[8]); tbattr.alignmode = argv[8]->value.lval; break; case 10: convert_to_long(argv[8]); convert_to_double(argv[9]); tbattr.alignmode = argv[8]->value.lval; tbattr.paragraphSpacing = (float) argv[9]->value.dval; break; case 11: convert_to_long(argv[8]); convert_to_double(argv[9]); convert_to_long(argv[10]); tbattr.alignmode = argv[8]->value.lval; tbattr.paragraphSpacing = (float) argv[9]->value.dval; tbattr.NLmode = argv[10]->value.lval; break; } cpdf_textBox(pdf, (float) argv[1]->value.dval, // x (float) argv[2]->value.dval, // y (float) argv[3]->value.dval, // width (float) argv[4]->value.dval, // height (float) argv[5]->value.dval, // angle (float) argv[6]->value.dval, // linespace &tbattr, // Attributes prespecified argv[7]->value.str.val); // Text string RETURN_TRUE; } /* }}} */ snap----------- Then recompile php with cpdf support and use the new function. It has to be called in between the cpdf_begin_text and cpdf_end_text tags cpdf_textbox(int pdfdoc, double x-koor, double y-koor, double width, double height, double angle, double linespace, string text [, int alignmode [, float paragraphspacing [, int newlinemode]]]); Notes: Alignmode aligns the text within the box: 0 -- left (default) 1 -- center 2 -- right 3 -- justify Newline mode: if non-zero, NL ("\n") is is a line break, if 0 reformatted (default 0) Have fun with it. It works great for me. regards, lars -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php