Ich habe ein HTML-Dokument (nicht XHTML), das in Firefox 3 und IE 7 gut gerendert wird. Es verwendet ziemlich einfaches CSS, um es zu formatieren, und es wird in HTML gut gerendert.
Ich bin jetzt nach einer Möglichkeit, es in PDF zu konvertieren. Ich habe versucht:
- DOMPDF : Es gab große Probleme mit Tabellen. Ich habe meine großen verschachtelten Tabellen herausgerechnet und es hat geholfen (bevor es nur bis zu 128 MB Speicher verbrauchte und dann starb - das ist meine Speicherbeschränkung in php.ini), aber es macht ein komplettes Durcheinander von Tabellen und scheint nicht zu bekommen Bilder. Die Tabellen waren nur grundlegende Dinge mit einigen Rahmenstilen, um an verschiedenen Stellen einige Linien hinzuzufügen.
- HTML2PDF und HTML2PS : Ich hatte damit tatsächlich mehr Glück. Es wurden einige der Bilder gerendert (alle Bilder sind Google Chart-URLs) und die Tabellenformatierung war viel besser, aber es schien ein Komplexitätsproblem zu geben, das ich noch nicht herausgefunden habe und das immer wieder mit unbekannten node_type () -Fehlern starb. Ich bin mir nicht sicher, wohin ich von hier aus gehen soll. und
- Htmldoc : Dies scheint in einfachem HTML gut zu funktionieren, hat aber fast keine Unterstützung für CSS, so dass Sie alles in HTML tun müssen (ich wusste nicht, dass es noch 2001 in Htmldoc-Land war ...), also ist es für mich nutzlos.
Ich habe eine Windows-App namens Html2Pdf Pilot ausprobiert, die eigentlich ziemlich gute Arbeit geleistet hat, aber ich brauche etwas, das mindestens unter Linux und idealerweise bei Bedarf über PHP auf dem Webserver ausgeführt wird.
Was fehlt mir oder wie kann ich dieses Problem beheben?
@import
,@media
und@screen
Regeln, und externe Stylesheets laden. Es wird auch mit allem geliefert, was für das Funktionieren erforderlich ist, obwohl Sie einige Dinge installieren können, um eine bessere Leistung als die Standardbibliotheken zu erzielen. code.google.com/p/dompdfchrome --headless --print-to-pdf="path/to/pdf" https://your_url
als das reichhaltigste, schnellste und einfachste HTML-Tool zur PDF-Generierung crbug.com/603559, da es die meisten HTML-Funktionen unterstützt, auf die sich Entwickler verlassen, und sich nicht wie die meisten anderen an komplexen Skripten orientiert Bibliotheken und Tools tun.Antworten:
Wichtig: Bitte beachten Sie, dass diese Antwort im Jahr 2009 verfasst wurde und möglicherweise 2019 nicht die kostengünstigste Lösung ist. Online-Alternativen sind heute besser als damals.
Hier sind einige Online-Dienste, die Sie verwenden können:
Schauen Sie sich PrinceXML an .
Es ist definitiv der beste HTML / CSS-PDF-Konverter, obwohl es nicht kostenlos ist (aber hey, Ihre Programmierung ist möglicherweise auch nicht kostenlos. Wenn Sie also 10 Stunden Arbeit sparen, sind Sie frei zu Hause (da Sie es auch müssen) Berücksichtigen Sie, dass Sie für alternative Lösungen einen dedizierten Server mit der richtigen Software einrichten müssen.
Oh ja, habe ich erwähnt, dass dies die erste (und wahrscheinlich einzige) HTML2PDF-Lösung ist, die ACID2 vollständig unterstützt ?
PrinceXML-Beispiele
quelle
Schau es dir an
wkhtmltopdf
. Es ist Open Source, basiert auf Webkit und ist kostenlos.Wir schrieben ein kleines Tutorial hier .
EDIT (2017):
Wenn ich heute etwas bauen würde, würde ich diesen Weg nicht mehr gehen.
Würde aber stattdessen http://pdfkit.org/ verwenden.
Wahrscheinlich werden alle Knoten-Abhängigkeiten entfernt, um im Browser ausgeführt zu werden.
quelle
Nach einigen Nachforschungen und allgemeinem Haarziehen scheint die Lösung HTML2PDF zu sein . DOMPDF hat schreckliche Arbeit mit Tabellen, Rahmen und sogar mäßig komplexem Layout geleistet, und htmldoc scheint einigermaßen robust zu sein, ist jedoch fast völlig CSS-ignorant, und ich möchte nicht nur für dieses Programm wieder HTML-Layout ohne CSS erstellen .
HTML2PDF sah am vielversprechendsten aus, aber ich hatte immer wieder diesen seltsamen Fehler bezüglich Nullreferenzargumenten für node_type. Ich habe endlich die Lösung dafür gefunden. Grundsätzlich funktionierte PHP 5.1.x gut mit Regex-Ersetzungen (preg_replace_ *) für Zeichenfolgen beliebiger Größe. PHP 5.2.1 führte eine php.ini-Konfigurationsanweisung namens pcre.backtrack_limit ein . Dieser Konfigurationsparameter begrenzt die Zeichenfolgenlänge, für die der Abgleich durchgeführt wird. Warum dies eingeführt wurde, weiß ich nicht. Der Standardwert wurde als 100.000 gewählt. Warum so ein niedriger Wert? Wieder keine Ahnung.
Hierfür wurde ein Fehler gegen PHP 5.2.1 ausgelöst , der fast zwei Jahre später noch offen ist .
Das Schreckliche daran ist, dass das Ersetzen nur stillschweigend fehlschlägt , wenn das Limit überschritten wird . Zumindest wenn ein Fehler ausgelöst und protokolliert wurde, haben Sie einen Hinweis darauf, was passiert ist, warum und was geändert werden muss, um ihn zu beheben. Aber nein.
Ich habe also eine 70k HTML-Datei, die ich in PDF umwandeln kann. Es erfordert die folgenden php.ini-Einstellungen:
Jetzt hat der kluge Leser vielleicht bemerkt, dass meine HTML-Datei kleiner als 100.000 ist. Der einzige Grund, warum ich dieses Problem feststellen kann, ist, dass html2pdf als Teil des Prozesses eine Konvertierung in xhtml durchführt. Vielleicht hat mich das übernommen (obwohl fast 50% Aufblähen seltsam erscheint). Wie auch immer, das oben genannte hat funktioniert.
Jetzt ist html2pdf ein Ressourcenfresser. Meine 70k-Datei benötigt ungefähr 5 Minuten und mindestens 500-600 MB RAM, um eine 35-seitige PDF-Datei zu erstellen. Leider (bei weitem) nicht schnell genug für einen Echtzeit-Download, und aufgrund der Speichernutzung liegt die Speicherauslastung in der Größenordnung von 1000 zu 1 (600 MB RAM für eine 70-KB-Datei), was absolut lächerlich ist.
Leider ist das das Beste, was ich mir ausgedacht habe.
quelle
Warum probierst du nicht mPDF Version 2.0 aus ? Ich habe es zum Erstellen eines PDF-Dokuments verwendet. Es funktioniert gut.
Inzwischen ist mPDF auf Version 5.7 und wird im Gegensatz zu HTML2PS / HTML2PDF aktiv gepflegt
Beachten Sie jedoch, dass die Dokumentation sehr schwer zu handhaben sein kann. Schauen Sie sich zum Beispiel diese Seite an: https://mpdf.github.io/ .
Mit dieser Bibliothek können sehr grundlegende Aufgaben rund um HTML bis PDF ausgeführt werden. Komplexere Aufgaben erfordern jedoch einige Zeit, um die Dokumentation zu lesen und zu "verstehen".
quelle
mPDF error: IMAGE Error (http://www.example.com/folder/image.jpg): Error parsing image file - image type not recognised, and not supported by GD imagecreate
1) Verwenden Sie MPDF !
a) extrahieren in
yourfolder
b) Erstellen file.php in
yourfolder
und Einsatz solcher Code:c) Öffnen Sie die Datei file.php in Ihrem Browser
2) Verwenden Sie pdfToHtml !
1) extrahieren Sie pdftohtml.exe in Ihren Stammordner:
2) Fügen Sie in diesen Ordner in der Datei anyfile.php diesen Code ein (vorausgesetzt, es gibt auch eine Quelle example.pdf):
3) Geben Sie FinalFolder ein und es werden die konvertierten Dateien angezeigt (so viele Seiten, wie das Quell-PDF hatte.)
quelle
Auschecken TCPDF . Es verfügt über einige HTML-zu-PDF-Funktionen, die möglicherweise für Ihre Anforderungen ausreichen. Es ist auch kostenlos!
quelle
Nur um den Thread zu stoßen, habe ich DOMPDF ausprobiert und es hat perfekt funktioniert. Ich habe
DIV
und andere Elemente auf Blockebene verwendet, um alles zu positionieren. Ich habe es streng CSS 2.1 beibehalten und es hat sehr gut gespielt.quelle
Ich schlage DocRaptor vor (der
PrinceXML
als "Engine" verwendet wird)quelle
Es wurde bereits erwähnt, aber ich möchte nur bestätigen, dass mpdf der einfachste, leistungsstärkste und kostenlosste HTML-zu-PDF-Konverter ist. Der Himmel ist wirklich die Grenze. Sie können sogar PDF-Dateien mit dynamischen, benutzergenerierten Daten erstellen.
Zum Beispiel wollte ein Kunde ein CMS-System, damit er die Trackliste der Musik, die er in seinem Club gespielt hat, aktualisieren kann. Das war kein Problem, aber er wollte auch, dass Benutzer eine PDF-Datei der Wiedergabeliste herunterladen können. Daher musste diese herunterladbare PDF-Datei auch von der CMS aktualisiert werden. Dank mpdf konnte ich mit einigen einfachen Schleifen und eingestreuten Variablen genau das tun. Etwas, von dem ich dachte, es würde Wochen dauern, dauerte buchstäblich Minuten.
Toller Artikel , der mir den Einstieg erleichtert hat.
quelle
Gute Nachrichten! Bissig !!
Snappy ist eine sehr einfache Open-Source-PHP5-Bibliothek, die die Erstellung von Miniaturansichten, Schnappschüssen oder PDFs von einer URL oder einer HTML-Seite ermöglicht. Und ... es verwendet das exzellente Webkit-basierte wkhtmltopdf
Genießen! ^ _ ^
quelle
Wenn Sie eine perfekte Konverterbibliothek für XHTML + CSS in PDF finden möchten, vergessen Sie sie. Es ist alles andere als möglich. Weil es so ist, als würde man einen perfekten Browser finden (XHTML + CSS-Rendering-Engine). Haben wir einen IE oder FF?
Ich hatte einige Erfolge mit DOMPDF. Die Sache ist, dass Sie Ihren HTML + CSS-Code ändern müssen, um der Funktionsweise der Bibliothek zu entsprechen. Davon abgesehen habe ich ziemlich gute Ergebnisse.
Siehe unten:
Original HTML
Konvertieren von HTML in PDF
quelle
Das HTML2PDF und HTML2PS , die ursprünglich im Eröffnungsbeitrag erwähnt wurden, sprachen über ein 2009-Paket mit diesem Link
Aber es gibt ein besseres HTML2PDF
Es basiert auf TCPDF, obwohl es teilweise auf Französisch ist.
Sie können Tabellenkopf- oder -fußzeilen haben, die sich auf den Seiten wiederholen und Seitenzahlen und Gesamtseiten haben. Siehe seine Beispiele . Ich benutze es seit über drei Jahren und empfehle es.
quelle
Ich verwende fpdf , um PDF-Dateien mit PHP zu erstellen. Bisher funktioniert es für mich gut, einfache Ausgaben zu erstellen.
quelle
Es gibt ein Tutorial zu Zends Devzone zum Generieren von PDF aus PHP ( Teil 1 , Teil 2 ) ohne externe Bibliotheken. Ich habe diese Art von Lösung nie implementiert, aber da alles PHP ist, ist es möglicherweise flexibler, sie zu implementieren und zu debuggen.
quelle
Versuchen Sie es mit dem neuesten nächtlichen Dompdf- Build - ich habe eine ältere Version verwendet, die ein schreckliches Ressourcenfresser war, und es hat ewig gedauert , mein PDF zu rendern. Nach einer Nacht von hier .
Das Generieren des PDFs dauerte nur wenige Sekunden - UND es wurde genauso gut gerendert wie mit PrinceXML / Docraptor . Scheint, als hätten sie den Dompdf- Code ernsthaft optimiert , seit ich ihn das letzte Mal benutzt habe!
quelle
Darryl Heins obige Erwähnung von TCPDF ist wahrscheinlich eine großartige Idee. Nicola Asunis Code ist ziemlich praktisch und mächtig. Der einzige Killer ist, wenn Sie jemals vorhaben, PDF-Dateien mit Ihrem generierten PDF zusammenzuführen, verfügt es nicht über diese Funktionen. Sie müssten das PDF erstellen und es dann mit PDFTK von Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/) zusammenführen.
quelle
In Bezug auf die Kosten kann die Verwendung eines Webdienstes (API) in vielen Fällen der sinnvollere Ansatz sein. Durch das Auslagern dieses Prozesses entlasten Sie außerdem Ihre eigene Infrastruktur / Ihr eigenes Backend und stellen - sofern Sie einen seriösen Service nutzen - die Kompatibilität mit der Anpassung von Webstandards, Verfügbarkeit, kurzen Verarbeitungszeiten und schneller Bereitstellung von Inhalten sicher.
Ich habe einige Recherchen zu den meisten derzeit auf dem Markt befindlichen Webdiensten durchgeführt. Nachfolgend finden Sie die APIs, die meiner Meinung nach in diesem Thread erwähnt werden sollten, in einer Reihenfolge, die auf dem Preis-Leistungs-Verhältnis basiert. Alle bieten vorkomponierte PHP-Klassen und -Pakete an.
Qualität:
Mit der hochwertigen Engine
PrinceXML
als Rückgrat bietet DocRaptor eindeutig die beste PDF-Qualität und liefert hochglanzpolierte und gut konvertierte PDF-Dokumente. Der pdflayer-API- Dienst kommt hier jedoch ziemlich nahe. Pdfcrowd punktet nicht unbedingt mit der Qualität, sondern mit der Verarbeitungsgeschwindigkeit.Kosten:
pdflayer.com - Wie oben angegeben, ist pdflayer.com die kostengünstigste Option. Es bietet ein völlig kostenloses Abonnement für 100 monatliche PDFs und Premium-Abonnements zwischen 9,99 und 119,99 US-Dollar. Der Preis für 10.000 monatliche PDF-Dokumente beträgt 39,99 USD.
docraptor.com - Bietet eine kostenlose Testphase von 7 Tagen. Premium-Abonnements kosten zwischen 15 und 2250 US-Dollar. Der Preis für 10.000 monatliche PDF-Dokumente beträgt ~ 300,00 USD.
pdfcrowd.com - Einmal 100 PDFs kostenlos anbieten . Premium-Abonnements kosten zwischen 9 und 89 US-Dollar. Der Preis für 10.000 monatliche PDF-Dokumente beträgt ~ 49,00 USD.
Ich habe alle drei verwendet und dieser Text soll jedem helfen, sich zu entscheiden, ohne für alle bezahlen zu müssen. Dieser Text wurde nicht geschrieben, um ein Produkt zu unterstützen, und ich bin mit keinem der Produkte verbunden.
quelle
Wenn Sie Zugriff auf die Befehlszeile haben, können Sie PhantomJS verwenden , um das
PDF
von einemURL
(Remote- oder lokalen) zu erstellen .Es funktioniert sehr gut und ist eine kostenlose Lösung.
Schauen Sie sich dieses Beispielskript an, das genau für dieses Problem erstellt wurde.
quelle
Diese Frage ist schon ziemlich alt, aber ich habe noch niemanden gesehen, der CutyCapt erwähnt, also werde ich :)
CutyCapt
quelle
Ich empfehle TCPDF oder DOMPDF in dieser Reihenfolge.
quelle
Ich denke nicht, dass eine PHP-Klasse die beste ist, um eine xHtml-Seite mit CSS zu rendern.
Was passiert, wenn eine neue CSS-Regel herauskommt? (bald CSS 3.0 ...)
Der beste Weg, eine HTML-Seite zu rendern, ist offensichtlich ein Browser. Firefox 3.0 kann nativ im PDF-Format "drucken". Torisugary hat eine Erweiterung (Befehlszeilendruck) entwickelt, um es zu verwenden. Hier finden Sie es.
Wie auch immer, es gibt immer noch viele Probleme mit Firefox, nur als PDF-Konverter ...
Im Moment denke ich, dass wkhtmltopdf das Beste ist (das wird vom Safari-Browser verwendet), schnell, schnell, großartig. Ja, OpenSource auch ... Schauen Sie mal rein
quelle
Ich habe eine öffentliche API entwickelt, um PDF-Dateien von Webseiten zu erstellen. Es hat eine schöne PHP-Client-Klasse, die es super einfach zu bedienen macht. Es verwendet wkhtmltopdf, um das PDF in der Cloud zu rendern.
Keine Notwendigkeit für etwas Besonderes im HTML. Keine Notwendigkeit für absolute URLs in images / css / js-Links. Funktioniert auch auf localhost (dev machine).
Derzeit verfügt der Dienst über Endpunkte in 4 Azure-Regionen: US-Ost, US-West, EU-Nord, Südostasien.
Es ist schnell, da es ein proprietäres Protokoll verwendet, um den Inhalt der Webseite zur Konvertierung in PDF an die API zu senden.
Es ist zuverlässig, da alle Endpunkte lastausgeglichen sind.
Kostenloses Konto zum Testen oder zur geringen Nutzung verfügbar. Details auf der Website:
https://rotativahq.com
quelle
Vielleicht können Sie versuchen, Tidy zu verwenden, bevor Sie die Datei an den Konverter übergeben. Wenn einer der Renderer an einem HTML-Problem (wie einem nicht geschlossenen Tag) erstickt, kann dies hilfreich sein.
quelle
Feines Rendern hat nichts zu bedeuten. Validiert es?
Alle Browser tun ihr Bestes, um nur etwas auf dem Bildschirm anzuzeigen, egal wie schlecht die Eingabe ist. Und natürlich machen sie nicht dasselbe. Wenn Sie dasselbe Rendering wie FireFox wünschen, können Sie dessen Rendering-Engine verwenden. Es gibt PDF-Generatoren dafür. Es ist jedoch eine Menge Arbeit.
quelle
Obwohl bereits viele Lösungen angeboten werden, empfehle ich die folgenden zwei:
Das Besondere an diesen beiden APIs von allen zuvor genannten Lösungen ist, dass sie neben der Konvertierung von HTML in PDF mit CSS und JavaScript auch die Verwaltung von PDF-Rechten, Wasserzeichen und Verschlüsselung bieten. Daher ist es eine All-in-One-Lösung für diejenigen, die sofort loslegen möchten.
Haftungsausschluss: Ich arbeite für Kaiomi, ein Unternehmen, das beide Websites betreibt.
quelle
Ist die HTML zu PDF Konvertierung wirklich brauchen serverseitige Verwendung von PHP auftreten?
Ich bin gerade auf jsPDF gestoßen , eine clientseitige Lösung mit HTML5 / JavaScript. Der MIT-lizenzierte Code ist auch auf GitHub verfügbar .
quelle
TCPDF funktioniert einwandfrei, keine Abhängigkeiten, ist kostenlos und wird ständig behoben. Es hat eine angemessene Geschwindigkeit, wenn der bereitgestellte HTML / CSS-Inhalt gut formatiert ist. Normalerweise generiere ich aus 50 - 300 kB HTML-Eingabe (einschließlich CSS) und erhalte eine PDF-Ausgabe innerhalb von 1-3 Sekunden mit 10 - 15 PDF-Seiten.
Ich empfehle dringend, die ordentliche Bibliothek als hübschen HTML-Formatierer zu verwenden, bevor Sie etwas an TCPDF senden.
quelle
Ich habe viele verschiedene Bibliotheken für PHP ausprobiert. Alle aufgelisteten habe ich ausprobiert. Meiner Meinung nach ist die TCPDF- Bibliothek die beste Kompromissleistung / Benutzerfreundlichkeit. Es ist sehr einfach zu installieren und zu verwenden, auch gute Leistung in kleinen mittleren Anwendungen. Wenn Sie ein leistungsstarkes und sehr großes PDF-Dokument benötigen, verwenden Sie das Zend_PDF- Modul, aber machen Sie sich bereit, hart zu codieren!
quelle
Web-API
Wenn es Leute gibt, die immer nach solchen Dingen suchen, gibt es eine kostenlose Website, auf der Sie HTML-Code und -Seiten in PDF konvertieren können. Es gibt auch eine (sehr kleine) API, mit der Sie PDF-Dateien von der URL abrufen können.
Überprüfen Sie es hier
quelle
nicht PHP , sondern eine Java- Bibliothek , die das macht:
Es kann von PHP über
system()
oder einen ähnlichen Anruf verwendet werden. Obwohl es XML -Wohlgeformtheit der erfordertinput
.quelle