Forum und email

Funciones PDF

Introducción

Las funciones PDF en PHP pueden crear archivos PDF utilizando la biblioteca PDFlib creada por » Thomas Merz.

La documentación en esta sección solamente es una descripción de las funciones de la biblioteca PDFlib y no debería considerarse una referencia exhaustiva. Se ha de consultar la documentación incluida en el código fuente de la distribución de PDFlib para una completa y detallada explicación de cada función. Proporciona muy buena descripción de las capacidades de PDFlib y contiene actualizada la documentación de todas las funciones.

Todas las funciones de PDFlib y del módulo PHP tienen nombres iguales para las funciones y parámetros. Se necesitará entender algunos de los conceptos básicos de PDF y PostScript para un eficiente uso de esta extensión. Todas las longitudes y coordenadas se mesuran en puntos PostScript. Generalmente hay 72 puntos PostScript por pulgada, pero esto depende de la resolución de salida. Se puede consultar la documentación incluida en la distribución de PDFlib para una detallada explicación del sistema de coordenadas utilizado.

Hay que tener en cuenta que la mayoría de las funciones PDF requieren un primer parámetro pdfdoc . En los siguientes ejemplos hay más información.

Note: Si se está interesado en alternativas de generadores gratis de PDF que no utilizen liberías externas PDF, mirar este FAQ relacionado.

Requisitos

PDFlib está disponible para descargar en » https://www.pdflib.com/products/pdflib-family/, pero requiere la compra de una licencia para uso comercial. Se requieren las bibliotecas » JPEG y » TIFF para compilar esta extensión.

Compatibilidad con versiones antiguas de PDFlib

Cualquier versión de PHP después del 9 de Marzo del 2000 no soporta versiones de PDFlib anteriores a la 3.0.

PDFlib 3.0 o superior es compatible desde PHP 3.0.19 en adelante.

Instalación

Esta extension » PECL no esta ligada a PHP. Mas informacion sobre nuevos lanzamientos, descargas ficheros de fuentes, informacion sobre los responsables asi como un 'CHANGELOG', se puede encontrar aqui: » https://pecl.php.net/package/pdflib.

To get these functions to work in PHP < 4.3.9, you have to compile PHP with --with-pdflib[=DIR]. DIR is the PDFlib base install directory, defaults to /usr/local.

Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración en php.ini.

Confusiones con antiguas versiones de PDFlib

Desde PHP 4.0.5, la extensión PHP para PDFlib es oficialmente soportada por PDFlib GmbH. Esto significa que todas las funciones descritas en el manual de PDFlib (V3.00 o superior) son soportadas por PHP 4 con el mismo funcionamiento y parámetros. Sólo los valores devueltos pueden variar en el manual PDFlib, ya que PHP adoptó la convención de devolver FALSE. Por razones de compatibilidad, PDFlib aún soporta las antiguas funciones, pero deberían reemplazarlas en sus nuevas versiones. PDFlib GmbH no dará soporte a cualquier problema causado por el uso de estas funciones obsoletas.

Funciones obsoletas y sus reemplazos.
Antigua función Reemplazo
pdf_put_image() Ya no se necesita.
pdf_execute_image() Ya no se necesita.
pdf_get_annotation() pdf_get_bookmark() utilizando los mismos parámetros.
pdf_get_font() pdf_get_value() pasando "font" como segundo parámetro.
pdf_get_fontsize() pdf_get_value() pasando "fontsize" como segundo parámetro.
pdf_get_fontname() pdf_get_parameter() pasando "fontname" como segundo parámetro.
pdf_set_info_creator() pdf_set_info() pasando "Creator" como segundo parámetro.
pdf_set_info_title() pdf_set_info() pasando "Title" como segundo parámetro.
pdf_set_info_subject() pdf_set_info() pasando "Subject" como segundo parámetro.
pdf_set_info_author() pdf_set_info() pasando "Author" como segundo parámetro.
pdf_set_info_keywords() pdf_set_info() pasando "Keywords" como segundo parámetro.
pdf_set_leading() pdf_set_value() pasando "leading" como segundo parámetro.
pdf_set_text_rendering() pdf_set_value() pasando "textrendering" como segundo parámetro.
pdf_set_text_rise() pdf_set_value() pasando "textrise" como segundo parámetro.
pdf_set_horiz_scaling() pdf_set_value() pasando "horizscaling" como segundo parámetro.
pdf_set_text_matrix() Ya no se necesita.
pdf_set_char_spacing() pdf_set_value() pasando "charspacing" como segundo parámetro.
pdf_set_word_spacing() pdf_set_value() pasando "wordspacing" como segundo parámetro.
pdf_set_transition() pdf_set_parameter() pasando "transition" como segundo parámetro.
pdf_open() pdf_new() más la subsecuente llamada de pdf_open_file()
pdf_set_font() pdf_findfont() más la subsecuente llamada de pdf_setfont()
pdf_set_duration() pdf_set_value() pasando "duration" como segundo parámetro.
pdf_open_gif() pdf_open_image_file() pasando "gif" como segundo parámetro.
pdf_open_jpeg() pdf_open_image_file() pasando "jpeg" como segundo parámetro.
pdf_open_tiff() pdf_open_image_file() pasando "tiff" como segundo parámetro.
pdf_open_png() pdf_open_image_file() pasando "png" como segundo parámetro.
pdf_get_image_width() pdf_get_value() pasando "imagewidth" como segundo parámetro y la imágen como tercer parámetro.
pdf_get_image_height() pdf_get_value() pasando "imageheight" como segundo parámetro y la imágen como tercer parámetro.

Ejemplos

La mayoría de las funciones son bastante fáciles de utilizar. La parte más difícil probablemente es la creación de un primer documento PDF. El siguiente ejemplo debería ayudar para comenzar. El ejemplo crea el archivo test.pdf en una página. La página contiene el texto "Times Roman outlined" en un contorno, con fuente de 30pt. El texto también está subrayado.

Example#1 Creando un documento PDF con PDFlib

<?php
$pdf 
pdf_new();
pdf_open_file($pdf"test.pdf");
pdf_set_info($pdf"Author""Javier Tacon");
pdf_set_info($pdf"Title""Test for PHP wrapper of PDFlib 2.0");
pdf_set_info($pdf"Creator""See Author");
pdf_set_info($pdf"Subject""Testing");
pdf_begin_page($pdf595842);
pdf_add_outline($pdf"Page 1");
$font pdf_findfont($pdf"Times New Roman""winansi"1);
pdf_setfont($pdf$font10);
pdf_set_value($pdf"textrendering"1);
pdf_show_xy($pdf"Times Roman outlined"50750);
pdf_moveto($pdf50740);
pdf_lineto($pdf330740);
pdf_stroke($pdf);
pdf_end_page($pdf);
pdf_close($pdf);
pdf_delete($pdf);
echo 
"<A HREF=getpdf.php>finished</A>";
?>
El script getpdf.php simplemente devuelve el documento pdf.

Example#2 Mostrando un documento PDF precalculado

<?php
$len 
filesize($filename);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=foo.pdf");
readfile($filename);
?>

La distrubución PDFlib contiene un ejemplo más complejo para crear un reloj analógico en una página. Aquí se utiliza el método de creación en memoria de PDFlib para no tener que crear un archivo temporal. El ejemplo se ha convertido a PHP desde uno de PDFlib (El mismo ejemplo está disponible en la documentación ClibPDF.)

Example#3 Ejemplo pdfclock de la distribución PDFlib

<?php
$radius 
200;
$margin 20;
$pagecount 10;

$pdf pdf_new();

if (!
pdf_open_file($pdf"")) {
    echo 
error;
    exit;
};

pdf_set_parameter($pdf"warning""true");

pdf_set_info($pdf"Creator""pdf_clock.php");
pdf_set_info($pdf"Author""Uwe Steinmann");
pdf_set_info($pdf"Title""Analog Clock");

while (
$pagecount-- > 0) {
    
pdf_begin_page($pdf* ($radius $margin), * ($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($pdf0.00.01.0);

    
/* minute strokes */
    
pdf_setlinewidth($pdf2.0);
    for (
$alpha 0$alpha 360$alpha += 6) {
        
pdf_rotate($pdf6.0);
        
pdf_moveto($pdf$radius0.0);
        
pdf_lineto($pdf$radius-$margin/30.0);
        
pdf_stroke($pdf);
    }

    
pdf_restore($pdf);
    
pdf_save($pdf);

    
/* 5 minute strokes */
    
pdf_setlinewidth($pdf3.0);
    for (
$alpha 0$alpha 360$alpha += 30) { 
        
pdf_rotate($pdf30.0);
        
pdf_moveto($pdf$radius0.0);
        
pdf_lineto($pdf$radius-$margin0.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/20.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.80.0);
    
pdf_lineto($pdf, -$radius/10$radius/20);
    
pdf_closepath($pdf);
    
pdf_fill($pdf);
    
pdf_restore($pdf);

    
/* draw second hand */
    
pdf_setrgbcolor($pdf1.00.00.0);
    
pdf_setlinewidth($pdf2);
    
pdf_save($pdf);
    
pdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
    
pdf_moveto($pdf, -$radius/50.0);
    
pdf_lineto($pdf$radius0.0);
    
pdf_stroke($pdf);
    
pdf_restore($pdf);

    
/* draw little circle at center */
    
pdf_circle($pdf00$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);
?>

Ver también

Note: Una alternativa de módulo PHP para la creación de documentos PDF basados en » FastIO's ClibPDF está disponible. Mirar la sección ClibPDF para más detalles. Tener en cuenta que ClibPDF tiene alguna diferencia con PDFlib.

Table of Contents