Facebook
Twitter
Google+
Kommentare
33

PDF-Erzeugung mit dem Zend Framework

Vernünftig formatierte und druckfertige PDF-Dokumente mit PHP zu erzeugen ist keine leichte Aufgabe. Für gewöhnlich werden dabei zwei Ansätze unterschieden. Mit ausreichend Zeit und Geduld führen sie zwar beide mehr oder weniger ans Ziel, allerdings lassen sie auch einiges zu wünschen übrig.

HTML-zu-PDF-Konvertierung: Dieser Ansatz kommt auf breiter Front zum Einsatz. Dabei wird ein HTML-Dokument programmatisch erzeugt und dann mit einer der vielen freien Bibliotheken 1 zu PDF konvertiert. Da es sich bei HTML jedoch im Gegensatz zu PDF nicht um ein seitenorientiertes Format handelt, ist es unmöglich das Ausgangsdokument 1-zu-1 auf das Zieldokument abzubilden. In der Textverarbeitung übliche Dinge, wie Kopf- und Fußzeilen oder Absatzkontrolle bei Seitenumbrüchen (Schusterjungen und Hurenkinder) sind in HTML schlicht nicht umsetzbar.

Programmatischer Ansatz: Diese Herangehensweise verspricht absolute Kontrolle über den Prozess der PDF-Erzeugung. Allerdings ist der Preis dafür ein extrem hoher Aufwand; jede Textzeile, jedes Objekt, wie Bilder oder Tabellen, muss einzeln durch Festsetzen ihrer bzw. seiner Koordinaten im Dokument positioniert werden 2. Dieser Aufwand ist – abgesehen von minimalen Korrekturen – bei jeder Änderung des Dokuments wieder zu treiben.

Ein neuer Ansatz

Dieser Artikel stellt einen neuen, dritten Ansatz vor. Er basiert auf Templates, die in einer WYSIWYG-Anwendung, wie z.B. Microsoft® Word oder Open Office erstellt und dann mittels PHP mit Daten gefüllt werden. Das resultierende Dokument kann nicht nur als PDF sondern zusätzlich auch als DOCX, DOC und RTF gespeichert werden.

Bevor sich der Artikel der Funktionsweise dieses Ansatzes widmet, noch ein kleines Anwendungsbeispiel vorweg. Der folgende PHP5-Code zeigt exemplarisch die PDF-Erzeugung, indem die Felder software, licensee und company in dem Template template.docx [46.7 KB] mit Daten gefüllt werden. Das resultierende Dokument document.pdf [104.7 KB] wird generiert und auf der Festplatte gespeichert.

$phpLiveDocx = new Zend_Service_LiveDocx_MailMerge(
array (
'username' => 'yourUsername',
'password' => 'yourPassword'
)
); 

$phpLiveDocx->setLocalTemplate('template.docx');

$phpLiveDocx->assign('software', 'Magic Graphical Compression Suite v1.9');
$phpLiveDocx->assign('licensee', 'Henry Döner-Meyer');
$phpLiveDocx->assign('company',  'Co-Operation');

$phpLiveDocx->createDocument();

$document = $phpLiveDocx->retrieveDocument('pdf');

file_put_contents('document.pdf', $document);

unset($phpLiveDocx);

Der Beispiel-Code in diesem Artikel liegt der nächsten Version des Zend Frameworks bei. Diese Version wird die Nummer 1.10 tragen. Zwar gibt es noch keinen offiziellen Termin für die Veröffentlichung, allerdings wird allgemein erwartet, dass es noch dieses Jahr geschieht. Bis es soweit ist, kann per SVN eine Beta-Version aus dem Standard Incubator ausgecheckt werden.

Der Webservice LiveDocx

LiveDocx ist ein SOAP-Webservice zur Dokumentenerzeugung, der auf der marktführenden Textverarbeitungskomponente TX Text Control .NET basiert. Mit LiveDocx ist es möglich, Templates mit jeder Programmiersprache, die SOAP unterstützt, mit Daten zu füllen. Die resultierenden Dokumente können jeweils in allen unterstützten Formaten gespeichert werden. Dieser Artikel beleuchtet ausschließlich das Zusammenspiel von LiveDocx und PHP.

