Ich habe ein HTML-Dokument (nicht XHTML), das in Firefox 3 und IE 7 einwandfrei dargestellt wird. Es verwendet relativ einfaches CSS, um es zu formatieren, und es wird in HTML einwandfrei dargestellt.
Ich bin jetzt nach einer Möglichkeit, es in PDF umzuwandeln. Ich habe versucht:
Ich habe eine Windows-App namens Html2Pdf Pilot ausprobiert, die eigentlich ganz ordentliche Arbeit geleistet hat, aber ich brauche etwas, das mindestens unter Linux läuft und im Idealfall auf Abruf über PHP auf dem Webserver läuft.
Was fehle ich oder wie kann ich dieses Problem beheben?
Wichtig: Bitte beachten Sie, dass diese Antwort im Jahr 2009 verfasst wurde und möglicherweise nicht die kostengünstigste Lösung heute im Jahr 2019 ist. Online-Alternativen sind heute besser unter das als sie damals waren.
Hier sind einige Online-Dienste, die Sie verwenden können:
Schauen Sie sich PrinceXML an.
Es ist definitiv der beste Konverter von HTML/CSS in PDF, obwohl er nicht kostenlos ist (Da Sie auch berücksichtigen müssen, dass für die alternativen Lösungen ein dedizierter Server mit der richtigen Software eingerichtet werden muss)
Oh ja, habe ich schon erwähnt, dass dies die erste (und wahrscheinlich einzige) HTML2PDF-Lösung ist, die voll funktionsfähig ist ACID2 ?
Schauen Sie sich wkhtmltopdf
an. Es ist Open Source, basiert auf Webkit und ist kostenlos.
Wir haben ein kleines Tutorial geschrieben hier .
EDIT (2017):
Wenn es heute etwas bauen sollte, würde ich diesen Weg nicht mehr gehen.
Würde aber stattdessen http://pdfkit.org/ verwenden.
Wahrscheinlich werden alle Abhängigkeiten des Knotens entfernt, um im Browser ausgeführt zu werden.
Nach einigen Nachforschungen und allgemeinem Haarziehen scheint die Lösung HTML2PDF zu sein. 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 gehen Zurück zu HTML-Layout ohne CSS nur für dieses Programm.
HTML2PDF sah am vielversprechendsten aus, aber ich hatte weiterhin diesen seltsamen Fehler bezüglich der Nullreferenzargumente für node_type. Ich habe endlich die Lösung dafür gefunden. Grundsätzlich hat PHP 5.1.x mit Regex-Ersetzungen (preg_replace_ *) für Zeichenfolgen beliebiger Größe problemlos funktioniert. PHP 5.2.1 hat eine php.ini config Direktive namens pcre.backtrack_limit eingeführt. Dieser Konfigurationsparameter begrenzt die Stringlänge, für die ein 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.
Ein Bug wurde hierfür gegen PHP 5.2.1 ausgelöst , der fast zwei Jahre später noch offen ist .
Das Schreckliche daran ist, dass beim Überschreiten des Grenzwerts das Ersetzen nur im Hintergrund fehlschlägt . Zumindest wenn ein Fehler aufgetreten und protokolliert worden wäre, hätten 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 eine PDF-Datei umwandeln kann. Es erfordert die folgenden php.ini-Einstellungen:
Jetzt kann der kluge Leser bemerkt haben, dass meine HTML-Datei kleiner als 100 KB ist. Der einzige Grund, warum ich auf dieses Problem gestoßen bin, ist, dass html2pdf als Teil des Prozesses eine Konvertierung in xhtml durchführt. Vielleicht hat mich das überwältigt (obwohl fast 50% Aufblähen seltsam erscheint). Wie dem auch sei, 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 die Speichernutzung veranlasst das Speichernutzungsverhältnis in der Größenordnung von 1000 zu 1 (600 MB RAM für eine 70-KB-Datei) absolut lächerlich.
Leider ist das das Beste, was ich mir ausgedacht habe.
Warum versuchst du es nicht mit mPDF Version 2. ? Ich habe es verwendet, um PDF ein Dokument zu erstellen. Es funktioniert gut.
Mittlerweile ist mPDF in der Version 5.7 und wird im Gegensatz zu HTML2PS/HTML2PDF aktiv gepflegt
Bedenken Sie jedoch, dass die Dokumentation sehr schwer zu handhaben sein kann. Schauen Sie sich zum Beispiel diese Seite an: https://mpdf.github.io/ .
Sehr grundlegende Aufgaben rund um HTML bis PDF können mit dieser Bibliothek erledigt werden, aber komplexere Aufgaben werden einige Zeit in Anspruch nehmen, um die Dokumentation zu lesen und zu "verstehen".
a) extrahieren in yourfolder
b) erstelle file.php in yourfolder
und füge diesen 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) öffne file.php in deinem Browser
1) extrahieren Sie pdftohtml.exe in Ihren Root-Ordner:
2) In diesem Ordner in anyfile.php folgenden Code einfügen (vorausgesetzt, es gibt auch eine Quelldatei example.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 werden die konvertierten Dateien angezeigt (so viele Seiten, wie die Quelle PDF hatte ..)
Checkout TCPDF . Es verfügt über einige HTML- bis PDF -Funktionen, die möglicherweise ausreichen, um Ihre Anforderungen zu erfüllen. Es ist auch kostenlos!
Ich schlage vor DocRaptor (das PrinceXML
als "Motor" verwendet)
Ich habe DOMPDF ausprobiert und es hat perfekt funktioniert. Ich habe DIV
und andere Block-Level-Elemente verwendet, um alles zu positionieren. Ich habe es streng in CSS 2.1 gehalten und es hat sehr gut gespielt.
Es wurde bereits erwähnt, aber ich möchte nur bestätigen, dass mpdf der einfachste, leistungsstärkste und kostenlosste Konverter von HTML in PDF 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 Titelliste der Musik, die er in seinem Club spielte, aktualisieren konnte. Das war kein Problem, aber er wollte auch, dass Benutzer ein PDF der Wiedergabeliste herunterladen konnten, und so musste dieses herunterladbare PDF auch vom CMS aktualisiert werden. Dank mpdf konnte ich mit ein paar einfachen Schleifen und eingestreuten Variablen genau das tun. Etwas, von dem ich dachte, es würde Wochen dauern, dauerte buchstäblich Minuten.
Großartig Artikel das hat mir geholfen, anzufangen.
Gute Nachrichten! Bissig !!
Snappy ist eine sehr einfache Open-Source-PHP5-Bibliothek, die die Erstellung von Thumbnails, Snapshots oder PDF aus einer URL oder einer HTML-Seite ermöglicht. Und ... es verwendet das ausgezeichnete Webkit-basierte wkhtmltopdf
Genießen! ^ _ ^
Wenn Sie eine perfekte XHTML + CSS zu PDF Konverter Bibliothek finden möchten, vergessen Sie es. Das ist alles andere als möglich. Weil es so ist, als ob man einen perfekten Browser findet (XHTML + CSS Rendering Engine). Haben wir eine IE oder FF?
Ich hatte einige Erfolge mit DOMPDF. Die Sache ist, dass Sie Ihren HTML + CSS-Code so ändern müssen, dass er mit der Funktionsweise der Bibliothek übereinstimmt. Ansonsten habe ich ziemlich gute Ergebnisse.
Siehe unten:
Die 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 in 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.
Versuchen Sie es mit dem neuesten nächtlichen dompdf Build. Ich habe eine ältere Version verwendet, die eine schreckliche Ressource darstellte, und es hat ewig gedauert, mein PDF zu rendern. Nach einem nächtlichen Grabbing von hier .
Die Erstellung des PDF 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!
Darryl Heins Erwähnung von TCPDF ist wahrscheinlich eine großartige Idee. Nicola Asunis Code ist ziemlich handlich und mächtig. Der einzige Mörder ist, wenn Sie jemals vorhaben, PDF Dateien mit Ihren generierten PDF zusammenzuführen, sind diese Funktionen nicht verfügbar. Sie müssten das PDF erstellen und es dann mit PDFTK von Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/) zusammenführen.
Bezüglich der Kosten kann die Verwendung eines Web-Service (API) in vielen Fällen der sinnvollere Ansatz sein. Wenn Sie diesen Prozess auslagern, entlasten Sie Ihre eigene Infrastruktur/Ihr Backend und stellen - vorausgesetzt, Sie nutzen einen seriösen Service - die Kompatibilität mit der Anpassung von Webstandards, der Verfügbarkeit, den kurzen Verarbeitungszeiten und der schnellen Bereitstellung von Inhalten sicher.
Ich habe einige Nachforschungen zu den meisten derzeit auf dem Markt befindlichen Webdiensten angestellt. Im Folgenden finden Sie die APIs, die meines Erachtens in diesem Thread erwähnt werden sollten, in einer Reihenfolge, die auf dem Preis-Leistungs-Verhältnis basiert. Alle von ihnen bieten vorgefertigte PHP Klassen und Pakete an.
Qualität:
Mit der hochqualitativen Engine PrinceXML
als Backbone bietet DocRaptor eindeutig die beste PDF Qualität und liefert hochglanzpolierte und gut konvertierte PDF Dokumente. Allerdings kommt der pdflayer API Dienst hier ziemlich nahe. Pdfcrowd punktet nicht unbedingt mit der Qualität, sondern mit der Verarbeitungsgeschwindigkeit.
Kosten:
pdflayer.com - Wie bereits erwähnt, ist pdflayer.com die kosteneffektivste Option und bietet ein 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 - Biete 100 PDFs einmalig kostenlos an. 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 benutzt und dieser Text soll jedem helfen, sich zu entscheiden, ohne für alle bezahlen zu müssen. Dieser Text wurde nicht verfasst, um ein Produkt zu unterstützen, und ich bin mit keinem der Produkte verbunden.
Wenn Sie Zugriff auf die Befehlszeile haben, können Sie mit PhantomJS das PDF
aus einem URL
(remote oder lokal) erstellen ).
Es funktioniert wirklich gut und ist eine kostenlose Lösung.
Schauen Sie sich dieses Beispiel Skript an, das genau für dieses Problem erstellt wurde.
Diese Frage ist schon ziemlich alt, aber ich habe noch niemanden erwähnt CutyCapt also werde ich :)
CutyCapt
CutyCapt ist ein kleines plattformübergreifendes Befehlszeilendienstprogramm zum Erfassen des WebKit-Renderings einer Webseite in einer Vielzahl von Vektor- und Bitmapformaten, einschließlich SVG, PDF, PS, PNG, JPEG, TIFF, GIF. und BMP
Ich empfehle TCPDF oder DOMPDF in dieser Reihenfolge.
Ich glaube nicht, dass eine PHP-Klasse das 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, um eine HTML-Seite zu rendern, ist natürlich ein Browser. Firefox 3.0 kann nativ im PDF-Format 'drucken', torisugary hat dafür eine Erweiterung (Command Line Print) entwickelt. Hier finden Sie es.
Wie auch immer, es gibt immer noch viele Probleme, die Firefox nur als PDF-Konverter ausführen ...
Im Moment denke ich, dass wkhtmltopdf das Beste ist (das vom Safari-Browser verwendet wird), schnell, schnell, fantastisch. Ja, auch Opensource ... Schau mal
Vielleicht können Sie versuchen, Tidy zu verwenden, bevor Sie die Datei an den Konverter übergeben. Wenn einer der Renderer ein HTML-Problem (z. B. nicht geschlossenes Tag) verursacht, kann dies möglicherweise Abhilfe schaffen.
Ich habe eine öffentliche API entwickelt, um PDF Dateien von Webseiten zu erstellen. Es hat eine Nice 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 Bildern/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- und 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.
Dies ist zuverlässig, da alle Endpunkte über einen Lastenausgleich verfügen.
Kostenloses Konto zum Testen oder zur geringen Nutzung verfügbar. Details auf der Website:
Obwohl bereits viele Lösungen angeboten werden, empfehle ich die folgenden beiden:
Das Besondere an diesen beiden APIs ist, dass sie nicht nur HTML in PDF mit CSS und JavaScript konvertieren, sondern auch PDF Rechteverwaltung, Wasserzeichen und Verschlüsselung bieten . Daher ist es eine All-in-One-Lösung für alle, die sofort loslegen möchten.
Haftungsausschluss: Ich arbeite für Kaiomi, ein Unternehmen, das beide Websites betreibt.
Feines Rendering hat nichts zu bedeuten. Validiert es?
Alle Browser tun ihr Möglichstes, 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.
TCPDF funktioniert einwandfrei, ohne Abhängigkeiten, ist kostenlos und wird ständig überarbeitet. Es hat eine angemessene Geschwindigkeit, wenn die bereitgestellten HTML/CSS-Inhalte gut formatiert sind. Normalerweise generiere ich aus 50 - 300 kB HTML-Eingaben (einschließlich CSS) und erhalte PDF Ausgaben innerhalb von 1-3 Sekunden mit 10 - 15 PDF Seiten.
Ich empfehle dringend, ordentlich library als HTML-Formatierer zu verwenden, bevor Sie etwas an TCPDF senden.
Muss die Konvertierung von HTML in PDF wirklich serverseitig mit PHP erfolgen ?
Ich bin gerade auf jsPDF gestoßen, eine clientseitige Lösung mit HTML5/JavaScript. Das MIT-lizenzierte Code ist auf GitHub ebenfalls.
Ich habe viele verschiedene Bibliotheken für PHP ausprobiert. Alle aufgelisteten habe ich ausprobiert. Meiner Meinung nach ist TCPDF library die beste Kompromissleistung/Benutzerfreundlichkeit. Es ist sehr einfach zu installieren und zu verwenden, auch bei kleinen und mittleren Anwendungen eine gute Leistung. Wenn Sie eine hohe Leistung und ein sehr großes PDF Dokument benötigen, verwenden Sie das Zend_PDF Modul, aber bereiten Sie sich darauf vor, hart zu codieren!
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.
nicht PHP, sondern eine Java Bibliothek , was macht das Ding:
Flying Saucer verwendet XML oder XHTML und wendet CSS 2.1-kompatible Stylesheets an, um in PDF zu rendern
Es kann von PHP über system()
oder einen ähnlichen Aufruf verwendet werden. Obwohl es XML Wohlgeformtheit des input
erfordert.