Ver índice
Crear ficheros PDF

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Creación de ficheros PDF

Exiten varias opciones para la creación mediante funciones PHP de ficheros en formato PDF. El abanico de posibilidades se extiende desde las aplicaciones de pago tales como PDFlib hasta las clases open source tales como FPDF o TCPDF, que amplia las prestaciones de la anterior y que será la que utilizaremos para desarrollar los contenidos de este tema.

La clase TCPDF

La clase TCPDF está en constante evolución. Por ello se van produciendo, con mucha frecuencia, continuas actualizaciones, correcciones de errores y mejoras. Las versiones más recientes pueden encontrarse en este enlace. Hemos descargado desde http://www.tcpdf.org el fichero tcpdf_5_9_088.zip (la última versión disponible en el momento de elaborar estos materiales) y lo hemos descomprimido en nuestro directorio php. Durante la descompresión se creó de forma automática un directorio llamado tcpdf en el que se incluyeron una serie de subdirectorios tales como: config, examples y fonts y una serie de ficheros entre los que podremos encontrar el denominado tcpdf.php que es el que realmente contiene la clase.

La creación de ficheros PDF mediante la clase TCPDF requiere que en los scripts se incluyan los ficheros: tcpdf.php, tcpdf_config.php y spa.php que corresponden a la clase propiamente dicha, a su configuración y al idioma en uso. Tales ficheros se encuentran en los directorios: tcpdf y en sus subdirectorios tcpdf/config y tcpdf/config/lang. Para mayor comodidad en el manejo hemos creado un fichero llamado tcpdf.inc.php que sirve para realizar la inclusión de los tres anteriores. Puedes ver aquí su contenido.

Si los ficheros estuvieran en directorios distintos de los indicados habrían de adecuarse las rutas absolutas incluidas en el fichero tcpdf.inc.php.

El constructor de la clase TCPDF

La clase incluida en el fichero tcpdf.php tiene por nombre TCPDF. Por tanto su uso requerirá –además del necesario include('tcpdf.inc.php')– la creación de un objeto mediante la sintaxis:

$objeto= new TCPDF();

Al instanciar un nuevo objeto se ejecuta siempre el constructor (recuerda que un constructor es una método con nombre __construct que se ejecuta de forma automática el momento en que es creado un nuevo objeto) que en esta clase permite seis argumentos: orientacion, unidad de medida, formato, unicode, codificación y diskcaché.

Por tanto, al instanciar la clase para crear el nuevo objeto podríamos escribir:

$objeto= new TCPDF( orientacion, unidad_de_medida, formato, unicode, codificacion, disckcache );

dónde:

Una vez creado el objeto es necesario añadirle una o más páginas. Para ello se utiliza el método AddPage. Su sintaxis más simple es la siguiente:

$objeto->AddPage()

Formatos a medida

La clase TCPDF también permite especificar formatos a medida. Para ello hemos definir las dimensiones deseadas mediante la sintaxis:

$medidas=array(ancho,alto)

dónde ancho y alto son las dimensiones deseadas (especificadas en la unidad establecida para el documento) e incluir este array ($medidas) como valor del parámetro formato en la llamada al constructor de la clase.

El método Output()

La clase TCPDF incluye la función Output que permite visualizar o guardar el objeto creado. Mediante la sintaxis:

$obj->Output(nombre,destino)

puede asignarse cualquier nombre, con o sin extensión, al objeto generado. Cuando no se especifica el nombre, se le asigna por defecto el valor doc.pdf. El parámetro destino puede tener uno o varios de los siguientes valores:

El método SetDisplayMode()

Este método –sólo afecta a la forma en la se visualiza el documento en la pantalla del cliente– permite configurar dos parámetros: tamaño y forma de visualización.

$obj->SetDisplayMode( tamaño,visualizacion)

El tamaño (no se refiere al documento impreso sino a la visualización en pantalla) permite una de estas opciones: fullpage (el zoom del visor se adapta de modo que encaje la página completa en la pantalla); fullwidth (ajusta el zoom de forma que se visualize el documento ajustando el ancho al de la pantalla); real (ajusta el zoom del visor al 100%) ó default que usa el modo por defecto del visor.

La forma de visualización permite, entre otras, las opciones: single muestras las páginas separadas de una en una; continuous va mostrándolas una detrás de otra de forma continua; two muestras dos columnas (con dos páginas) simultaneamente, y default que, como en el caso anterior, usa el modo por defecto del visor.

Algunsos ejemplos

Como primer ejemplo crearemos un fichero con dos páginas en blanco.

<?php
# incluimos todos los ficheros requeridos
# tal como lo hemos recogido en el fichero tcpdf.inc.php
# creado tal como se indica al margen
include("tcpdf.inc.php");
# creamos  un nuevo objeto (MiPDF) utilizando la clase FPDF
$MiPDF=new TCPDF();
# creamos una página en blanco
$MiPDF->Addpage();
# creamos una segunda página en blanco
$MiPDF->Addpage();
# visualizamos el documento
$MiPDF->Output();
?>
ejemplo323.php

Si observas con detalle el pdf del ejemplo anterior observarás que en la parte superior de las páginas aparece una extraña línea horizontal. Se debe a que, por defecto, esta clase incluye en cada documento un encabezado y un pie de página. La forma de evitarlo será desactivar esa opción incluyendo en el script llamadas a los métodos setPrintHeader(false) y setPrintFooter(false) con el valor booleano false tal como puedes ver en este otro ejemplo.

ejemplo324.php Ver código fuente

En este ejemplo establecemos dimensiones, unidades de medida y orientación del documento. Comprobaremos que podemos cambiar la orientación (de normal a apaisada o viceversa) de cada una las páginas del documento.

<?php
# incluimos todos los ficheros requeridos
# tal como lo hemos recogido en el fichero tcpdf.inc.php
# creado tal como se indica al margen
include("tcpdf.inc.php");
/* vamos a configurar el documento como apaisado (P), utilizando
 las pulgadas como unidad de medida y unas dimensiones "no estandar"
 de 10 x 20 pulgadas */
# creamos un array con las dimensiones (ancho y alto);
$dimensiones=array (10,20);
# creamos  un nuevo objeto (MiPDF) utilizando la clase FPDF
# incluyendo en este caso los valores a utilizar por el constructor
$MiPDF=new TCPDF('P','in',$dimensiones);
# creamos una página en blanco con las indicaciones del constructor
$MiPDF->Addpage();
#Incluimos una segunda página cambiando la orientación
# un cambio de orientación respecto a la inicial
$MiPDF->Addpage('L');
# creamos una segunda página en blanco
# en la que, al no incluir el parámetro de orientación
# utilizará el valor utilizado en la anterior
$MiPDF->Addpage();
# visualizamos el documento
$MiPDF->Output();
?>
ejemplo325.php

Otros métodos de la clase TCPDF

Aunque no tienen excesiva utilidad práctica, vamos a comentar someramente aquí -también los incluimos en el ejemplo- algunos de los métodos, de carácter básicamente informativo, que incluye la clase FPDF.

Los datos incluidos en el documento mediante los métodos anteriores no son presentados diractamente en el documento. Sólo son visualizables cuando se exploran los metadatos del documento.

<?php
# incluimos la clase fpdf que está en este mismo directorio
include("tcpdf.inc.php");
/* vamos a configurar el documento como apaisado (P), utilizando
 los milímetros como unidad de medida y unas dimensiones "no estandar"
 de 140 x 200 milimetros */
# creamos un array con las dimensiones (ancho y alto);
$dimensiones=array (140,200);
# creamos  un nuevo objeto (MiPDF) utilizando la clase TCPDF
# incluyendo en este caso los valores a utilizar por el constructor
$MiPDF=new TCPDF('P','mm',$dimensiones);
#desactivamos encabezado y pie de página
$MiPDF->setPrintHeader(false);
$MiPDF->setPrintFooter(false);
# el método SetAuthor nos permite incluir el nombre del autor
$MiPDF->SetAuthor('Pepe Pérez');
# el método SetCreator nos permite incluir el nombre de la
# aplicacion que genera el pdf
$MiPDF->SetCreator('clase TCPDF');
# el método SetTitle nos permite incluir un título
$MiPDF->SetTitle('Pruebas del pdf');
# el método SetKeywords nos permite incluir palabras claves
# separadas por espacios y dentro de una misma cadena
$MiPDF->SetKeywords('palabra1 palabra2');
# el método SetDisplayMode nos permite incluir palabras claves
# separadas por espacios y dentro de una misma cadena
$MiPDF->SetDisplayMode('fullpage','two');
# creamos una página en blanco. Incluimos, para esta primera página
# un cambio de orientación respecto a la inicial
$MiPDF->Addpage('L');
# creamos una segunda página en blanco
# en la que, al no incluir el parámetro de orientación
# utilizará el valor usado en el último Addpage que ha sido L.
$MiPDF->Addpage();
/* insertamos unas nuevas dimensiones */
$dimension2=array(97,234);
/* las dimensiones anteriores pero invirtiendo el orden */
$dimension3=array(234,97);
/* insertamos páginas con la misma orientación pero utilizando
   cada uno de los dos arrays  anteriores. Veremos que las páginas
   que se visualizan tienen igual tamaño y orientación. Es decir,
   no importa el orden en que incluyamos las dimensiones ya que será la
   orientación establecida la situe esas medidas */
   $MiPDF->Addpage('L',$dimension2);
   $MiPDF->Addpage('L',$dimension3);
# visualizamos el documento
$MiPDF->Output('donpepito.pdf','I');
?>

Los ejemplos siguientes son similares. La única modificación que contienen respecto al código fuente anterior es la correspondiente al segundo parámetro (destino) del método Output.

Destino="I" Destino="D" Destino="F"