PDF Dokumente TCPDF-kompatibel speichern/konvertieren

Tags:

Ihr kennt ja alle TrekkSoft, oder? Die tolle Buchungslösung für Tour Operators, für deren gleichnamige Firma ich seit ein paar Jahren arbeite. Jedenfalls bieten wir dort ein tolles Feature an, dass dem Kunden erlaubt, PDF Tickets zu individualisieren.

Vor einem Jahr hab ich schon mal darüber gebloggt, wie man Screenshot von PDF Dokumenten erstellt. Für das Handling der PDFs benutzen wir eine Kombination von TCPDF, FPDI, FPDF_TPL und einer eigenen Template Engine für die Platzhalter.

In letzter Zeit hatten wir ab und zu mal das Problem, dass Kunden modernere PDF Dokumente hochluden. Das Problem ist, das TCPF nur mit Acrobat 1.4 Dokumenten klar kommt. Alle neueren Kompressionsverfahren beherrscht es nicht. Unsere pragmatische Lösung war schlussendlich, die PDFs nach dem Upload in die Version 1.4 zu konvertieren.

Und das geht, netterweise, wie das Erstellen der Screenshots, ebenfalls mit GhostScript. Und zwar so (Error Handling und saubere Integration der Konfiguration schafft ihr alleine):

define('GHOSTSCRIPT_BIN_PATH', '/path/to/ghostscript/bin');

/**
 * @param string $srcPath
 * @param string $dstPath
 * @param float $version
 */
function convertPDF($srcPath, $dstPath, $version)
{
    $cmd = sprintf(
        'gs -sDEVICE=pdfwrite -dCompatibilityLevel=%f -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=%s %s',
        escapeshellarg($version),
        escapeshellarg($dstPath),
        escapeshellarg($srcPath)
    );

    putenv('PATH=' . GHOSTSCRIPT_BIN_PATH . PATH_SEPARATOR . getenv('PATH'));

    exec($cmd);
}

Anwendung:

convertPdf('input.pdf', 'output.pdf', 1.4);

Kleiner Hinweis noch: Unter Windows heisst die Executable nicht gs, sondern gswin32c, bzw. gswin64c.

Ich hoffe das hilft mal jemandem. :)

Ähnliche Artikel

Kommentare