Generar archivos PDF con PHP

14/03/2020 | PHP | 8 comentarios

Aprende a crear archivos PDF de manera sencilla utilizando la clase FPDF en PHP.

Descargar archivos Ver ejemplo


Los archivos PDF se utilizan ampliamente en documentos y reportes que necesitan mantener el diseño y contenido (imágenes, tipos de letra, colores, etc), por ello vamos a aprender a crear archivos PDF utilizando PHP.

FPDF

FPDF es una clase PHP que permite la generación de archivos PDF de forma sencilla y sin necesidad de instalar librerías adicionales, cuenta con métodos bien documentados que facilitan su uso.

Antes de comenzar lo primero es descargar FPDF e incluir los archivos necesarios en nuestro proyecto.

Generar PDF básico

Como ejemplo básico crearemos un documento PDF en donde sólo imprimiremos un texto:


<?php
// include class
require('fpdf/fpdf.php');

// create document
$pdf = new FPDF();
$pdf->AddPage();

// add text
$pdf->SetFont('Arial', '', 12);
$pdf->Cell(0, 10, 'Generar archivos PDF con PHP', 0, 1);

// output file
$pdf->Output('', 'basic.pdf');

Podemos hacer un resumen de los principales métodos utilizados:

  • AddPage: crea una nueva página en el documento PDF.
  • SetFont: define una fuente (fuente, estilo y tamaño) a utilizar.
  • Cell: permite imprimir un texto.
  • Output: genera el archivo y le asigna un nombre.

Como se observa se pueden generar archivos PDF con pocas líneas de código, solo es necesario revisar la documentación para utilizar correctamente cada método.

Generar PDF completo

Ahora que ya conocemos lo básico de FPDF, vamos a generar un documento con varios párrafos, una imágen e incluso agregarle metadata el archivos.


<?php
// include class
require('fpdf/fpdf.php');

// create document
$pdf = new FPDF();
$pdf->AddPage();

// config document
$pdf->SetTitle('Generar archivos PDF con PHP');
$pdf->SetAuthor('Kodetop');
$pdf->SetCreator('FPDF Maker');

// add title
$pdf->SetFont('Arial', 'B', 24);
$pdf->Cell(0, 10, 'Generar archivos PDF con PHP', 0, 1);
$pdf->Ln();

// add text
$pdf->SetFont('Arial', '', 12);
$pdf->MultiCell(0, 7, utf8_decode('Los archivos PDF se utilizan ampliamente en docum...'), 0, 1);
$pdf->Ln();
$pdf->MultiCell(0, 7, utf8_decode('FPDF es una clase PHP que permite la generación de...'), 0, 1);
$pdf->Ln();
$pdf->MultiCell(0, 7, utf8_decode('Antes de comenzar lo primero es descargar FPDF e...'), 0, 1);
$pdf->Ln();

// add image
$pdf->Image('assets/fpdf-code.png', null, null, 180);

// output file
$pdf->Output('', 'fpdf-complete.pdf');

En este ejemplo podemos ver nuevos métodos utilizados:

  • SetTitle: define el título del archivo en la metadata.
  • SetAuthor: define el autor del archivo en la metadata.
  • SetCreator: define el creador del archivo en la metadata.
  • MultiCell: permite imprimir un texto grande con varias líneas.
  • Ln: agrega un salto de línea.
  • Image: permite incluir una imagen dentro del archivo PDF.

Nótese que también estamos utilizando el método de PHP utf8_decode para imprimir correctamente los caracteres con tílde.

Generar PDF avanzado

Entre las ventajas de utilizar FPDF es que se puede extender de manera sencilla e incluir métodos propios que se adapten a nuestras necesidades.


<?php
// include class
require('fpdf/fpdf.php');

// extend class
class KodePDF extends FPDF {
    protected $fontName = 'Arial';

    function renderTitle($text) {
        $this->SetTextColor(0, 0, 0);
        $this->SetFont($this->fontName, 'B', 24);
        $this->Cell(0, 10, utf8_decode($text), 0, 1);
        $this->Ln();
    }

    function renderSubTitle($text) {
        $this->SetTextColor(0, 0, 0);
        $this->SetFont($this->fontName, 'B', 16);
        $this->Cell(0, 10, utf8_decode($text), 0, 1);
        $this->Ln();
    }