In der Standardversion des Zend Frameworks befinden sich die LiveDocx-Komponenten unterhalb des Pfads /Zend/Service/LiveDocx/. Es ist natürlich auch möglich, LiveDocx ohne das Zend Framework direkt mit dem PHP5-SoapClient zu benutzen. Genauso mit der Bibliothek NuSOAP – damit sogar in Verbindung mit PHP4. Dieser Artikel beschreibt lediglich die Arbeit mit den offiziellen Zend Framework-Komponenten in Verbindung mit PHP5.

Templates und Dokumente

Der Artikel bedient sich recht häufig der Begriffe Template und Dokument. Daher ist es wichtig zu verstehen, was genau damit gemeint ist.

Template: Der Begriff bezeichnet ein formatiertes Ausgangsdokument, lies: Input-, das Felder (Platzhalter) enthält. Ein Template kann in einem der folgenden Formate vorliegen:

  • DOC – Microsoft® Word DOC Format
  • DOCX – Office Open XML Format
  • RTF – Microsoft® Rich Text Format
  • TXD – TX Text Control® Format

Templates können entweder lokal auf dem Client-Rechner (von wo aus der SOAP-Request gestartet wird) oder auf dem LiveDocx-Server gespeichert werden. Welche dieser beiden Möglichkeiten sinnvoller ist, hängt vom jeweiligen Anwendugsfall ab.

Bei lokaler Speicherung des Templates muss es bei jedem Vorgang zusammen mit den Daten zum Server übertragen werden. Dies ist äußerst ineffizient, falls das Template über mehrere Vorgänge hinweg dasselbe ist. Daher bietet es sich in solch einem Fall an, das Template zum LiveDocx-Server zu übertragen und dann dort zu speichern. Für den jeweiligen Vorgang reicht es dann aus, lediglich noch die entsprechenden Daten zusammen mit dem Namen des zu verwendenden Templates an den Server zu schicken. Für die meisten Anwendungsfälle ist dies die Methode der Wahl.

Im Falle von Templates, die sich ständig ändern, oder Anwendungen, die es Benutzern erlauben, eigene Templates zu verwenden, kann es sinnvoll sein, das Template für jeden Vorgang zusammen mit den Daten an den LiveDocx-Server zu übertragen. Natürlich kostet dieses Vorgehen aufgrund der höheren Datenmenge mehr Zeit.

Dokument: Der Begriff Dokument bezeichnet im LiveDocx-Kontext eine vom Webservice erzeugte Datei, also ein mit Daten gefülltes Template. Ein Dokument kann in folgenden Formaten erzeugt werden:

  • DOC – Microsoft® Word DOC Format
  • DOCX – Office Open XML Format
  • HTML – XHTML 1.0 Transitional Format
  • PDF – Adobe® Portable Document Format
  • RTF – Microsoft® Rich Text Format
  • TXD – TX Text Control® Format
  • TXT – ANSI-Textformat

Zusätzlich zu den oben genannten Textverarbeitungs-Dateiformaten sind noch folgende Bildformate als Zielformate verfügbar:

  • BMP – Bitmap Image Format
  • GIF – Graphics Interchange Format
  • JPG – Joint Photographic Experts Group Format
  • PNG – Portable Network Graphics Format
  • TIFF – Tagged Image File Format
  • WMF – Windows Meta File Format

LiveDocx im Einsatz

Dieser Abschnitt beschreibt den Prozess der Dokumentenerzeugung im Ganzen.

Template-Erzeugung in Microsoft® Word 2007

Der erste Schritt jedes LiveDocx-Projekts besteht darin, ein Template zu erzeugen. Dazu dienen entweder Open Office oder Microsoft® Word. Um den Artikel nicht unnötig in die Länge zu ziehen, sei an dieser Stelle lediglich die Template-Erzeugung mit Microsoft® Word 2007 beschrieben. Eine Anleitung für Open Office findet sich im LiveDocx Blog.


