script - php pdf library




Konvertieren von HTML+CSS in PDF mit PHP? (20)

Ok, ich haue jetzt meinen Kopf gegen eine Wand mit diesem.

Ich habe ein HTML-Dokument (nicht XHTML), das in Firefox 3 und IE 7 gut dargestellt wird. Es verwendet ziemlich einfaches CSS, um es zu formatieren und in HTML gut zu rendern.

Ich bin jetzt nach einer Möglichkeit, es in PDF zu konvertieren. Ich habe versucht:

  • DOMPDF : Es hatte große Probleme mit Tabellen. Ich habe meine großen verschachtelten Tabellen ausgeklammert und es hat geholfen (bevor es nur bis zu 128M Speicher verbraucht hat und dann gestorben ist - das ist meine Grenze für Speicher in php.ini), aber es macht eine komplette Unordnung der Tabellen und scheint nicht zu kommen Bilder. Die Tabellen waren nur Grundkenntnisse mit einigen Randstilen, um an verschiedenen Stellen Linien hinzuzufügen.
  • HTML2PDF und HTML2PS : Damit hatte ich eigentlich mehr Glück. Einige der Bilder wurden gerendert (alle Bilder sind Google-Chart-URLs) und die Tabellenformatierung war viel besser, aber es schien ein komplexes Problem zu haben, das ich noch nicht herausgefunden hatte und das mit unbekannten node_type () - Fehlern endete. Ich bin mir nicht sicher, wo ich von hier aus hingehen soll. und
  • Htmldoc : Das scheint auf Basic HTML gut zu funktionieren, hat aber fast keine Unterstützung für CSS, also muss man alles in HTML machen (ich wusste nicht, dass es 2001 in Htmldoc-Land war), also ist es für mich nutzlos.

Ich habe eine Windows-App namens Html2Pdf Pilot ausprobiert, die eigentlich einen ziemlich guten Job gemacht hat, aber ich brauche etwas, das zumindest auf Linux läuft und idealerweise auf Wunsch über PHP auf dem Webserver läuft.

Ich kann wirklich nicht glauben, dass ich so fest stecke. Fehle ich etwas?


1) benutze MPDF !

a) extrahieren Sie in yourfolder

b) Erstellen Sie file.php in yourfolder und fügen Sie folgenden Code ein:

<?php
include('../mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('<p style="color:red;">Hallo World<br/>Fisrt sentencee</p>');
$mpdf->Output();   exit;
 ?>

c) Öffnen Sie die Datei.php in Ihrem Browser




2) Verwenden Sie pdfToHtml !

1) extrahieren Sie pdftohtml.exe in Ihren Stammordner:

2) in diesem Ordner, in der Datei anyfile.php , setzen Sie diesen Code (vorausgesetzt, es gibt auch ein Quellbeispiel.pdf):

<?php
$source="example.pdf";
$output_fold="FinalFolder";

    if (!file_exists($output_fold)) { mkdir($output_fold, 0777, true);}
$result= passthru("pdftohtml $source $output_fold/new_filename",$log);
//var_dump($result); var_dump($log);
?>

3) Geben Sie FinalFolder ein und es wird die konvertierten Dateien geben (so viele Seiten, wie das Quell-PDF hatte ..)


Web-API

Wenn es Leute gibt, die immer nach dieser Art von Sachen suchen, gibt es eine kostenlose Website, auf der Sie HTML-Code & Seiten in PDF konvertieren können. Es gibt auch eine (sehr kleine) API, mit der Sie eine PDF-Datei von der URL herunterladen können.

Überprüfen Sie es hier


Die HTML2PDF und HTML2PS , die ursprünglich im Eröffnungsbeitrag erwähnt wurden, sprachen über ein 2009-Paket mit diesem nun kaputten Link

Aber es gibt eine bessere HTML2PDF

Es basiert auf TCPDF, obwohl es teilweise in Französisch ist.

Sie können Tabellenkopfzeilen oder Fußzeilen verwenden, die auf den Seiten wiederholt werden und Seitenzahlen und Gesamtseiten aufweisen. Siehe seine Beispiele . Ich benutze es seit über drei Jahren und empfehle es.


Diese Frage ist schon ziemlich alt, aber ich habe noch niemanden gesehen, der CutyCapt also werde ich :)

CutyCapt

CutyCapt ist ein kleines plattformübergreifendes Befehlszeilendienstprogramm, mit dem WebKit eine Webseite in eine Vielzahl von Vektor- und Bitmapformaten wie SVG, PDF, PS, PNG, JPEG, TIFF, GIF und BMP rendern kann


