Crear Un PDF Con Php

of 28 /28
Crear un pdf con php Autor: jgarcia | Archivado en: PHP , Recursos el día 8/Feb/2005 Deprecated: Function eregi() is deprecated in /home/bitacora/public_html/wp-content/plugins/wp-codebox/main .php on line 171 Deprecated: Function eregi() is deprecated in /home/bitacora/public_html/wp-content/plugins/wp-codebox/main .php on line 171 0 tweets tweet De todos son conocidas las grandes ventajas que tienen los ficheros con formato pdf (Portable Document Format). Con la clase FPDF (Free Portable Document Format) podemos generar documentos PDF directamente desde PHP. Aparte de ser gratuita y libre tiene las siguientes ventajas: Elección de la unidad de medida, formato de página y márgenes Gestión de cabeceras y pies de página Salto de página automático Salto de línea y justificación del texto automáticos Admisión de imágenes (JPEG y PNG) Colores Enlaces Admisión de fuentes TrueType, Type1 y codificación Compresión de página Para poder hacer uso sólo debemos añadir básicamente el siguiente código: Comencemos con el clásico ejemplo: <?php

Embed Size (px)

Transcript of Crear Un PDF Con Php

Crear un pdf con phpAutor: jgarcia | Archivado en: PHP, Recursos el da 8/Feb/2005

Deprecated: Function eregi() is deprecated in /home/bitacora/public_html/wpcontent/plugins/wp-codebox/main.php on line 171 Deprecated: Function eregi() is deprecated in /home/bitacora/public_html/wpcontent/plugins/wp-codebox/main.php on line 171 0 tweets tweet

De todos son conocidas las grandes ventajas que tienen los ficheros con formato pdf (Portable Document Format). Con la clase FPDF (Free Portable Document Format) podemos generar documentos PDF directamente desde PHP. Aparte de ser gratuita y libre tiene las siguientes ventajas:

Eleccin de la unidad de medida, formato de pgina y mrgenes Gestin de cabeceras y pies de pgina Salto de pgina automtico Salto de lnea y justificacin del texto automticos Admisin de imgenes (JPEG y PNG) Colores Enlaces Admisin de fuentes TrueType, Type1 y codificacin Compresin de pgina

Para poder hacer uso slo debemos aadir bsicamente el siguiente cdigo:

Comencemos con el clsico ejemplo:

[Demo]

Despus de incluir el fichero de la clase, creamos el objeto FDPF. El constructor FPDF() se usa aqu con sus valores por defecto: las pginas son de tamao a4 alargado y la unidad de medida es el milmetro. Se podra haber declarado explcitamente con:$pdf = new FPDF('P','mm','A4'); Es posible usar el formato apaisado(L), otras unidades de medida (pt, cm, in).

otros formatos de pgina (como Carta y Legal) y

Por el momento no hemos creado ninguna pgina, as que aadiremos una con AddPage(). El origen de coordenadas est en la esquina superior izquierda y la posicin actual est por defecto situada a 1 cm de los bordes; los mrgenes pueden cambiarse con SetMargins(). Antes de que podamos imprimir texto, es obligatorio escoger una fuente con SetFont(), si no, el documento no ser vlido. Escogemos Arial en negrita de tamao 16:$pdf->SetFont('Arial','B',16);

Podramos haber especificado itlica con I, subrayado con U o normal con una cadena vaca (o cualquier combinacin de las anteriores). Observe que el tamao de la fuente se detemina en puntos, no en milmetros (ni en cualquier otra unidad establecida por el usuario); es la nica excepcin. Las otras fuentes incorporadas son Times, Courier, Symbol y ZapfDingbats. Ahora podemos imprimir una celda con Cell(). Una celda es una superficie rectangular, con borde si se quiere, que contiene texto. Se imprime en la posicin actual. Especificamos sus dimensiones, el texto (centrado o alineado), si queremos dibujar o no los bordes, y dnde se ubicar la posicin actual despus de imprimir la celda (a la derecha, debajo o al principio de la siguiente lnea). Para aadir el borde, deberemos hacer esto:$pdf->Cell(40,10,'Hola, Mundo!',1);

Para aadir una nueva celda a continuacin, con el texto centrado e ir a la siguiente lnea, escribiremos:$pdf->Cell(60,10,'Hecho con FPDF.',0,1,'C');

Nota: el salto de lnea puede provocarse tambin mediante Ln(). Este mtodo le permite especificar adems la altura del salto. Finalmente, el documento se cierra y se enva al navegador con Output(). Tambin podramos haberlo guardado en un fichero pasando como parmetro el nombre del archivo. Cuidado: en caso de que el PDF se enve al navegador, nada ms debe enviarse, ni antes ni despus (el ms mnimo espacio en blanco o retorno de carro tambin cuenta). Si se enva algn dato antes, obtendr el mensaje de error: "Some data has already been output, can't send PDF file". Si se enva despus, su navegador puede que muestre nicamente una pgina en blanco.

Cabecera, pie, salto de pgina e imagenAqu tenemos un ejemplo de dos pginas con cabacera, pie de pgina y logotipo:

[Demo] Este ejemplo hace uso de los mtodos Header() y Footer() para procesar las cabeceras y pies de pginas. Se llaman automticamente. Ya existen en la clase FPDF origuinal, pero no hacen nada. Por ello, tenemos que heredar la clase y sobreescribirlos. El logotipo se imprime con el mtodo Image() especificando su esquina superior izquierda y su anchura. La altura se calcula automticamente respetando las proporciones de la imagen. Para imprimir el nmero de pgina, se le pasa un valor nulo (null) como ancho de la celda.

Eso significa que la celda se extender hasta el margen derecho de la pgina; puede ser til centrar el texto. El nmero actual de la pgina se devuelve por el mtodos PageNo(); mientras que el nmero total de pginas se obtiene mediante un valor especial de {nb} que ser sustituido cuando se cierre el documento (suponiendo que usted antes utilizara AliasNbPages()). Observe el uso del mtodo SetY() que le permite especificar la posicin en una ubicacin absoluta respecto del origen de coordenadas de la pgina, empezando por el principio o por el final. Otra caracterstica interesante se usa en el ejemplo: el salto automtico de pgina. Tan pronto como una celda cruza el lmite mximo de la pgina (a 2 cm del final, por defecto), se ejecuta un salto y se recupera la fuente. Aunque la cabecera y el pie usan su propia fuente (Arial), el cuerpo del documento continua con Times. Este mecanismo automtico de recuperacin tambin se aplica a los colores y al ancho de lnea. El lmite que fuerza los saltos de pgina puede establecerse con SetAutoPageBreak().

Saltos de lnea y coloresContinuemos con un ejemplo que imprime prrafos justificados. Tambin ilustra el uso de colores.

[Demo]

El mtodo GetStringWidth() le permite determinar la longitud de una cadena en el tipo de letra actual, y se usa aqu para calcular la posicin y ancho del borde que rodea al ttulo. Despus se establecen los colores (mediante SetDrawColor(), SetFillColor() y SetTextColor()) y el borde de la lnea se establece en 1 mm (en contra de los 0,2 por defecto) con SetLineWidth(). Finalmente, imprimimos la celda (el ltimo parmetro a 1 indica que debe colorearse el fondo). El mtodo usado para imprimir los prrafos es MultiCell(). Cada vez que la lnea llega al extremo derecho de la celda o aparece un carcter de fin de lnea, se ejecuta un salto de lnea y se crea automticamente otra celda debajo de la actual. El texto se encuentra justificado por defecto. Se definen dos propiedades del documento: ttulo (SetTitle()) y autor (SetAuthor()). Las propiedades pueden verse de dos maneras. La primera es abrir el documento directamente con Adobe Reader, vaya al men Archivo y seleccione la opcin Propiedades del documento. La segunda, tambin disponible desde el plug-in, es hacer clic con el botn derecho y seleccione Propiedades del documento.

Columnas mltiplesEste ejemplo es una variante del anterior en el que se mostrar como disponer texto en varias columnas.

[Demo] El mtodo clave usado es AcceptPageBreak(). Permite aceptar o no el salto automtico de lnea. Evitndolo y alterando la posicin actual y el margen, se consigue la disposicin deseada en columnas. Por lo dems, poco cambia; se han aadido dos propiedades (atributos) a la clase para almacenar el nmero de columna y la posicin donde empiezan las columnas, y la llamada a MultiCell() incluye un ancho de 6 centmetros.

TablasEste tutorial se explicar como crear tablas fcilmente.

[Demo] Siendo una tabla un conjunto de celdas, lo natural es construirla de ellas. El primer ejemplo es el ms bsico posible: celdas con bordes simples, todas del mismo tamao y alineadas a la izquierda. El resultado es algo rudimentario, pero es muy rpido de conseguir. La segunda tabla tiene algunas mejoras: cada columna tiene su propio ancho, los ttulos estn centrados y el texto se alinea a la derecha. Ms an, las lneas horizontales se han eliminado. Esto se consigue mediante el parmetro border del mtodo Cell(), que especifica qu bordes de la celda deben imprimirse. En este caso, queremos que sean los de la izquierda (L) y los de la derecha (R). Seguimos teniendo el problema de la lnea horizontal de fin de tabla. Hay dos posibilidades: o comprobar si estamos en la ltima lnea en el bucle, en cuyo caso usaremos LRB para el parmtro border; o, como hemos hecho aqu, aadir la lnea una vez que el bucle ha terminado.

La tercera tabla es similar a la segunda, salvo por el uso de colores. Simplemente hemos especificado los colores de relleno, texto y lnea. El coloreado alternativo de las filas se consigue alternando celdas transparentes y coloreadas.

Enlaces y texto flotanteEste tutorial explica cmo incluir enlaces (internos y externos) y muestra una nueva manera de imprimir texto. Tambin incluye un intrprete rudimentario de HTML.