Feld-Dialog in Microsoft® Word 2007. Für eine Vergrößerung bitte anklicken.

Der Prozess beginnt mit der Erzeugung einer neuen Datei in Microsoft® Word 2007. Diese wird beispielsweise unter dem Namen template.docx gespeichert. Es folgt der Inhalt des Dokuments: Text, Bilder, Felder. Die nebenstehende Abbildung zeigt den Dialog zum Einfügen von Feldern.

Sobald das Template template.docx [46 KB] fertiggestellt ist, muss es nochmals gespeichert werden. Die folgende Abbildung zeigt das fertige Template in Microsoft® Word 2007. Die Felder haben die Form { MERGEFIELD name }. Für diese Darstellung in Microsoft® Word 2007 ist es unter Umständen notwendig, die Tastkombination Alt-F9 zu drücken:


Template in Microsoft® Word 2007. Für eine Vergrößerung bitte anklicken.

Templates mit Daten füllen

Nach Fertigstellung des Templates kann zum nächsten Prozessschritt übergangen werden: dem Füllen des Templates mit Daten. Der folgende Beispiel-Code zeigt, wie das Template mit Daten gefüllt wird:

$phpLiveDocx = new Zend_Service_LiveDocx_MailMerge(
array (
'username' => 'yourUsername',
'password' => 'yourPassword'
)
);

$phpLiveDocx->setLocalTemplate('template.docx');

$phpLiveDocx->assign('software', 'Magic Graphical Compression Suite v1.9');
$phpLiveDocx->assign('licensee', 'Henry Döner-Meyer');
$phpLiveDocx->assign('company',  'Co-Operation');
$phpLiveDocx->assign('date',     'September 10, 2009');
$phpLiveDocx->assign('time',     '7:17:48 AM CEST');
$phpLiveDocx->assign('city',     'Hamburg');
$phpLiveDocx->assign('country',  'Germany');

$phpLiveDocx->createDocument();

$document = $phpLiveDocx->retrieveDocument('pdf');

file_put_contents('document.pdf', $document);

unset($phpLiveDocx);

Besonders dann, wenn der Dokumentenerstellungsprozess zu Zwecken der Archivierung angestoßen wurde, natürlich aber auch durchaus in anderen Fällen ist es wünschenswert, eine erzeugte PDF-Datei mit Metadaten zu versehen. Die Methode setDocumentProperties() bettet diese Metadaten, die als assoziatives Array vorliegen müssen, in das PDF ein:

$documentProperties = array(
'title'    => 'Magic Graphical Compression Suite v1.9',
'author'   => 'Megasoft Co-operation',
'subject'  => 'Magic Graphical Compression Suite v1.9',
'keywords' => 'Graphics, Magical, Compress, Suite, License'
);

$phpLiveDocx->setDocumentProperties($documentProperties);

Der Aufruf von setDocumentProperties() erfolgt vor dem von createDocument(). Das resultierende PDF-Dokument document.pdf [104 KB] wird auf die Festplatte geschrieben und kann nun mit einem beliebigen PDF-Viewer geöffnet werden:


Template in Document Viewer

Blockdaten an LiveDocx übergeben

Zusätzlich zu den skalaren Datentypen aus dem obigen Beispiel, kann LiveDocx auch mit zusammengesetzten Datentypen, wie assoziativen Arrays, umgehen. Als Beispiel hierfür dienen das Template template.doc [20.5 KB] und das resultierende Dokument document.pdf [77.6 KB] [77.6 KB]. Besonderes Augenmerk sei auf folgenden Abschnitt des Templates gelegt:


Template in Microsoft® Word, Ausschnitt. Für eine Vergrößerung bitte anklicken.

Dieser von Lesezeichen (Lesezeichen in Microsoft® Word) eingefasste Abschnitt wird wiederholt in das resultierende Dokument eingefügt, so dass sich daraus mehrere Zeilen einer Tabelle ergeben. Die Tabellenzeilen sind als zweidimensionales Array abgebildet. Dabei entspricht jede Zeile einem Array der zweiten Ordnung.