    function renderText($text) {
        $this->SetTextColor(51, 51, 51);
        $this->SetFont($this->fontName, '', 12);
        $this->MultiCell(0, 7, utf8_decode($text), 0, 1);
        $this->Ln();
    }
}

// create document
$pdf = new KodePDF();
$pdf->AddPage();

// config document
$pdf->SetTitle('Generar archivos PDF con PHP');
$pdf->SetAuthor('Kodetop');
$pdf->SetCreator('FPDF Maker');

// add content
$pdf->renderTitle('Generar archivos PDF con PHP');
$pdf->renderText('Los archivos PDF se utilizan ampliamente en documentos y reportes por que se...');
$pdf->renderSubTitle('FPDF');
$pdf->renderText('FPDF es una clase PHP que permite la generación de archivos PDF de forma...');
$pdf->renderText('Antes de comenzar lo primero es descargar FPDF e incluir los archivos...');
$pdf->renderSubTitle('Ejemplo básico');
$pdf->renderText('Como ejemplo básico crearemos un documento PDF en donde sólo imprimiremos...');
$pdf->Image('assets/fpdf-code.png', null, null, 180);

// output file
$pdf->Output('', 'fpdf-advanced.pdf');

En nuestro ejemplo hemos creado una nueva clase llamada KodePDF que extiende la clase FPDF donde hemos agregado tres métodos para imprimir título, subtítulo y texto.

La principal ventaja de extender FPDF es que luego la generación del PDF es mucho mas sencillo y con menos líneas de código.

Referencias

Comentarios

Luis Macbeth 25/04/2021 2:46 pm

Como puedo generar varios pdf?

Php E Kitap – Generar archivos PDF con PHP Kodetop 22/06/2021 2:37 pm

[…] Generar archivos PDF con PHP Kodetop […]

Lorenzo 03/10/2021 9:07 am

Hola, muchas gracias por la documentacion y los ejemplos. Tengo una situacion que no logro explicarme. en algunos ejemplos, funciona perfectamente pero en otros (los mas avanzados) la pagina da como error 500. sin ningun tipo de error en php ni salidas en catch. Que puede ser?

kodetop 14/10/2021 5:41 pm

Hola Lorenzo, esto puede suceder por falta de memoria o tiempo de ejecución, pasa que PHP tiene definido hasta cuánto de memoria puede usar o un tiempo máximo de ejecución.

Puedes editar tu archivo .htaccess y colocar:

php_value memory_limit 256M
php_value max_execution_time 200
Federico 19/01/2022 9:34 am

Excelente explicación. Muchas gracias por compartir los ejemplos para descargar.
Ideal para complementar la documentación de la propia clase.
Saludos!

roberto 16/05/2022 8:59 am

HOLA EXCELENTE APORTE. PODRIAS AYUDARME CON LO SIGUIENTE:
1.- TENGO UNA RASPBERRY PI4, TENGO UN SISTEMA EN PHP CON UNA IMPRESORA TERMICA. LA IMPRESORA YA ESTA INSTALADA.
2.- EL TEMA ES QUE CUANDO GENERO EL PDF, NO ME SALE LA VISTA PREVIA DEL ARCHIVO Y NO ME SALE EL BOTON DE IMPRIMIR Y PARA SELECCIONAR IMPRESORAS.

PODRIAS APOYARME PORFAVOR, DE ANTEMANO MUCHAS GRACIAS

jacobo 23/05/2022 8:40 pm

hola, esta función también sirve para comprimir el archivo pdf creado?
no comentaste nada del tema.

gracias, si podrías comentarme la manera de crear el pdf comprimido para enviarlo y descargarlo por la web.

saludos,

jacobo

ojaidro 21/03/2023 4:07 pm

Buenas tardes, a ver si pueden ayudarme, estoy generando un reporte en pdf desde php, la primera pagina se genera perfecta, alli se registran unas 30 operaciones, pero el resto cuando salta a la segunda pagina empieza a mandar una columna por pagina, osea, el reporte pasa los siguientes datos:
nombre, apellido, id, operation,
a partir de la segunda pagina, manda nombre en una pagina, apellido, en otra, id en otra y operation en otra y así sucesivamente.

Envíar Comentario

En este sitio los comentarios se publican previa aprobación del equipo de Kodetop. Evita los comentarios ofensivos, obscenos o publicitarios. Si deseas publicar código fuente puedes hacerlo entre las etiquedas <pre></pre>