de.comp.lang.php.* FAQ

23.4. Kann ich bestehende PDF-Dateien als Template für dynamische Dokumente verwenden?

Keywords: PDF | Vorlage | Template

Antwort von Kai Schröder

Jein, nicht in jedem Fall. Ob sich PDF-Dateien als Template eignen, hängt von verschiedenen Faktoren ab. Zum ersten kann man mittels Adobe Acrobat ein PDF optimieren (siehe Kapitel F der PDF-Referenz). Dabei wird das PDF in seiner Struktur verändert und zum Teil komprimiert. Zum anderen sind für PDF-Dateien einige Sicherheitseinstellungen möglich, die die nachträgliche Veränderung nicht erlauben. Ein nicht optimiertes und ungeschütztes PDF läßt sich aber als Template verwenden.

Antwort von Thomas Weinert

Das Beispiel liest eine PDF-Datei ein und ersetzt vordefinierte Inhalte in Formularfeldern. Die Inhalte müssen dazu dem Schema [[$variable]] entsprechen.

Das Array $pdf_vars kann nach Bedarf gefüllt werden. Im Beispiel wird der Inhalt [[$foobar]] durch dclp-faq ersetzt.

<?php
//PDF-Datei mit Forumarfeldern
$pdffile = "sample_form.pdf";

//Variablen
$pdf_vars = array(
    'foobar'=>'dclp-faq'
);

//Funktion zum Ersetzen
function replace_pdf_var($match){
    if (isset($GLOBALS['pdf_vars'][$match[1]])) {
        return $GLOBALS['pdf_vars'][$match[1]];
    } else {
        return $match[1];
    }
}

if(file_exists($pdffile)){

    //Das Template binär öffnen
    if ($fp = fopen($pdffile, 'rb')) {
        $template = fread ($fp, filesize ($pdffile));
        fclose ($fp);

        //auf das Template einen Regex anwenden.
        $pdf = preg_replace_callback('#\[\[\$([^\]]+)\]\]#',
            'replace_pdf_var', $template);

        //HTTP-Header ausgeben
        header("Content-type: application/octet-stream");
        header("Content-Disposition: attachment; filename=\"$pdffile\"");
        header("Content-type: application/pdf");

        //das fertige PDF ausgeben
        echo $pdf;
   }
}
?>

Valid HTML 4.01! Valid CSS!

23.4. Kann ich bestehende PDF-Dateien als Template für dynamische Dokumente verwenden?
http://www.php-faq.de/q/q-pdf-files-template.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team