Der folgende PHP5-Code nutzt dieses Konzept, um die Verbindungsdatentabelle einer fiktiven Telefonrechnung zu erzeugen. Der Übersichtlichkeit halber ist hier nur der Code-Abschnitt aufgeführt, der die Tabelle erzeugt. Die LiveDocx-Initialisierung, die Dokumentenerzeugung und das Herunterladen des resultierenden Dokuments funktionieren genau wie im obigen Beispiel:

// instantiate LiveDocx

$billConnections = array(
array(
'connection_number'   => '+49 (0)421 3359101',
'connection_duration' => '00:01:01',
'fee'                 => '1.15'
),
array(
'connection_number'   => '+49 (0)421 3359102',
'connection_duration' => '00:01:02',
'fee'                 => '1.15'
),
array(
'connection_number'   => '+49 (0)421 3359103',
'connection_duration' => '00:01:03',
'fee'                 => '1.15'
),
array(
'connection_number'   => '+49 (0)421 3359104',
'connection_duration' => '00:01:04',
'fee'                 => '1.15'
)
);

$phpLiveDocx->assign('connection', $billConnections);

// create and retrieve document

Das resultierende Dokument enthält nun eine Tabelle mit den ihr zugewiesenen Daten:


Template im PDF-Viewer, Ausschnitt. Für eine Vergrößerung bitte anklicken.

Erzeugen von Bilddateien mit LiveDocx

Zusätzlich zu den oben genannten Dokumentenformaten kann LiveDocx die Seiten eines Dokuments auch als Bilddateien speichern. Dazu bietet Zend_Service_LiveDocx_MailMerge die Methoden getAllBitmaps() und getBitmaps() an:

// instantiate LiveDocx 

// get all bitmaps
// (zoomFactor, format)
$bitmaps = $phpLiveDocx->getAllBitmaps(100, 'png');

Bilder lediglich für bestimmte Seiten zu erzeugen, funktioniert ganz ähnlich:

// get just bitmaps in specified range
// (fromPage, toPage, zoomFactor, format)
$bitmaps = $phpLiveDocx->getBitmaps(2, 2, 100, 'png');

Dabei ist der Parameter zoomFactor zu beachten. Dabei handelt es sich um eine Prozentangabe, die sich auf die Originalgröße des Dokuments bezieht. Der Wertebereich erstreckt sich von 10-400%. Die beiden Methoden eignen sich hervorragend zur Erzeugung von Vorschaubildern.

Die erzeugten Bilddaten können mit einer einfachen Schleifenfunktion auf die Festplatte geschrieben werden. Das Array, das die Methoden zurückliefern enthält die einzelnen Seiten des Dokuments als Binärdaten:

// write to disk
// (one page per record)
foreach ($bitmaps as $pageNumber => $bitmapData) {
$filename = sprintf('documentPage%d.png', $pageNumber);
file_put_contents($filename, $bitmapData);
printf('Written %d bytes to disk as %s.%s', filesize($filename), $filename, PHP_EOL);
}

LiveDocx in eigenen Anwendungen einsetzen

Der LiveDocx-PHP-Code im Zend Framework steht unter der Free BSD Lizenz und kann daher in den meisten Anwendungen problemlos eingesetzt werden. Bei dem Server-Teil von LiveDocx hingegen handelt es sich um proprietäre Software. Es bestehen daher drei Szenarien für den Einsatz von LiveDocx:

  1. Kostenloser LiveDocx-Zugang
    Diese Variante reicht für die meisten Anwendungen aus. Die LiveDocx-Klassen im Zend Framework referenzieren den Standard-LiveDocx-Server. Dieser Server kann kostenlos genutzt werden. Das gilt auch für kommerzielle Anwendungen. Die Registrierung ist kostenlos.
  2. Premium Service
    Für Anwendungen, die mehr als ein paar Hundert Dokumente am Tag erzeugen, bietet es sich an, gegen eine monatliche Gebühr einen eigenen LiveDocx-Server zu mieten. Ein solcher Server bietet im Gegensatz zum kostenlosen Standard-Server garantierte Verfügbarkeit, Antwortzeiten und Bandbreite.
  3. Eigene LiveDocx-Lizenz
    Anwendungen, die mehrere Tausend Dokumente pro Stunde erzeugen oder die sensible Daten verarbeiten, greifen am besten auf einen LiveDocx-Server zu, der im eigenen Netz hinter der Firewall läuft. Diese Variante ermöglicht die höchste Durchsatzrate, da sie alle Möglichkeiten zur Optimierung des Anwendungsaufbaus bietet.

