Voor een projectschatting heb ik wat onderzoek gedaan naar het inladen van een pdf-sjabloon, het toevoegen van een aantal afbeeldingen en het opslaan ervan in een nieuwe pdf en preview afbeeldingen per pagina. De technologieën die ik heb gebruikt zijn FPDF, FPDI en Imagemagick met Ghostscript, allemaal samen in php op een lokale Windows XAMPP server omgeving. Hier is te lezen hoe het gegaan is:

1 - INSTALLATIE

XAMPP is al geïnstalleerd, dus daar is geen werk aan.
Installatie van Imagemagick

Omdat ik een x64 Windows 7 machine heb, kreeg ik eerst de Win64 dynamic op 16 bits per pixel - ImageMagick-6.7.4-6-Q16-windows-x64-dll.exe, die hier niet leek te werken. Blijkbaar is de officiële versie gecompileerd op een manier die niet compatibel is met mijn versie van XAMPP, maar de dll die hier is gedownload heeft het werkend gekregen. Geïnstalleerd in XAMPP's php/ext directory, extensie=php_imagick_ts.dll toegevoegd aan XAMPP's php/php.ini!!! 

Installatie van GhostScript Gewoon downloaden en installeren van de exe.

Installatie van FPDF & FPDI Gedownload en geïnstalleerd FPDF & FPDI naar de fpdf/ directory van de webapp's root.

 

2 - TEMPLATE PDF

Ik heb een voorbeeld-pdf gegenereerd om de beelden in te zetten met Photoshop, lelijk als de hel, maar het zou de truc moeten doen. Zorg ervoor dat je de pdf opslaat met een compressie-versie die Ghostscript aankan, om er zeker van te zijn dat ik de laagste Adobe PS5.1 heb gebruikt die me werd aangeboden: 1.4.

3 - CODE

Eerst de requires:

require_once('fpdf/fpdf.php'); require_once('fpdf/fpdi.php');

Vervolgens maken we een nieuw FPDI-object en laden we de template pdf.

$pagecount = $pdf->setSourceFile('template.pdf');

Vervolgens doorlopen we de pagina's en voegen we de afbeeldingen toe. Dit sjabloon pdf bevat slechts één pagina, en ik voeg slechts twee afbeeldingen toe, dus je moet waarschijnlijk een array of iets dergelijks instellen dat specifieke afbeeldingen aan specifieke pagina's en coördinaten toevoegt (deze zijn in dit voorbeeld hardcoded).

for ($i=1; $i <= $pagecount; $i++) { $tplidx = $pdf->ImportPage($i); $pdf->Image('picture_1.jpg',10,8,33); $pdf->Image('picture_2.jpg',10,8,33); $pdf->addPage(); $pdf->useTemplate($tplidx,0,0,0); }

Vervolgens wordt de output naar een nieuw pdf-bestand gestuurd.

$pdf->Output('new.pdf', 'F');

En daarna worden de preview-beelden gegenereerd met behulp van imagemagick.

$magick_dir = 'D:\xampp\ImageMagick-6.7.4-Q8' ; $send_cmd=$magick_dir .'\convert newpdf.pdf -resize x100 test.jpg' ; $result = shell_exec($send_cmd) ;

Dit is mijn volledige PHP-code:

setSourceFile('input/template.pdf'); for ($i=1; $i <= $pagecount; $i++) { $tplidx = $pdf->ImportPage($i); $pdf->addPage(); $pdf->useTemplate($tplidx,0,0,0); $pdf->Image('input/picture_1.jpg',62,40,-300); $pdf->Image('input/picture_2.jpg',62,180,-300); } $pdf->Output('new.pdf', 'F'); $magick_dir = 'D:\xampp\ImageMagick-6.7.4-Q8' ; $send_cmd=$magick_dir .'\convert output/new.pdf -resize x100 output/preview.jpg' ; $result = shell_exec($send_cmd) ;