Es wurde bereits erwähnt, aber ich möchte nur bestätigen, dass mpdf der einfachste, leistungsstärkste und am meisten kostenlose HTML-to-PDF-Konverter ist. Der Himmel ist wirklich die Grenze. Sie können sogar PDFs dynamischer, benutzergenerierter Daten generieren.

Zum Beispiel wollte ein Kunde ein CMS-System, damit er die Titelliste der Musik aktualisieren konnte, die er in seinem Club spielte. Das war kein Problem, aber er wollte auch, dass Benutzer ein .pdf der Wiedergabeliste herunterladen können, und so musste diese herunterladbare pdf von den cms auch aktualisiert werden. Dank mpdf, mit einigen einfachen Schleifen und eingestreuten Variablen könnte ich genau das machen. Etwas, von dem ich dachte, dass es mich Wochen dauern würde, dauerte buchstäblich Minuten.

Seite herunterladen .

Großer article , der mir geholfen hat, anzufangen.


Feines Rendering bedeutet nichts. Bestätigt es?

Alle Browser tun ihr Bestes, um nur etwas auf dem Bildschirm zu zeigen, egal wie schlecht die Eingabe ist. Und natürlich machen sie das nicht. Wenn Sie dasselbe Rendering wie FireFox verwenden möchten, können Sie dessen Rendering-Engine verwenden. Es gibt pdf-Generatoren dafür. Es ist jedoch eine Menge Arbeit.


Ich empfehle DocRaptor (die PrinceXML als "Engine" verwendet)


Ich empfehle TCPDF oder DOMPDF, ist diese Reihenfolge


Ich habe viele verschiedene Bibliotheken für PHP ausprobiert. Alle aufgelisteten habe ich ausprobiert. Meiner Meinung TCPDF ist die TCPDF Bibliothek die beste Kompromissleistung / Benutzerfreundlichkeit. Es ist sehr einfach zu installieren und zu verwenden, auch gute Leistung in kleinen mittleren Anwendung. Wenn Sie eine hohe Leistung und ein sehr großes PDF-Dokument benötigen, verwenden Sie das Zend_PDF Modul, aber machen Sie sich bereit, hart zu Zend_PDF !


Ich verwende fpdf, um PDF-Dateien mit PHP zu erstellen. Es funktioniert für mich bisher gut, einfache Ausgaben zu produzieren.


Muss die Umwandlung von HTML in PDF wirklich serverseitig mit PHP erfolgen?

Ich bin gerade auf jsPDF , eine clientseitige Lösung mit HTML5 / JavaScript. Der MIT-lizenzierte Code ist ebenfalls auf GitHub .


Nach einiger Untersuchung und allgemeinem Haarziehen scheint die Lösung HTML2PDF . DOMPDF hat einen schrecklichen Job mit Tabellen, Rahmen und sogar mäßig komplexem Layout gemacht und htmldoc scheint einigermaßen robust zu sein, ist aber fast komplett CSS-ignorant und ich möchte nicht einfach nur für dieses Programm HTML-Layout ohne CSS machen.

HTML2PDF sah am vielversprechendsten aus, aber ich hatte diesen seltsamen Fehler über Null-Referenzargumente für node_type. Ich habe endlich die Lösung dafür gefunden. Im Grunde genommen funktionierte PHP 5.1.x gut mit regex ersetzt (preg_replace_ *) für Strings jeder Größe. PHP 5.2.1 führte eine php.ini config Direktive namens pcre.backtrack_limit ein . Was dieser Config-Parameter bewirkt, ist die String-Länge, für die der Abgleich durchgeführt wird. Warum das eingeführt wurde, weiß ich nicht. Der Standardwert wurde als 100.000 ausgewählt. Warum so ein niedriger Wert? Nochmal keine Ahnung.

Dafür wurde ein Fehler gegen PHP 5.2.1 gemeldet , der noch fast zwei Jahre später geöffnet ist.

Das Erschreckende daran ist, dass wenn das Limit überschritten wird, der Austausch nur im Stillen fehlschlägt . Zumindest wenn ein Fehler gemeldet und protokolliert wurde, haben Sie einen Hinweis darauf, was passiert ist, warum und was geändert werden muss, um es zu beheben. Aber nein.

Also habe ich eine 70k HTML-Datei, um PDF zu machen. Es erfordert die folgenden php.ini-Einstellungen:

  • pcre.backtrack_limit = 2000000; # wahrscheinlich mehr als ich brauche, aber das ist in Ordnung
  • memory_limit = 1024M; # ja, ein Gigabyte ; und
  • max_execution_time = 600; # ja, 10 Minuten .

Jetzt hat der scharfsinnige Leser vielleicht bemerkt, dass meine HTML-Datei kleiner als 100k ist. Der einzige Grund, warum ich erraten kann, warum ich dieses Problem habe, ist, dass html2pdf als Teil des Prozesses eine Konvertierung in xhtml durchführt. Vielleicht hat mich das überfordert (obwohl fast 50% Bloat seltsam scheint). Was auch immer der Fall war, das obige funktionierte.

Jetzt ist html2pdf eine Ressource Schwein. Meine 70k-Datei dauert ungefähr 5 Minuten und mindestens 500-600M RAM, um eine 35-seitige PDF-Datei zu erstellen. Nicht schnell genug (bei weitem) für einen Echtzeit-Download leider und die Speicherauslastung legt das Speichernutzung Verhältnis in der Größenordnung von 1000 zu 1 (600M RAM für eine 70k-Datei), was völlig lächerlich ist.

Leider ist das das Beste, was ich mir ausgedacht habe.


Nur um den Thread zu stoßen, habe ich DOMPDF ausprobiert und es hat perfekt funktioniert. Ich habe DIV und andere Elemente auf Blockebene benutzt, um alles zu positionieren, habe es streng CSS 2.1 behalten und es sehr schön gespielt.


Obwohl bereits viele Lösungen angeboten werden, empfehle ich folgende zwei:

  1. HTM2PDF - bietet eine API zum Konvertieren von HTML in PDF und hat auch ein PHP SDK, das es sehr einfach in PHP zu implementieren; Es bietet eine Auswahl an Serverstandorten in Europa, Asien und den USA
  2. PDFmyURL - bietet eine API, die auch URL und HTML zu PDF verarbeitet, mit ungefähr der gleichen Funktionalität wie HTM2PDF, aber arbeitet in einer lastbalancierten Landschaft und ist schon ein wenig länger

Was bei diesen beiden APIs von allen oben genannten Lösungen anders ist, ist, dass neben der Umwandlung von HTML in PDF mit CSS und JavaScript auch PDF-Rechteverwaltung, Wasserzeichenmarkierung und Verschlüsselung angeboten werden. Daher ist es eine All-in-One-Lösung für diejenigen, die auf den Boden gehen wollen.

Haftungsausschluss: Ich arbeite für Kaiomi, eine Firma, die beide Websites betreibt.


Versuchen Sie, sich die neueste Version von dompdf zu schnappen - ich benutzte eine ältere Version, die ein schrecklicher Ressourcenfresser war und ewig brauchte, um meine PDF zu rendern. Nach einer Nacht von here .

Es dauerte nur ein paar Sekunden, um das PDF zu generieren - UND es war genauso schön gerendert wie mit PrinceXML / Docraptor . Es scheint so, als ob sie den Dompdf- Code seit meiner letzten Benutzung ernsthaft optimiert haben!


Vielleicht könnten Sie versuchen, Tidy zu verwenden, bevor Sie die Datei an den Konverter übergeben. Wenn einer der Renderer ein HTML-Problem (wie ein nicht geschlossenes Tag) erstickt, hilft es vielleicht.


Wenn Sie Zugriff auf die Befehlszeile haben, können Sie mit PhantomJS die PDF aus einer URL (remote oder lokal) erstellen.

Es funktioniert wirklich gut und ist eine kostenlose Lösung.

Werfen Sie einen Blick auf dieses github.com/ariya/phantomjs/blob/master/examples/rasterize.js das für genau dieses Problem erstellt wurde.


nicht PHP , sondern eine Java- Bibliothek , die das Ding macht:

Flying Saucer verwendet XML oder XHTML und wendet CSS 2.1-konforme Stylesheets darauf an, um es in PDF zu rendern

Es ist von PHP über system() oder einen ähnlichen Aufruf verwendbar. Obwohl es eine XML -Wohlgeformtheit der input .


TCPDF . Es verfügt über einige HTML-zu-PDF-Funktionen, die für das, was Sie benötigen, ausreichen könnten. Es ist auch kostenlos!


Gute Nachrichten! Snappy !!

Snappy ist eine sehr einfache Open-Source-PHP5-Bibliothek, die Thumbnails, Snapshots oder PDF-Generierung von einer URL- oder HTML-Seite ermöglicht. Und ... verwendet das ausgezeichnete webkit-basierte wkhtmltopdf

Genießen! ^ _ ^





pdf-generation