Ein Vorschaubild für ein PDF Dokument generieren
Für meine berufliche Tätigkeit habe ich letzte Woche eine Webanwendung programmiert, wo unsere Kunden Belegvorlagen als PDF hochladen und anschliessend Platzhalter definieren können. Bei einer Bestellung wird die Vorlage geladen, die Platzhalter werden mit den vom Besteller eingegebenen Daten ersetzt und so ein PDF-Beleg generiert. Damit unsere Kunden die Platzhalter positionieren können wird ein grosses Bild des hochgeladenen PDFs angezeigt.

Um aus den PDFs Bilder zu generieren habe ich nebst PHP folgende Software genutzt:
ImageMagick ist ein freies Softwarepaket zur Erstellung und Bearbeitung von Rastergrafiken. Es kann mehr als 100 der üblichen Bildformate lesen, verändern und schreiben. Außerdem lassen sich Bilder dynamisch generieren, weshalb es auch im Bereich der Webanwendungen verwendet wird.
aus Wikipedia | Download
und
Ghostscript ist ein freier Interpreter der Seitenbeschreibungssprachen PostScript und Portable Document Format (PDF). Es besteht aus einem Softwarepaket, das eine API mit Funktionen bereitstellt, um PostScript und PDF auf Druckern oder Bildschirmen darzustellen. Es bietet einen hohen Grad an Kompatibilität mit dem proprietären „Original“ von Adobe.
aus Wikipedia | Download
Die Installation ist selbsterklärend. Zu beachten gilt nur, dass man die zum Betriebssystem passenden Versionen erwischt.
ImageMagick bietet ein Programm namens convert an mit welchem sich so quasi alles in Bilder konvertieren lässt. Zur Handhabung von PDFs greift es dabei auf Ghostscript zurück. Alles was PHP nun tun muss ist dieses Programm mit den richtigen Parametern aufzurufen.
- Ich hatte etwas Schwierigkeiten die PATH-Umgebungsvariable richtig zu setzen. Per CLI hat sie funktioniert, über SAPI/Apache aber nicht. Schlussendlich entschloss ich mich die Variable direkt im PHP-Script, vor dem Aufruf von
convert, zu setzen. - Weiter machte mir Probleme, dass
convertseine Argumente scheinbar in einer bestimmten Reihenfolge erwartet. Ansonsten war das generierte Bild sehr pixelig.
Hier nun der Beispielcode:
define('BIN_IMAGEMAGICK', 'C:\\Program Files\\ImageMagick-6.6.8-Q1');
define('BIN_GHOSTSCRIPT', 'C:\\Program Files (x86)\\ghostscript\\gs9.01\\bin');
$pdfPath = '...';
$imgPath = '...';
$imgDimension = '600x'; // 600px breit, Höhe je nach Verhältnis
$cmd = sprintf(
'%s -density 300 -quality 100 -resize %s %s %s 2>&1',
'convert',
escapeshellarg($imgDimension),
escapeshellarg($pdfPath . '[0]'), // 0 = 1. Seite des PDFs
escapeshellarg($imgPath)
);
$pathBefore = getenv('PATH');
$paths = array(
BIN_IMAGEMAGICK,
BIN_GHOSTSCRIPT,
$pathBefore,
);
putenv('PATH=' . join(PATH_SEPARATOR, $paths));
exec($cmd);
putenv("PATH=$pathBefore");
Hoffe das hilft jemandem. :-)
Ähnliche Artikel
- Statische Methoden sind einfach nur Funktionen - also Vorsicht!
- Properties: Neue Get-/Set-Syntax für PHP?
- PHP zvals und Referenzen erklärt