Weiterführende Informationen

Dieser Artikel bietet lediglich einen Überblick über die Möglichkeiten, die LiveDocx bietet. Für weitere Informationen über diese neue Art der Dokumentenerzeugung lohnt ein Blick auf folgende (englische) Webseiten:

LiveDocx SOAP-Webservice

Für Fragen oder Anregungen sind entweder direkt beim Autoren oder auch im offiziellen Support-Forum gut aufgehoben.

Fußnoten

[1] domPDF, HTML 2 (F)PDF, HTML_ToPDF, mPDF usw.

[2] Zend_Pdf, PDFlib, FPDF, Cpdf usw.

Mehr über den Autor erfahrt ihr auf seiner Profilseite
Über den Autor

Jonathan Maron

Jonathan Maron arbeitet seit 1996 im Bereich der Web-Entwicklung und -Konzeption. Angestellt ist er in einem international ausgerichteten Unternehmen, das Textverarbeitungskomponenten herstellt. Als Befürworter der FOSS-Bewegung plädiert Jonathan dafür, Open-Source-Software einzusetzen und hält es für unsinnig, das Rad ständig neu erfinden zu wollen. Daher greift er am liebsten auf etablierte Frameworks
Kommentare

33 Comments

  1. Die Vorgehensweise war für mich recht neu. Finde zwei Punkte dabei sehr interessant. Einfach mit Platzhaltern zu arbeiten, die in einem Dokument drinnen sind, das ich mit Word erstellen kann und die Geschichte über Webservices zu lösen.

    Danke auf jeden Fall für den Artikel!

    Reply
  2. Ich finde es sehr interessant, schon als ich davon am Anfang der Entwicklung der Komponente gehört habe 😉

    Allerdings hat die Komponente genau genommen einen recht beachtlichen Nachteil: Als Templates werden werden fats ausschließlich Formate von Microsoft unterstützt. Natürlich kann ich damit Dokumente als *.doc oder *.docx Datei speichern – aber eine direkte Open Document Unterstützung wäre noch wünschenswert :)

    Reply
  3. Hört sich an sich interessant an, großes Manko ist aber imho, dass die Software nicht Open Source ist (da ist man als PHP Entwickler ja eigentlich sehr verwöhnt).
    Zum Erzeugen von PDFs (Rechnungen, Mahnungen, Bestellbestätigungen…) verwenden wir LaTeX und haben damit sehr gute Erfahrungen gemacht. Das ist dann übrigens auch nur ein Ersetzen.

    Kurz zur Vorgehensweise:
    – Template im TeX-Format mit Smarty-Code.
    – Parsen des Smarty-Codes.
    – PDF mit texi2pdf erzeugen.
    – PDF Speichern und dann per Browser oder Mail ausliefern.

    Wir haben die Erfahrung gemacht, dass das alles sehr schnell von der Hand geht und man mit geeigneten Tools (TeXShop auf OS X) zum „designen“ eines Templates sehr schnell ein SEHR hochwertiges Ergebnis erhält (TeX ist ja nicht nur ein einfaches Tool zum PDF erzeugen sondern eigentlich ein komplettes Satzsystem).

    Was natürlich dabei nicht so elegant ist ist, dass man eben die PDFs nicht wirklich mit PHP erzeugt und sich dem Dateisystem und einer exec-Funktion bedienen muss. Geht aber bisher nicht auf Kosten der Performance (eher im Gegenteil verglichen mit FPDF).

    Viele Grüße,
    Peter

    PS: Mit TeX könnte man auch in andere Formate als PDF exportieren (z.B. HTML oder Postscript).
    peter.

    Reply
  4. Da ich schon bei mehreren Projekten DomPPF eingesetzt habe, kann ich dir bei dieser Aussage nicht zustimmen.
    […] ist es unmöglich das Ausgangsdokument 1-zu-1 auf das Zieldokument abzubilden. In der Textverarbeitung übliche Dinge, wie Kopf- und Fußzeilen […]

    Bei domPDF gibt es die Möglichkeit Kopf- und Fußzeilen zu setzen auch die Seitenzahl in der Fußzeile ist ohne weiteres möglich.
    Zusätzlich hat man die Möglichkeit auch alle Elemente pixel-genau zu platzieren.

    Reply
  5. Ich kannte die Methode schon, werde sie aber nur höchst selten nutzen, denn sie hat einen entscheidenden Nachteil: sie ist nicht lokal!

    Wenn ich beispielsweise eine Konferenz-Registrierungsbestätigung als PDF generieren möchte, oder aber jegliches andere Dokument, wo vertrauliche/geheime/nicht-öffentliche Daten enthalten sind, dann scheue ich mich davor, dies über das Internet bei diesem Service zu tun. Es gibt einfach zu viele Möglichkeiten, dass diese Daten dann abhanden kommen. Die Verbindung ist zwar mit https verschlüsselt, aber böse Hacker/Cracker könnten auf die Idee kommen, dieses lohnende Ziel anzugreifen und dann alle Informationen (und es sind sicherlich viele und sehr interessante) abzugreifen. Irgendwann wird das passieren.

    Ich komme häufig mit PHPExcel ans Ziel. Damit kann ich ein Excel-Sheet programmatisch erstellen, und dieses dann auch als PDF oder CSV oder Excel abspeichern. Und das lokal auf meinem Server.

    Wenn möglich arbeite ich lieber lokal, dann muss ich meinen Kunden auch nicht erklären, warum ich (sensible) Daten über das Internet an einen Service sende. Ist evtl. auch für viele interessant.

    http://www.codeplex.com/PHPExcel

    Reply
  6. Kann irgendjemand anderes die template.docx mit Open Office 3.1 öffnen? Hier stürzt mir immer mein Open Office ab. :(

    Ansonsten ist ein schöner, selbsterklärender Artikel. Weiter so! :)

    Reply
  7. Soweit wie PHP Gangsta gehe ich noch nicht mal im Bezug aufs Schnüffeln, aber was passiert mit den Files/Dokumenten, wenn Sie generiert wurden? Bleiben die denn auf dem Server werden die in Europa gelöscht, vorher aber noch auf nen Ami Server geschoben? Coole Idee, aber die selben Mängel wie Google Doc… bis auf das man sich für knapp $ 3.000 sich nen Server hinstellen kann…

    Reply
  8. @PHP Gangsta (Kommentar #6): Soweit ich Jonathan verstanden habe (wir hatten uns vor 3 Wochen zu dem Service unterhalten können), soll die Möglichkeit zur lokalen Installation des Tools noch kommen. Siehe auch Punkt 3 ganz am Ende des Artikels;-)

    Die Jungs sind sich durchaus im klaren darüber, dass ein reiner Webservice bei einem Drittanbieter für bestimmte geschäftskritische oder sonstwie sensibe Daten nicht geeignet ist. Vermutlich wird das dann allerdings eine kostenpflichtige Variante werden.

    Reply
  9. @Ulf (Kommentar 9): Deine Anmerkungen sind sehr interessant und wir haben uns natürlich darüber Gedanken gemacht.

    Bei LiveDocx werden keine Daten – zu keiner Zeit – physisch auf dem Server gespeichert (außer die Vorlagen, die explizit hochgeladen werden). Die Vorlagen können mit dem SOAP-Request mitgeschickt werden, die Daten werden „gemerged“ und dann das Dokument zurückgegeben. Das Dokument bleibt für diesen Vorgang lediglich im Speicher der aktuellen Session und wird nicht als Datei gespeichert.

    Reply
  10. Ein kleiner Nachtrag:

    LiveDocx ist ein Service einer deutschen Firma mit Sitz in Deutschland. Die Server stehen in Deutschland und somit sind wir an deutsche Datenschutz-Gesetze (BDSG) gebunden. Datenschutz war ein absolut wichtiges Kriterium bei der Entwicklung (the real „don’t be evil“). :-)

    Reply
  11. @Björn, ich bin da nur vorsichtig, weil ihr im Imprint ne Amerikanische Telefonnummer stehen habt… Google muss ich auch an das BDSG halten, aber datenschutzkritische Applikationen wie Doc und Analytics, werden auf ausländischen Servern gehostet, wo man das nicht umbedingt so genau nimmt mit dem DS. 😉 Aber wenn ihr sagt, dass die Daten „nur“ kurz physisch im (RAM?)Speicher gehalten werden, muss man euch das wohl glauben. :)

    Reply
  12. Als ich diesen Artikel schrieb, habe ich nicht so viel positives Feedback erwartet.

    Der Artikel ist nun seit einem Tag online. Ich würde gerne einige Punkte kommentieren.

    1. Vorlagenformate

    Dennis Becker (4) stellte heraus, dass LiveDocx nur Microsoft®-Formate unterstützt und das Open Document Format wünschenswert wäre.

    Zend_Service_LiveDocx_MailMerge unterstützt drei Vorlagenformate: DOCX, DOC und RTF. DOCX, auch bekannt als Office Open XML, wurde von ISO/IEC, Ecma und Microsoft® entwickelt. Auch wenn dieses Format sehr stark an Microsoft® Word gekoppelt ist, ist es ein standardisiertes Format nach ISO/IEC 29500:2008 (http://is.gd/4FXvM). DOC und RTF sind in der Tat pure Microsoft® Formate. Die Entscheidung, zunächst diese Formate zu unterstützten, wurde aus der Nachfrage der Nutzer heraus getroffen. Im Moment ist die Nachfrage nach diesen Formaten einfach höher als nach dem Open Document Format. Das bedeutet allerdings nicht, dass wir das Open Document Format (ODT) künftig nicht unterstützen werden.

    2. Open Source vs. proprietär

    Peter Hansen (5) wies auf die Kombination von Open Source und proprietärer Software hin.

    Der gesamte Source-Code, der im Zend Framework veröffentlicht wurde – inkl. Zend_Service_LiveDocx_MailMerge – ist unter der „New BSD License“ lizenziert. Der Backend-Server ist proprietäre Software. Dieser Service basiert auf der Textverarbeitungskomponente TX Text Control® und läuft auf einem Microsoft® Windows Server. Für die meisten Anwendungen kann er komplett kostenlos verwendet werden. Es gibt keine rechtlichen Zwänge, um zu dem Bezahlservice zu wechseln. Unternehmen die mehrere tausend Dokumente in der Woche erzeugen wollen oder Anwendungen, welche mit sehr sensiblen Daten arbeiten, wie in der Medizin- oder Banken-Branche, sind typische Kandidaten für den Bezahlservice. Wenn du LiveDocx kostenlos verwenden möchtest, wähle einfach den Standard Backend Server, referenziert in Zend_Service_LiveDocx_MailMerge.

    3. Datenschutz

    Mein Kollege Björn Meyer (12, 13) kommentierte bereits die Bedenken von Stefan Riedels (9): Alles was wir mit LiveDocx machen, machen wir unter den strengen Datenschutzauflagen Deutschlands. PHP Gangsta (7): Der Hauptgrund, warum wir den LiveDocx Server zur lokalen Installation anbieten, ist genau dieses Problem. In diesem Fall brauchst du die sensiblen Daten nicht übers Internet schicken. Damit verfügst du nicht nur über die gesamte Kontrolle über den Server, sondern hast auch erhebliche Performance-Vorteile, da nur deine Anwendung auf diesem Server in deinen lokalen Gigabit-Netzwerk läuft. Darauf abgestimmt kannst du die entsprechende Hardware wählen. Wenn du mehr Performance benötigst: Füge einfach eine CPU oder mehr Speicher hinzu!

    4. Der OpenOffice Weg

    Cem Derin (16) richtete unsere Aufmerksamkeit auf die PDF-Erzeugung mit OpenOffice. OpenOffice kann automatisiert werden, kann also von PHP aus benutzt werden, um ein PDF Dokument zu erzeugen. Einer der Nachteile ist, dass OpenOffice auf dem Server installiert werden muss. Dieses ist nicht immer möglich; zum Beispiel bei einem Hosting-Anbieter. Durch die Entkopplung der Software, die die eigentliche Aufgabe übernimmt und mit einem standardisierten SOAP-Interface angesprochen werden kann, wird dieses Problem umgangen.

    Schreibt einfach Kommentare oder schreibt mir persönlich (http://is.gd/4FZCQ), wenn ihr weitere Themen bezüglich LiveDocx diskutieren wollt.

    Jonathan Maron

    Reply
  13. Wo habt Ihr denn die Preise her? Auf der Website steht dazu doch gar nichts…

    Grundsätzlich sollen bei mir die Daten nicht den Server verlassen, außer auf dem Web zum User, daher kommt für nicht nur eine Lokale Version in Frage.

    Läßt sich eine der Alternativen:
    – fpdf / fpdi
    – DomPPF
    – LaTeX
    genauso bequeme aus PHP wie der LiveDocx-Webservice ansteuern – gibt es also gute PHP-Classen für die Alternativen?

    Reply
  14. Pingback: t3n.de/socialnews
  15. Der grosse Vorteil von livePHP scheint mir dass die Dokumente in jedem Ausgabeformat genau gleich aussehen, dass ist insbesondere wichtig wenn man gleichermassen PDF und RTF oder DOC Dateien ausliefern möchte.

    Der grosse Nachteil sehe ich aber an der Statik der Templates bzw. sehe aus dieser Beschreibung nicht ob man die Vorlagen danach selbst online über einen WYSIWYG editieren kann und z.b. neue Zeilen, Auflistungen oder Tabellen einfügen kann.

    Wir nutzen seit längerem die Klasse Paggard http://paggard.com/projects/doc.generator/ die aus einer HTML-ähnlichen Vorlage jeweils RTF oder PDF Dokumente generiert, das funktioniert auch zu 95% gut, aber die beiden Dokumente PDF und RTF sehen nie zu 100% gleich aus, insbesondere gibt es Probleme bei komplexen Auflistungen über die Seitenumbrüche hinaus, da es dadurch verschiebungen oder Darstellungsfehler gibt. Aus diesem Grund sind wir ständig auf der Suche nach neueren noch besseren Lösungen (ohne .Net und Windows Server installieren zu müssen).

    Reply
  16. LiveDocx ist wirklich eine schöne Sache. Leider ist der free-Service in der letzten Zeit so überlastet, das ein Arbeiten kaum noch möglich ist. Und für jemanden wie mich, der nur ein paar Dokumente pro Woche erzeugen will, ist der Premium-Service etwas teuer.
    Schade. Wäre eine gute Lösung geworden, aber so lange die ihre Performance-Probleme nicht in den Griff bekommen leider nur gegen Geld nutzbar und damit für kleinere Anwendungen uninteressant.

    Reply
  17. @Maria: Ein virtueller Druckertreiber nützt auf einem Server leider nichts, was hier besprochen wird sind Lösungen für serverseitige Konvertierungen aus PHP heraus.

    Reply
  18. Eine ebenfalls gute Lösung ist PDFnow (www.pdfnow.com).
    Arbeitet mit XSL-FO-Templates, einer sehr leistungsfähigen Template-Sprache.
    Ein PHP-Statement reicht, um ein PDF zu erzeugen.

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen