Ein Vorschaubild für ein PDF Dokument generieren

Tags:

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.

PDF mit Platzhaltern

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.

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

Kommentare