Lors de développement d’applications on peut être amené à assembler différents documents pdf, ajouter des conditions générales de ventes à une facture, une annexe à des documents techniques …
Je vous propose deux solutions pour assembler des documents pdf.
La première utilise l’interpréteur PostScript libre Ghostscript.
La deuxième utilise la classe php FPDI qui permet d’intégrer importer des documents pdf conjointement avec la classe FPDF.
1 – Utilisation de Ghostscript
On lance une commande système gs avec la la fonction php exec qui va assembler les fichiers
gs : la commande Ghostscript , gs -h pour avoir une aide sur la commande
-dBatch : Provoque la fermeture de Ghostscript après le traitement de tous les fichiers nommés dans la commande.
-dNOPAUSE : Désactive l’invite et la pause à la fin de chaque page
-sDEVICE=pdfwrite : Défini le format de sortie au format pdf , -sDEVICE=jpeg pour créer une image au format jpeg …
-sOutputFile=fichierAssemble.pdf : le nom du fichier créé
delta1.pdf delta2.pdf … les fichiers à assembler
exec('gs -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=fichierAssemble.pdf -dBATCH delta1.pdf delta2.pdf');
2 – Utilisation de la classe FPDI
FPDI est une classe utilisée conjointement avec la célèbre classe fpdf qui permet de créer des fichiers pdf.
Télécharger FPDI et FPDF_TPL en suivant ce lien
Télécharger FPDF en suivant ce lien
Voici une petit exemple, le programme assemble deux fichiers pdf, et ajoute une nouvelle page d’annexe dynamiquement.
// tester sous php5
require_once('fpdf/fpdf.php');
require_once('fpdi/fpdi.php');
$pdf = new FPDI();
ajouteFichier($pdf,"pdf/delta1.pdf");
ajouteFichier($pdf,"pdf/delta2.pdf");
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->SetTextColor(50,50,50);
$pdf->Cell(0,10,'Nouvelle Page Annexe',1,1,'C');
$pdf->Output('nouveau_fichier.pdf','F');
function ajouteFichier($pdf,$file)
{
$nbPage = $pdf->setSourceFile($file);
for ($i = 1; $i <= $nbPage; $i++) {
$tplidx = $pdf->ImportPage($i);
$size = $pdf->getTemplatesize($tplidx);
$pdf->AddPage('P', array($size['w'], $size['h']));
$pdf->useTemplate($tplidx);
}
}
Pour aller plus loin :
