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

CEO at Leeway
Mauro es Lic. en Ciencias de la Computación.
Su carrera como docente de programación se inició en el año 1997 en la Escuela Técnica ORT.
Actualmente coordina el desarrollo de proyectos web en Leeway y los cursos dictados en la Leeway Academy

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *