PDF functions PDF
&reftitle.intro; The PDF functions in PHP can create PDF files using the PDFlib library created by Thomas Merz. The documentation in this section is only meant to be an overview of the available functions in the PDFlib library and should not be considered an exhaustive reference. Please consult the documentation included in the source distribution of PDFlib for the full and detailed explanation of each function here. It provides a very good overview of what PDFlib is capable of doing and contains the most up-to-date documentation of all functions. All of the functions in PDFlib and the PHP module have identical function names and parameters. You will need to understand some of the basic concepts of PDF and PostScript to efficiently use this extension. All lengths and coordinates are measured in PostScript points. There are generally 72 PostScript points to an inch, but this depends on the output resolution. Please see the PDFlib documentation included with the source distribution of PDFlib for a more thorough explanation of the coordinate system used. Please note that most of the PDF functions require a pdfdoc as its first parameter. Please see the examples below for more information. If you're interested in alternative free PDF generators that do not utilize external PDF libraries, see this related FAQ.
&reftitle.required; PDFlib is available for download at &url.pdf;, but requires that you purchase a license for commercial use. The JPEG and TIFF libraries are required to compile this extension.
Issues with older versions of PDFlib Any version of PHP 4 after March 9, 2000 does not support versions of PDFlib older than 3.0. PDFlib 3.0 or greater is supported by PHP 3.0.19 and later.
&reference.pdf.configure;
&reftitle.runtime; &no.config;
Confusion with old PDFlib versions Starting with PHP 4.0.5, the PHP extension for PDFlib is officially supported by PDFlib GmbH. This means that all the functions described in the PDFlib manual (V3.00 or greater) are supported by PHP 4 with exactly the same meaning and the same parameters. Only the return values may differ from the PDFlib manual, because the PHP convention of returning &false; was adopted. For compatibility reasons, this binding for PDFlib still supports the old functions, but they should be replaced by their new versions. PDFlib GmbH will not support any problems arising from the use of these deprecated functions. Deprecated functions and their replacements Old function Replacement pdf_put_image Not needed anymore. pdf_execute_image Not needed anymore. pdf_get_annotation pdf_get_bookmark using the same parameters. pdf_get_font pdf_get_value passing "font" as the second parameter. pdf_get_fontsize pdf_get_value passing "fontsize" as the second parameter. pdf_get_fontname pdf_get_parameter passing "fontname" as the second parameter. pdf_set_info_creator pdf_set_info passing "Creator" as the second parameter. pdf_set_info_title pdf_set_info passing "Title" as the second parameter. pdf_set_info_subject pdf_set_info passing "Subject" as the second parameter. pdf_set_info_author pdf_set_info passing "Author" as the second parameter. pdf_set_info_keywords pdf_set_info passing "Keywords" as the second parameter. pdf_set_leading pdf_set_value passing "leading" as the second parameter. pdf_set_text_rendering pdf_set_value passing "textrendering" as the second parameter. pdf_set_text_rise pdf_set_value passing "textrise" as the second parameter. pdf_set_horiz_scaling pdf_set_value passing "horizscaling" as the second parameter. pdf_set_text_matrix Not available anymore pdf_set_char_spacing pdf_set_value passing "charspacing" as the second parameter. pdf_set_word_spacing pdf_set_value passing "wordspacing" as the second parameter. pdf_set_transition pdf_set_parameter passing "transition" as the second parameter. pdf_open pdf_new plus an subsequent call of pdf_open_file pdf_set_font pdf_findfont plus an subsequent call of pdf_setfont pdf_set_duration pdf_set_value passing "duration" as the second parameter. pdf_open_gif pdf_open_image_file passing "gif" as the second parameter. pdf_open_jpeg pdf_open_image_file passing "jpeg" as the second parameter. pdf_open_tiff pdf_open_image_file passing "tiff" as the second parameter. pdf_open_png pdf_open_image_file passing "png" as the second parameter. pdf_get_image_width pdf_get_value passing "imagewidth" as the second parameter and the image as the third parameter. pdf_get_image_height pdf_get_value passing "imageheight" as the second parameter and the image as the third parameter.
&reftitle.examples; Most of the functions are fairly easy to use. The most difficult part is probably creating your first PDF document. The following example should help to get you started. It creates test.pdf with one page. The page contains the text "Times Roman outlined" in an outlined, 30pt font. The text is also underlined. Creating a PDF document with PDFlib finished"; ?> ]]> The script getpdf.php just returns the pdf document. Outputting a precalculated PDF ]]> The PDFlib distribution contains a more complex example which creates a page with an analog clock. Here we use the in-memory creation feature of PDFlib to alleviate the need to use temporary files. The example was converted to PHP from the PDFlib example. (The same example is available in the CLibPDF documentation.) pdfclock example from PDFlib distribution 0) { pdf_begin_page($pdf, 2 * ($radius + $margin), 2 * ($radius + $margin)); pdf_set_parameter($pdf, "transition", "wipe"); pdf_set_value($pdf, "duration", 0.5); pdf_translate($pdf, $radius + $margin, $radius + $margin); pdf_save($pdf); pdf_setrgbcolor($pdf, 0.0, 0.0, 1.0); /* minute strokes */ pdf_setlinewidth($pdf, 2.0); for ($alpha = 0; $alpha < 360; $alpha += 6) { pdf_rotate($pdf, 6.0); pdf_moveto($pdf, $radius, 0.0); pdf_lineto($pdf, $radius-$margin/3, 0.0); pdf_stroke($pdf); } pdf_restore($pdf); pdf_save($pdf); /* 5 minute strokes */ pdf_setlinewidth($pdf, 3.0); for ($alpha = 0; $alpha < 360; $alpha += 30) { pdf_rotate($pdf, 30.0); pdf_moveto($pdf, $radius, 0.0); pdf_lineto($pdf, $radius-$margin, 0.0); pdf_stroke($pdf); } $ltime = getdate(); /* draw hour hand */ pdf_save($pdf); pdf_rotate($pdf,-(($ltime['minutes']/60.0)+$ltime['hours']-3.0)*30.0); pdf_moveto($pdf, -$radius/10, -$radius/20); pdf_lineto($pdf, $radius/2, 0.0); pdf_lineto($pdf, -$radius/10, $radius/20); pdf_closepath($pdf); pdf_fill($pdf); pdf_restore($pdf); /* draw minute hand */ pdf_save($pdf); pdf_rotate($pdf,-(($ltime['seconds']/60.0)+$ltime['minutes']-15.0)*6.0); pdf_moveto($pdf, -$radius/10, -$radius/20); pdf_lineto($pdf, $radius * 0.8, 0.0); pdf_lineto($pdf, -$radius/10, $radius/20); pdf_closepath($pdf); pdf_fill($pdf); pdf_restore($pdf); /* draw second hand */ pdf_setrgbcolor($pdf, 1.0, 0.0, 0.0); pdf_setlinewidth($pdf, 2); pdf_save($pdf); pdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0)); pdf_moveto($pdf, -$radius/5, 0.0); pdf_lineto($pdf, $radius, 0.0); pdf_stroke($pdf); pdf_restore($pdf); /* draw little circle at center */ pdf_circle($pdf, 0, 0, $radius/30); pdf_fill($pdf); pdf_restore($pdf); pdf_end_page($pdf); # to see some difference sleep(1); } pdf_close($pdf); $buf = pdf_get_buffer($pdf); $len = strlen($buf); header("Content-type: application/pdf"); header("Content-Length: $len"); header("Content-Disposition: inline; filename=foo.pdf"); echo $buf; pdf_delete($pdf); ?> ]]>
&reftitle.seealso; An alternative PHP module for PDF document creation based on FastIO's ClibPDF is available. Please see the ClibPDF section for details. Note that ClibPDF has a slightly different API than PDFlib.
&reference.pdf.functions;