Unire più file PDF con PHP

Recentemente ho avuto la necessità di unire più file PDF usando PHP.
Facendo una ricerca su internet ho trovato la libreria PDFMerger su GitHub che svolge questo compito.
Essa si basa a sua volta sulle librerie TCPDF e TCPDI e supporta l’importazione dei PDF fino alla versione 1.6.

Non c’è nessun particolare vincolo riguardo l’origine dei file PDF quindi, ad esempio potete unire un file caricato dall’utente con uno creato in PHP.

Siccome avevo bisogno di ancora più funzionalità ho pensato di fare un fork del progetto e ho aggiunto le seguenti nuove features:

  • Supporto alle versioni di PHP dalla 5.3 alla 7.2
  • Supporto allo standard PSR-4
  • Supporto dei Namespaces
  • Possibilità di stampare l’header e/o il footer su tutte le pagine del file di output

Esempi di utilizzo

$loader = require __DIR__ . '/../vendor/autoload.php';

$pdf = new andreaventuri\PdfMerger\PdfMerger;

$pdf->addPDF('samplepdfs/one.pdf', '1, 3, 4');
$pdf->addPDF('samplepdfs/two.pdf', '1-2');
$pdf->addPDF('samplepdfs/three.pdf');


$pdf->merge('file', 'samplepdfs/TEST2.pdf'); // generate the file

$pdf->merge('download', 'samplepdfs/test.pdf'); // force download

// REPLACE 'file' WITH 'browser', 'download', 'string', or 'file' for output options

Il metodo addPDF riceve due parametri, il primo è obbligatorio ed è la path completa del file PDF, mentre il secondo è facoltativo ed è l’elenco delle pagine da copiare.

Header e footer

Ho modificato la libreria per poter applicare l’header ed il footer a tutte le pagine del PDF risultante, in questo modo:

/**
 * @see https://tcpdf.org/examples/example_003/
 */
class MyCustomPdf extends \TCPDI
{
	/**
	 * Page header
	 */
    public function Header()
	{
		// Position at 5 mm from top
		$this->SetY(5);

        // Set font
        $this->SetFont('helvetica', 'B', 20);

        // Title
        $this->Cell(0, 15, '<< Example header >>', 0, false, 'C', 0, '', 0, false, 'M', 'M');
    }

    /**
	 * Page footer
	 */
    public function Footer()
	{
        // Position at 15 mm from bottom
        $this->SetY(-15);

        // Set font
        $this->SetFont('helvetica', 'I', 8);

        // Page number
        $this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');
    }
}


$obj = new MyCustomPdf();

$pdf = new andreaventuri\PdfMerger\PdfMerger($obj);

$pdf->addPDF(__DIR__.'/pdf/one.pdf', '1,3,4')
	->addPDF(__DIR__.'/pdf/two.pdf', '1-2')
	->addPDF(__DIR__.'/pdf/three.pdf')
	->merge('file', __DIR__.'/output02.pdf');

Sfruttando la libreria TCPDF e attraverso la Dependency injection è possibile definire gli stile per l’intestazione ed il pié di pagina.

Installazione

E’ possibile installare il pacchetto attraverso Composer con il comando composer require andreaventuri/pdfmerger, oppure semplicemente effettuando il download da GitHub.


 


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.