Aprende a fusionar (unir o combinar) varios archivos PDF en uno solo en Laravel.

Cómo combinar varios archivos PDF en Laravel

¿Quiere enviar todos los dibujos, informes e información sobre los diferentes departamentos a su jefe, pero todos son PDF diferentes que contienen información relacionada? Muchos usuarios simplemente fusionarían los archivos PDF y eso es todo. Combinar archivos en un PDF común es extremadamente útil y necesario hoy en día, por lo que si ofrece algún tipo de aplicación administrativa para alguna empresa, agregar dicha función a su sistema puede ser útil para que no necesiten instalar un programa externo o hacerlo en línea. utilizando un servicio de terceros.

En este artículo, le mostraremos cómo combinar varios archivos PDF en uno solo utilizando la biblioteca PDFMerger.

1. Instalar pdfmerger

PDFMerger se basa en las clases fpdf y fpdi (instaladas automáticamente como dependencias) de Setasign. Hay otras versiones de la biblioteca original , trasladadas a PHP5 ya que la biblioteca original estaba alojada en codeplex , sin embargo, no tienen un nivel mínimo de estabilidad (funcionan, pero no con composer). La bifurcación de la biblioteca que funciona con composer es la creada por @rguedes , en cuanto a Laravel, cualquier dependencia que quieras usar requiere un nivel mínimo de estabilidad (no dev-master). Para continuar con la instalación del paquete en su proyecto Laravel, abra una terminal, cambie al directorio de su proyecto e instale la biblioteca usando el compositor:

composer require rguedes/pdfmerger

Después de la instalación, podrá utilizar la clase PDFMerger y sus métodos. Para obtener más información sobre la bifurcación de esta biblioteca, visite el repositorio en Github aquí.

2. Usando la biblioteca

El uso de la biblioteca es muy simple y directo, crea una instancia de la fusión de PDF. Esta clase le permite fusionar muchos archivos como desee usando el método addPDF y finalmente generar el resultado combinado usando el método merge. Puede elegir qué páginas de los PDF se deben agregar al final, decidir cómo y dónde se generará también el PDF final.

Especificar qué páginas fusionar

La clase PDFMerger le permite fusionar muchos PDF como desee y necesite utilizando el addPDFmétodo, solo necesita proporcionar la ruta como primer argumento e indicar qué páginas del archivo deben fusionarse en el archivo final utilizando el segundo argumento que espera una cadena . Por ejemplo, puede combinar todas las páginas de un PDF:

$pdf = new PDFMerger();

// Agregue todas las páginas del PDF para fusionar
$pdf->addPDF("somePdfToMerge.pdf", 'all');

Especifique específicamente qué páginas desea proporcionando su número separado por una coma:

$pdf = new PDFMerger();

// Sume solo las páginas 1, 3 y 5
$pdf->addPDF("somePdfToMerge.pdf", '1, 3, 5');

O usando un rango, por ejemplo, de la página 5 a la 10:

$pdf = new PDFMerger();

// Agregue solo las páginas de 5 a 10
$pdf->addPDF("somePdfToMerge.pdf", '5-10');

Modelo de fusión

Usando el método de combinación, generará un PDF que contiene los archivos agregados (las páginas especificadas de cada PDF). Este archivo puede almacenarse o devolverse como respuesta según sus necesidades. El método para procesar las necesidades de PDF que se proporciona como primer argumento de la fusión método, los valores posibles para este argumento son: browserdownloadstringfile. Como segundo argumento, la ruta donde se guardará el PDF (si se usa archivo como método) o el nombre del PDF que se usará para devolverlo (con browser download):

Generar descarga directa

Si no necesita guardar el PDF en ningún lugar, solo generarlo y devolverlo como respuesta, puede forzar la descarga directa del PDF generado utilizando el identificador de descarga:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

// Requiere clase PDF de la biblioteca
use PDFMerger;

class DefaultController extends Controller
{
    /**
    * Ruta del índice
    *
    * @return Response
    */
    public function index()
    {
         // Ruta absoluta de los PDF para fusionar
         // En este ejemplo los tenemos dentro de la carpeta / public
         // del proyecto
        $pdfFile1Path = public_path() . '/file1.pdf';
        $pdfFile2Path = public_path() . '/file2.pdf';
        $pdfFile3Path = public_path() . '/file3.pdf';

        // Crea una instancia de PDFMerger
        $pdf = new PDFMerger();

        // Agregue 2 archivos PDF al PDF final
        $pdf->addPDF($pdfFile1Path, 'all');
        $pdf->addPDF($pdfFile3Path, '1, 2, 3');

        // Generar descarga de "mergedpdf.pdf"
        $pdf->merge('download', "mergedpdf.pdf");
    }
}

Guardar en un archivo

Puede almacenar el resultado combinado en un archivo en su servidor:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

// Requiere clase PDF de la biblioteca
use PDFMerger;

class DefaultController extends Controller
{
    /**
    * Ruta del índice
    *
    * @return Response
    */
    public function index()
    {
         // Ruta absoluta de los PDF para fusionar
         // En este ejemplo los tenemos dentro de la carpeta / public
         // del proyecto
        $pdfFile1Path = public_path() . '/file1.pdf';
        $pdfFile2Path = public_path() . '/file2.pdf';
        $pdfFile3Path = public_path() . '/file3.pdf';

        // Crea una instancia de PDFMerger
        $pdf = new PDFMerger();
        
        // Agregue 2 archivos PDF al PDF final
        $pdf->addPDF($pdfFile1Path, 'all');
        $pdf->addPDF($pdfFile2Path, 'all');

        // Fusionar los archivos en un archivo en algún directorio
        $pathForTheMergedPdf = public_path() . "/result.pdf";

        // Combinar archivos PDF en un archivo
        $pdf->merge('file', $pathForTheMergedPdf);

         // Haz algo más aquí, como retorno
         // una respuesta del controlador ...
    }
}

Recuperar contenido binario del resultado pdf

En caso de que necesite recuperar el contenido del archivo generado (datos binarios) sin guardarlo en ningún lugar, puede utilizar el método de salida de cadena para recuperar el contenido como una variable. En este caso, devolveremos el contenido binario como respuesta con los encabezados del PDF (para ver en el navegador). También puede utilizar el tipo de navegador si lo desea:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

// Requiere clase PDF de la biblioteca
use PDFMerger;

class DefaultController extends Controller
{
    /**
    * Ruta índice
    *
    * @return Response
    */
    public function index()
    {
         // Ruta absoluta de los PDF para fusionar
         // En este ejemplo los tenemos dentro de la carpeta / public
         // del proyecto
        $pdfFile1Path = public_path() . '/file1.pdf';
        $pdfFile2Path = public_path() . '/file2.pdf';
        $pdfFile3Path = public_path() . '/file3.pdf';

        // Crea una instancia de PDFMerger
        $pdf = new PDFMerger();
        
        // Agregue 2 archivos PDF al PDF final
        $pdf->addPDF($pdfFile1Path, 'all');
        $pdf->addPDF($pdfFile2Path, 'all');

        // Fusionar los archivos y recuperar su contenido binario PDF
        $binaryContent = $pdf->merge('string', "mergedpdf.pdf");

        // Devuelve contenido binario como respuesta
        return response($binaryContent)
            ->header('Content-type' , 'application/pdf')
        ;
    }
}

Que te diviertas ❤️!


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores