odt github - PHP PDF-Vorlagenbibliothek mit PDF-Ausgabe?




to doc (13)

Gibt es eine PHP-PDF-Bibliothek, die Platzhaltervariablen in einem vorhandenen PDF-, ODT- oder DOCX-Dokument ersetzen und als Endergebnis eine PDF-Datei generieren kann, ohne das Layout zu beschädigen?

Bedarf:

  • Benötigt keinen Webservice von Drittanbietern

  • Die Fähigkeit, auf gemeinsam genutztem Webhosting zu laufen, wäre ideal (keine binären Installationen / Pakete erforderlich)

Eine Bibliothek, die eine vorhandene PDF-Datei laden und programmatisch Text an einer bestimmten Stelle einfügen kann, ist für meinen Anwendungsfall nicht ausreichend .

Soweit meine Forschung zeigt, gibt es keine Bibliothek, die das tun kann:

  • TCPDF kann Dokumente nur von Grund auf neu generieren

  • FPDI kann vorhandene PDF-Vorlagen lesen, aber Inhalte nur programmatisch hinzufügen (keine Ersetzung von Vorlagenvariablen)

  • Es gibt verschiedene DOCX / ODT-Vorlagenbibliotheken, die jedoch kein PDF ausgeben

PHPDOCx behauptet, genau das zu tun, was ich brauche - aber sie bieten keine Testversion an und ich werde keine Katze in einer Tasche kaufen, vor allem dann nicht, wenn es im Internet anscheinend kein anderes Produkt gibt Dies. Ich finde es schwer zu glauben, dass sie dies ohne Probleme tun können - wenn Sie dies erfolgreich mit dem Produkt getan haben, schreiben Sie bitte hier eine Zeile.

Übersehe ich etwas?

Gibt es eine Möglichkeit, dies mit PDF-Formularen zu tun? Ich erstelle die Quelldokumente in OpenOffice 3.

Ich kann in der Lage sein, Standard-Linux-Befehle zu verwenden ( pdftk ist zum Beispiel verfügbar und versucht das gerade pdftk .)

Update: * Argh! * Ich wurde aus dem Büro gerufen und das Kopfgeld ist in der Zwischenzeit abgelaufen. Ein neues Kopfgeld starten: Soweit meine Tests zeigen, funktioniert für mich noch keine Lösung.

Update II: Ich werde bald den pdftk-Ansatz sehen, aber ich beginne auch ein weiteres Bounty für eine weitere Runde, um zusätzliche Inputs zu sammeln. Diese Frage hat jetzt 1300 Rep-Punkte in Bounties gesehen, muss eine Art von Rekord sein :)


Answers

Es ist ein bisschen spät, aber werfen Sie einen Blick auf die PDFTemplate Bibliothek, die es genau tut, was Sie wollen. Sie können Open Document-Dateien (odt) erstellen und Platzhalter darin einfügen. Die PDFTemplate-Bibliothek kann diese Platzhalter (auch mit Bildern) ausfüllen und eine PDF-Datei erstellen.

ODT-Dateien mit Platzhaltern zu PDF



Dies ist nicht sehr praktisch, aber der Vollständigkeit halber: Wenn Sie bereits eine ODT-Vorlage haben, können Sie diese als Vorlage beibehalten. Das Ändern der OpenDocument content.xml und Ersetzen von Platzhaltern darin ist ziemlich einfach. Wenn dies der unoconv , könnten Sie unoconv oder pyodconverter um das ODT in ein endgültiges PDF umzuwandeln.

unoconv -f pdf -o final.pdf template.odt

Dies erfordert natürlich ein komplettes OpenOffice Setup (UNO und Writer) auf dem Webserver. Und natürlich würde nicht jeder Webhoster damit gehen! Haha. Selbst wenn es bei jedem Debian- oder Fedora-Setup einfach ist. Die Ausführungsgeschwindigkeit wäre wahrscheinlich auch nicht herausragend. Aber dann könnte es der sauberste Ansatz sein, da OOo beide Formate viel besser beherrscht als jede PHP-Klasse jemals könnte.


Wenn Sie einen externen Dienst nutzen möchten, könnte PDF Otter Ihr Problem lösen. Es gibt einen kostenlosen Plan, für den Sie sich anmelden und sofort in Ihre Anwendung integrieren können.

Zusätzliche Vorteile bei der Verwendung von PDF Otter umfassen weniger Abhängigkeiten in Ihrer Anwendung und eine freundlichere Erfahrung beim Auswählen der Felder, die Sie ausfüllen müssen (Ich habe manuelle Trial-and-Error verwendet, um die Positionen von Feldern in der Vergangenheit zu erhalten, und es war zeitaufwendig ).


Pekka,

Ich habe mir das vorher angeschaut, ich denke, Sie können pdftk (ein Befehlszeilendienstprogramm) verwenden, um ein PDF-Formular mit FDF / XFDF-Datendateien auszufüllen, die Sie einfach in PHP generieren können. Das war die beste Option, die ich bisher gesehen habe, obwohl es vielleicht eine native Bibliothek gibt.

pdftk ist im Allgemeinen ziemlich nützlich, lohnt sich anzuschauen.

Update: Schauen Sie hier: http://php.net/manual/en/book.fdf.php


Dies entspricht nicht Ihrem "no binary" -Mandat , aber PDFlib hat ein schönes Templating-System mit "blocks", das sind PDFlib-spezifische Metadaten, die Sie mit einem Acrobat-Plugin in ein PDF "zeichnen" können und dann zur Laufzeit programmatisch ausfüllen mit einem einzigen Funktionsaufruf pro Block. Die Blöcke können Text sein (mit pseudohtml für einfache Textformatierung von Schriftart, -größe und -farbe), Bilder (fast alles, was in einer PDF angezeigt werden kann) und PDFs selbst, sodass Sie ganze andere Dokumente oder Schnipsel einbetten können von Dokumenten in einem Block.

Es kann dies von einer bereits bestehenden PDF (laden Sie es, fügen Sie Inhalt / füllen Sie Block / etc .., Ausgabe), oder erstellen Sie eine neue PDF von Grund auf (ernsthaft schmerzhaft, um programmatisch zu tun, aber möglich).

Ich habe die Blöcke erfolgreich verwendet, um ein einfaches Templating-System für einen Client zu erstellen, wo sie Blöcke in ein Dokument mit eingebetteten kleinen Bits von Metadaten zeichnen konnten, das dann serverseitig analysiert wurde, um ein Formular zu erzeugen, um die Eingabe von Daten anzufordern diese Blöcke zur Dokumentgenerierungszeit.


Haben Sie darüber nachgedacht, etwas wie XSL: Formatieren von Objekten (XSL: FO) zu verwenden? Im Grunde handelt es sich um XML-Dokumente, die verarbeitet und in PDFs umgewandelt werden. String-oder besser, DOM-Ersatz in diesem sollte ziemlich einfach sein. Es unterstützt das Einbetten von Bildern, Links, Anmerkungen usw.

Es ist nicht PHP, aber es gibt eine Reihe von PHP-Wrappern für ihn zusammen mit Möglichkeiten, es über exec, etc. zu verwenden. Nicht ideal, aber es kümmert sich um die Vorlage Teil vollständig. Für weitere Informationen: http://techportal.inviqa.com/2009/12/16/transforming-xml-with-php-and-xsl/

Es gibt eine Implementierung als Apache-Projekt - http://xmlgraphics.apache.org/fop/


Spät, aber Sie können OpenSource Vorlagen-Designer https://github.com/applicius/dhek/releases , um PKassen / Bereiche über alle vorhandenen PDFs zu definieren, diese dann in PHP (als JSON-Format) zu laden und entsprechend auf das Original-PDF zu schreiben mit fpdf lib, um benutzerdefinierte PDF mit dynamischen Daten zu erstellen.


Ich werde diese neue Antwort hinzufügen, da die FDF-PHP-Erweiterung jetzt tot ist.

Ich habe gerade diese Anweisungen befolgt und am Ende ein Perl-Skript und dann den Befehl pdftk ausgeführt

Ich bin mir ziemlich bewusst, dass es weit davon entfernt ist, eine echte PHP-Lösung zu sein, aber es ist zuverlässig und ziemlich einfach auf jeder * nix-Plattform zu implementieren.

Die dort beschriebenen Tools sind auch auf Debian verfügbar, nur für den Fall, dass Sie sich fragen.


PDFlib ist nett, und Ihr geteilter Host könnte es bereits haben. Ich konnte mit PDFlib Dinge wie diese http://www.housejockey.com/flyers/12/80/MyListing.pdf ziemlich einfach erreichen, aber die grundlegende Technik ist der Drop-In-Absatztext ... den du gesagt hast nicht gut.

Ich habe auch mit abcPDF für ASP / ASP.NET gearbeitet und festgestellt, dass es ziemlich gut ist, um in PDFs zu stochern, aber auch nicht dafür gedacht, innerhalb existierender Textbereiche herumzugrabeln.

Die Arbeit mit robusten Vorlagen und Platzhaltern ist ein Komplexitätssprung über Drop-In-Inhalten. Ein Reflow eines bestehenden Textes in einer PDF ist in der Regel nicht möglich. Es erfordert eine zusätzliche Dokumentenstruktur, was teure Softwarepakete für variable Daten, wie XMPie und Creo, ermöglichen sollen ...

PHPDOCX fängt an, wirklich gut zu klingen! Viel Glück.


fpdf und es gibt noch eine Erweiterung darüber, an die ich mich nicht erinnern kann, die es ermöglicht, Vorlagen zu importieren


Obwohl nicht genau das, was Sie gefragt haben, können Sie es in zwei Schritten machen: Verwenden Sie ein PHP-Templating-System ( dwoo , dwoo ), um HTML-Seite zu generieren und dann mit Tools wie Html2Pdf in PDF zu konvertieren. Ich verwende es, und die Ergebnisse sind gut (keine Probleme mit dem Seitenlayout usw.)

Natürlich hängt es von Ihren Eingabedokumenten (können Sie HTML anstelle von PDF / ODT als Quelle verwenden) und Komplexität des Layouts von diesen ab.


nicht gesetzt, ändern Sie den Index nicht, aber array_splice tut dies

$arrayName = array( '1' => 'somevalue',
                        '2' => 'somevalue1',
                        '3' => 'somevalue3',
                        500 => 'somevalue500',
                             );


    echo $arrayName['500']; 
    //somevalue500
    array_splice($arrayName, 1,2);

    print_r( $arrayName );
    //Array ( [0] => somevalue [1] => somevalue500 )



    $arrayName = array( '1' => 'somevalue',
                        '2' => 'somevalue1',
                        '3' => 'somevalue3',
                        500 => 'somevalue500',
                             );


    echo $arrayName['500']; 
    //somevalue500
    unset($arrayName[1]);

    print_r( $arrayName );
    //Array ( [0] => somevalue [1] => somevalue500 )




php pdf odt