Cómo generar archivos PDF con PHP

Inicio / Cómo hacer para... / Cómo generar archivos PDF con PHP

Una necesidad bastante común en el desarrollo de aplicaciones basadas en web (Especialmente las que se usan dentro de ambientes corporativos) es la de emitir reportes.

Una forma simple de resolver este problema es la generación de páginas html cuyo único objeto es ser impresas y dejar al usuario la decisión de guardarlas en lugar de imprimirlas.

Si bien esta solución puede ser suficiente cuando se trata de emitir un reporte a un usuario, ciertamente no es lo ideal cuando se trata de intercambiarlo con algún otro sistema.

Particularmente en este artículo voy a mostrarte algunas formas de generar archivos pdf usando PHP.

Librería PDF de PHP

Existe una extensión de PHP llamada PDF, la cual está basada en la librería PDFlib (Desafortunadamente, una librería propietaria).

Esta librería debe ser instalada como una extensión PECL y su uso no es particularmente cómodo.

Veamos un ejemplo:

<?php 

$pdf = pdf_new(); 
pdf_open_file($pdf); 
pdf_begin_page($pdf, 300, 300); 
pdf_save($pdf); 
pdf_translate($pdf, 100, 100); 
pdf_rotate($pdf, 45); 
pdf_rect($pdf, 0, 0, 20, 20); 
pdf_stroke($pdf);
pdf_end_page($pdf); 
pdf_close($pdf);

La librería provee un conjunto de funciones (no agrupadas en clases) y define un nuevo tipo de recurso (Similar a un archivo, sólo que específico para PDFs).

A pesar de su aspecto rústico, PDF es probablemente la librería más versátil en cuanto a manejo de archivos de este tipo (y, a su vez, la de más bajo nivel).

FPDF

FPDF es un paquete sencillo. Se trata de una clase y una serie de archivos de fuentes (fonts) que pueden usarse para generar archivos pdf.

Un ejemplo de su utilización es este:

<?php
require('fpdf.php');

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'¡Hola, Mundo!');
$pdf->Output();

El constructor de la clase recibe los parámetros para crear el marco de trabajo:

  • Orientación de la hoja (Portrait o Landscape)
  • Unidad de medida (mm para milímetros)
  • Tamaño de la página (A3, A4, A5)

El método Output es el que efectivamente produce el pdf. Si no se aclara nada, la salida se envía al navegador, aunque puede ser redirigida a un archivo local para ser enviado a otro servidor (entre otras posibilidades):

$pdf->Output('F', 'salida.pdf');

El método Cell tiene que ver con el modo en que FPDF genera la salida: las páginas están divididas en celdas rectangulares contiguas.

En todo momento existe un puntero a la posición actual dentro de la hoja y es esa posición la que se tomará como inicio de la celda sobre la que se quiera trabajar.

En este ejemplo se está creando una nueva celda de 40 mm de ancho por 10 de alto y en ella se está escribiendo el texto “¡Hola, Mundo!” (Usando la tipografía Arial de 16 puntos y en negrita).

Puedes consultar más información en FPDF

mPDF

mPDF es una librería algo más moderna. Su objetivo es presentarse como una opción de más alto nivel que FPDF.

La principal diferencia es que mPDF toma textos HTML y los convierte en PDF, haciendo la tarea mucho más sencilla para el desarrollador (Aunque puede resultar bastante menos eficiente).

Su instalación se realiza usando composer:

composer require mpdf/mpdf

Su uso puede ser tan sencillo como:

<?php

require_once __DIR__ . '/vendor/autoload.php';

$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('<h1>¡Hola, Mundo!</h1>');
$mpdf->Output();

También es posible realizar ciertas configuraciones (como en FPDF) para, por ejemplo, definir que la hoja estará apaizada:

$mpdf = new \Mpdf\Mpdf(['orientation' => 'L']);

Puedes consultar la información completa en el manual de uso de mPDF.

Conclusión

Las opciones son varias y, como de costumbre, dependerá del caso particular al que te enfrentes (y los recursos que tengas disponibles) cuál sea la más conveniente (¡Hasta podrías hacer tu propia implementación!).

Lo importante es que conozcas estas posibilidades para no tener que re-inventar la rueda :).

 

 

mchojrin

Director Académico y Docente at Leeway Academy
Hola! Soy Mauro Chojrin, estudié la Lic. en Ciencias de la Computación en la Universidad de Buenos Aires.

Me desempeño como docente de programación desde el año 1997.

Pasé por diferentes instituciones (Escuela Técnica ORT, Digital House, EducacionIT, ITMaster, Escuela DaVinci entre otros).

Actualmente coordino los cursos dictados en Leeway Academy y desarrollo sistemas usando PHP y framework Symfony

2 comentarios

  • Juan

    Excelente Nota Mauro. Casualmente hace poco, tuve la necesidad de generar pdfs desde php y termine inclinándome por mPDF. Bastante aceptable el resultado. No conocía la librería de PHP. Y como dice tu principal máxima “seguramente PHP tiene algo para hacerlo”.
    Abrazo y Feliz Año

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: