Chino
Erfahrenes Mitglied
Guten Tag Forum!
Kleine Anmerkung vorweg: Es folgt ein etwas längerer Beitrag Wer noch nie mit PHP PDF Dateien erstellt hat, der kann sich das weiterlesen ersparen.
Ich sitz gerad vor einer etwas kniffligen Aufgabe: Und zwar sollen aus einer Applikation Einträge aus einer Datenbank in ein PDF exportiert werden. Ein Eintrag ist einem bestimmten Datum zugeordnet, wobei es durchaus vorkommen kann, dass es zu einem Datum mehrere Einträge gibt (als Beispiel gibt es 3 Einträge für das Datum 04.01.2005). Am Ende des Prozesses sollte nach Möglichkeit eine PDF-Datei erstellt worden sein, die alle Einträge für ein bestimmtes Datum beinhaltet. Also analog zu den Einträgen in der Datenbank sollte die PDF-Datei 3 Seiten haben.
So, bis jetzt nix kompliziertes, aber: Die Daten sollen dabei in ein nicht leeres PDF geschrieben werden. Sprich: Ich habe sozusagen ein "PDF-Template" wo bereits "Platzhalter" für die Werte aus der Datenbank vorgesehen sind. So, bis hier könnte ich das auch mit den PDF-Funktionen machen, die mir PHP bereit stellt. Doch jetzt kommt das große Aber: Da die Templates in der Applikation dynamisch pflegbar sind - der User hat also die Möglichkeit andere Templates auf den Server zu laden, die dann verwendet werden - weiß ich ja nicht, wo sich welcher Platzhalter im PDF befindet. Somit muss ich auf ein Acrobat-Formular zurückgreifen, das mit den jeweiligen Datenbank-Werten befüllt werden will. Im Gegensatz zu ASP bietet PHP es leider nicht an, direkt aus einem Script die Formularfelder einnerhalb eines PDF-Dokumentes mit Werten zu füllen.
Das ist an sich auch kein größeres Problem, denn es gibt ja eine tolle Erfindung: FDF bzw XFDF. In diesen Dateien (letztere ist XML) befinden sich nur die jeweiligen Inhalte für die jeweiligen Formularfelder, die sich in einem PDF-Dokument befinden. Verbindet man jetzt nun das PDF (Template) und das XFDF-Dokument, bekommt man ein PDF angezeigt, in welchem das Formular bereites mit den jeweiligen Werten aus dem XFDF-Dokument ausgefüllt ist.
Beispiel XFDF-Layout:
Sollte soweit eigentlich verständlich sein
Das XML wird über ein PHP-Script erstellt und dann an den Browser ausgegeben.
Im Script wird der Header noch angepasst:
Wenn ich jetzt das PDF zusammen mit dem XFDF folgendermaßen Aufrufe http://www.server.de/template.pdf#FDF=http://www.server.de/buildXML.php dann wird der Acrobat Reader gestartet, darin wird dann das PDF-Template geöffnet und als letztes wird das Formular mit den Werten aus dem XML gefüllt.
So, das klappt soweit auch einwandfrei (zu Testzwecken allerdings mit statischen Inhalten, die Anbindung an die Datenbank und spätere Selektion der Daten ist das kleinste Problem). Das Problem was ich jetzt habe ist die Aufteilung der verschiedenen Datensätze auf mehrere Seiten.
Wenn es möglich ist, das XFDF-Dokument und das PDF-Template zu einem neuen (statischen) PDF zu speichern, könnte dieser Prozess für jeden Datensatz durchgeführt werden. Die 3 einzelnen PDF-Dateien könnten dann am Ende problemlos zu einem einzelnen Dokument zusammengefasst werden. Das ist zwar nicht die schönste Lösung, aber das ist jetzt mal egal
Ich hoffe das war soweit verständlich. Falls dem nicht so ist, kann ich gerne nochmal was genauer Erläutern.
Leider gibt es von Seiten Adobe diesbezüglich wenig Dokumentation bzw. die Dokumentation die vorhanden ist, muss bestellt werden. Andere Suche im Netz brachte nur Treffer auf kostenpflichtige Software zu Tage, und das kann ich leider nicht gebrauchen
Wäre also gut, wenn jemand hier einen Lösungsansatz für das geschilderte Problem hat ;-)
Kleine Anmerkung vorweg: Es folgt ein etwas längerer Beitrag Wer noch nie mit PHP PDF Dateien erstellt hat, der kann sich das weiterlesen ersparen.
Ich sitz gerad vor einer etwas kniffligen Aufgabe: Und zwar sollen aus einer Applikation Einträge aus einer Datenbank in ein PDF exportiert werden. Ein Eintrag ist einem bestimmten Datum zugeordnet, wobei es durchaus vorkommen kann, dass es zu einem Datum mehrere Einträge gibt (als Beispiel gibt es 3 Einträge für das Datum 04.01.2005). Am Ende des Prozesses sollte nach Möglichkeit eine PDF-Datei erstellt worden sein, die alle Einträge für ein bestimmtes Datum beinhaltet. Also analog zu den Einträgen in der Datenbank sollte die PDF-Datei 3 Seiten haben.
So, bis jetzt nix kompliziertes, aber: Die Daten sollen dabei in ein nicht leeres PDF geschrieben werden. Sprich: Ich habe sozusagen ein "PDF-Template" wo bereits "Platzhalter" für die Werte aus der Datenbank vorgesehen sind. So, bis hier könnte ich das auch mit den PDF-Funktionen machen, die mir PHP bereit stellt. Doch jetzt kommt das große Aber: Da die Templates in der Applikation dynamisch pflegbar sind - der User hat also die Möglichkeit andere Templates auf den Server zu laden, die dann verwendet werden - weiß ich ja nicht, wo sich welcher Platzhalter im PDF befindet. Somit muss ich auf ein Acrobat-Formular zurückgreifen, das mit den jeweiligen Datenbank-Werten befüllt werden will. Im Gegensatz zu ASP bietet PHP es leider nicht an, direkt aus einem Script die Formularfelder einnerhalb eines PDF-Dokumentes mit Werten zu füllen.
Das ist an sich auch kein größeres Problem, denn es gibt ja eine tolle Erfindung: FDF bzw XFDF. In diesen Dateien (letztere ist XML) befinden sich nur die jeweiligen Inhalte für die jeweiligen Formularfelder, die sich in einem PDF-Dokument befinden. Verbindet man jetzt nun das PDF (Template) und das XFDF-Dokument, bekommt man ein PDF angezeigt, in welchem das Formular bereites mit den jeweiligen Werten aus dem XFDF-Dokument ausgefüllt ist.
Beispiel XFDF-Layout:
Code:
<?xml version="1.0" encoding="UTF-8" ?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<fields>
<field name="user_name">
<value>foo bar</value>
</field>
<field name="report_nr">
<value>115</value>
</field>
<field name="report_date">
<value>04.01.2005</value>
</field>
<field name="report_id">
<value>21</value>
</field>
</fields>
<f href="" />
</xfdf>
Das XML wird über ein PHP-Script erstellt und dann an den Browser ausgegeben.
Im Script wird der Header noch angepasst:
PHP:
header("Content-type: application/vnd.adobe.xfdf");
So, das klappt soweit auch einwandfrei (zu Testzwecken allerdings mit statischen Inhalten, die Anbindung an die Datenbank und spätere Selektion der Daten ist das kleinste Problem). Das Problem was ich jetzt habe ist die Aufteilung der verschiedenen Datensätze auf mehrere Seiten.
Wenn es möglich ist, das XFDF-Dokument und das PDF-Template zu einem neuen (statischen) PDF zu speichern, könnte dieser Prozess für jeden Datensatz durchgeführt werden. Die 3 einzelnen PDF-Dateien könnten dann am Ende problemlos zu einem einzelnen Dokument zusammengefasst werden. Das ist zwar nicht die schönste Lösung, aber das ist jetzt mal egal
Ich hoffe das war soweit verständlich. Falls dem nicht so ist, kann ich gerne nochmal was genauer Erläutern.
Leider gibt es von Seiten Adobe diesbezüglich wenig Dokumentation bzw. die Dokumentation die vorhanden ist, muss bestellt werden. Andere Suche im Netz brachte nur Treffer auf kostenpflichtige Software zu Tage, und das kann ich leider nicht gebrauchen
Wäre also gut, wenn jemand hier einen Lösungsansatz für das geschilderte Problem hat ;-)
Zuletzt bearbeitet: