Los documentos PDF son parte importante en el mundo digital. Gracias a ellos podemos tener acceso a la información en un formato unificado y entendible por la mayoría de sistemas operativos.
Hoy veremos cómo unir muchos documentos PDF con PHP. Es decir, podemos unir 2 o más PDF’s con PHP. Esta operación también se conoce como merge o como combinar múltiples PDF.

Aparte de ver cómo combinar o unir PDFs con PHP veremos 3 maneras de mostrar el documento final combinado: mostrar en el navegador, forzar su descarga o escribirlo en un nuevo archivo PDF.
Descargar código o ejemplo
El código fuente está en mi Github: Ejemplo de cómo combinar PDF’s con PHP y libmergepdf.
Si quieres descargar el ejemplo haz click aquí.
La librería para combinar PDF con PHP
El paquete o librería que usaremos para unir algunos documentos PDF con PHP será la llamada libmergepdf; la cual tiene un uso muy sencillo. Me parece que internamente utiliza FPDI pero eso es otra historia.
Puedes visitar el repositorio oficial aquí.
Requisitos y recomendaciones
Lo que tenemos que hacer primero es instalar Composer, el gestor de dependencias de PHP. Te animo a que lo instales y configures, pues ahora todo buen programador de PHP gestiona sus dependencias con composer.
Antes de que te quejes por composer, lee por qué usarlo.
Por cierto, recuerda instalar PHP.
Opcional: crear proyecto con composer
Si únicamente estás probando esto y no tienes un proyecto ya iniciado, entonces navega hasta el directorio en donde vas a crear tu proyecto (recomiendo una carpeta nueva) y ejecuta:
composer init
Rellena los datos que piden. En mi caso queda así:

Recuerda que esto es opcional.
Instalar libmergepdf
Nota: si ya tienes un proyecto iniciado, mira cómo adaptar tu proyecto a composer.
En tu proyecto en donde esté ubicado tu archivo composer.json (es decir, en tu proyecto) ejecuta lo siguiente para instalar la librería:
composer require iio/libmergepdf:^4.0
Después de eso espera a que se instale. Debe verse parecido a lo siguiente:

Ahora sí ya podemos comenzar.
Combinar o concatenar múltiples PDF’s con PHP
Debemos requerir el autoload de composer y luego de ello definir que usaremos el Merger, así:
Los PDF que voy a unir los pondré en un arreglo para efectos de simplicidad. Dichos documentos existen en la misma carpeta en donde está mi index.php.
La salida tiene los datos del documento ya creado. Podemos escribirla en un documento PDF nuevo, mandarla al navegador o mandarla y forzar la descarga del mismo.
Sigue leyendo para ver las 3 maneras de mostrarlo o enviarlo al usuario final.
Combinar PDF y mostrarlo en el navegador
Para ello solamente se necesitan enviar algunos encabezados HTTP al navegador para que el mismo entienda que debe intentar mostrar el PDF con su visor.
Después de enviar los encabezados imprimimos lo que devolvió el combinador. Es importante notar que después de eso no debemos hacer ningún echo
ni printf
, es decir, no imprimir nada, porque podría “contaminar” a la salida.

Recuerda que sí puedes hacer otras cosas pero no algo que imprima algo, también ten cuidado con los errores porque a veces los mismos pueden contaminar la salida.
Combinar PDF con PHP y forzar descarga
Con el método anterior, el usuario ve el documento PDF en el visor del navegador y opcionalmente puede descargarlo, ahora veamos cómo forzar a que se descargue.
Para ello agregamos unos encabezados extra e igualmente imprimimos la salida. Queda así:
De esa manera, cuando el usuario visite la página se descargará el archivo como en la captura:

Escribir PDF combinado en nuevo documento
Para terminar este tutorial veremos cómo escribir la salida en un nuevo documento, es decir, crear un nuevo PDF a partir de los demás.
En este caso usaremos file_put_contents
(pásate por este tutorial para aprender más) y queda así:
No es obligatorio que imprimas el mensaje, yo lo puse para informar. En mi caso se ve así:

Conclusiones
De esta manera, a partir de una lista de documentos, podemos crear uno nuevo. En los ejemplos utilicé un foreach pero tú puedes adaptarlo como quieras.
Hola, existe alguna forma de encriptar como en html2pdf ($html2pdf->pdf->SetProtection($permissions, $userPass, $ownerPass);), el resultado final? O sea que no se pueda copiar alguna selección del texto, o editar el archivo generado. Gracias!
Pingback: Generar y guardar imágenes de códigos de barras con PHP - Parzibyte's blog