1722 Stimmen

Wie kann ich HTML und CSS in PDF einfügen?

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

Ich suche nun nach einer Möglichkeit, sie in PDF zu konvertieren. Ich habe es versucht:

  • DOMPDF : Es hatte große Probleme mit Tabellen. Ich habe meine großen verschachtelten Tabellen ausgeklammert und das hat geholfen (vorher hat es nur bis zu 128M Speicher verbraucht und ist dann gestorben - das ist meine Speichergrenze in der php.ini), aber es macht ein komplettes Durcheinander von Tabellen und scheint keine Bilder zu bekommen. Die Tabellen waren nur einfaches Zeug mit einigen Randstilen, um einige Linien an verschiedenen Stellen hinzuzufügen;
  • HTML2PDF und HTML2PS : Ich hatte tatsächlich mehr Glück mit diesem. Es gerendert einige der Bilder (alle Bilder sind Google Chart URLs) und die Tabelle Formatierung war viel besser, aber es schien einige Komplexität Problem, das ich noch nicht herausgefunden haben und hielt sterben mit unbekannten node_type() Fehler. Ich bin mir nicht sicher, wie es weitergehen soll; und
  • Htmldoc Dies scheint zu funktionieren gut auf grundlegende HTML, aber hat fast keine Unterstützung für CSS whatsoever, so dass Sie alles in HTML zu tun haben (ich wusste nicht, es war noch 2001 in Htmldoc-Land ...), so ist es nutzlos für mich.

Ich habe eine Windows-Anwendung namens Html2Pdf Pilot ausprobiert, die eigentlich ziemlich gute Arbeit geleistet hat, aber ich brauche etwas, das zumindest unter Linux läuft und idealerweise auf Abruf über PHP auf dem Webserver läuft.

Was übersehe ich, oder wie kann ich dieses Problem lösen?

9 Stimmen

Html2Pdf verwendet eine eingebettete Instanz des IE, um die Seite zu rendern, und konvertiert diese dann in PDF - wahrscheinlich über den Druckmechanismus des IE.

58 Stimmen

Da es sich um eine Frage aus dem Jahr 2008 handelt, ist dompdf inzwischen viel ausgereifter ;-)

5 Stimmen

Dompdf unterstützt jetzt CSS 2.1 und kann mit @import , @media et @screen Regeln, und lädt externe Stylesheets. Es kommt auch mit allem gebündelt für sie erforderlich, um zu arbeiten, obwohl es Dinge, die Sie installieren können, um eine bessere Leistung als die Standard-Bibliotheken zu erhalten. code.google.com/p/dompdf

674voto

Mic Punkte 24128

Werfen Sie einen Blick auf wkhtmltopdf . Es ist Open Source, basiert auf Webkit und ist kostenlos.

Wir haben ein kleines Tutorial geschrieben aquí .

EDIT (2017):

Wenn es darum ginge, heute etwas zu bauen, würde ich diesen Weg nicht mehr einschlagen.
würde aber http://pdfkit.org/ stattdessen.
Wahrscheinlich werden alle Nodejs-Abhängigkeiten entfernt, damit es im Browser läuft.

564voto

SchizoDuckie Punkte 9293

Wichtig: Bitte beachten Sie, dass diese Antwort im Jahr 2009 verfasst wurde und heute im Jahr 2019 möglicherweise nicht mehr die kostengünstigste Lösung ist. Online-Alternativen sind heute in dieser Hinsicht besser als damals.

Hier sind einige Online-Dienste, die Sie nutzen können:


Werfen Sie einen Blick auf PrinceXML .

Es ist definitiv der beste HTML/CSS-zu-PDF-Konverter, den es gibt, auch wenn er nicht kostenlos ist (aber hey, Ihre Programmierung ist vielleicht auch nicht kostenlos, wenn Sie also 10 Stunden Arbeit sparen, haben Sie es geschafft (denn Sie müssen auch berücksichtigen, dass Sie für die alternativen Lösungen einen eigenen Server mit der richtigen Software einrichten müssen)

Ach ja, habe ich schon erwähnt, dass dies die erste (und wahrscheinlich einzige) HTML2PDF-Lösung ist, die eine vollständige ACID2 ?

PrinceXML-Beispiele

153voto

cletus Punkte 596503

Nach einigen Untersuchungen und allgemeinem Haareraufen scheint die Lösung zu sein HTML2PDF . DOMPDF mit Tabellen, Rändern und sogar mäßig komplexem Layout schreckliche Arbeit geleistet und htmldoc scheint einigermaßen robust zu sein, ist aber fast völlig CSS-ignorant, und ich möchte nicht zurückgehen, um HTML-Layout ohne CSS nur für dieses Programm zu machen.

HTML2PDF sah am vielversprechendsten aus, aber ich hatte immer wieder diese seltsame Fehlermeldung über Null-Referenz-Argumente für node_type. Schließlich habe ich die Lösung für dieses Problem gefunden. Grundsätzlich funktionierte PHP 5.1.x problemlos mit Regex-Ersetzungen (preg_replace_*) für Zeichenketten jeder Größe. Mit PHP 5.2.1 wurde eine php.ini-Konfigurationsanweisung namens pcre.backtrack_limit . Dieser Konfigurationsparameter begrenzt die Länge der Zeichenfolge, für die ein Abgleich durchgeführt wird. Warum dies eingeführt wurde, weiß ich nicht. Der Standardwert wurde auf 100.000 festgelegt. Warum ein so niedriger Wert? Auch hier keine Ahnung.

A Fehler wurde gegen PHP 5.2.1 für diese die noch offen ist fast zwei Jahre später .

Das Erschreckende daran ist, dass bei Überschreitung des Limits die Ersetzung einfach scheitert stillschweigend . Wenn ein Fehler aufgetreten wäre und protokolliert worden wäre, hätte man wenigstens einen Hinweis darauf, was passiert ist, warum und was man ändern muss, um den Fehler zu beheben. Aber nein.

Ich habe also eine 70k große HTML-Datei, die ich in eine PDF-Datei umwandeln muss. Dazu sind die folgenden php.ini-Einstellungen erforderlich:

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

Dem aufmerksamen Leser ist vielleicht aufgefallen, dass meine HTML-Datei kleiner als 100k ist. Der einzige Grund, den ich vermuten kann, ist, dass html2pdf als Teil des Prozesses eine Konvertierung in xhtml durchführt. Vielleicht hat mich das überfordert (obwohl eine Aufblähung um fast 50 % seltsam erscheint). Was auch immer der Fall ist, die oben genannten funktioniert.

Nun, html2pdf ist ein Ressourcenfresser. Meine 70k-Datei benötigt etwa 5 Minuten und mindestens 500-600M RAM, um eine 35-seitige PDF-Datei zu erstellen. Das ist leider bei weitem nicht schnell genug für einen Download in Echtzeit, und die Speichernutzung liegt in der Größenordnung von 1000 zu 1 (600 Mio. RAM für eine 70k-Datei), was absolut lächerlich ist.

Leider ist das das Beste, was mir bisher eingefallen ist.

129voto

Karthick Punkte 281

Warum versuchst du nicht mPDF Version 2.0 ? Ich habe es für die Erstellung eines PDF-Dokuments verwendet. Es funktioniert gut.

Mittlerweile ist mPDF auf Version 5.7 und wird im Gegensatz zu HTML2PS/HTML2PDF aktiv gepflegt.

Aber bedenken Sie, dass die Dokumentation wirklich schwer zu handhaben sein kann. Werfen Sie zum Beispiel einen Blick auf diese Seite: https://mpdf.github.io/ .

Sehr einfache Aufgaben rund um die Umwandlung von HTML in PDF können mit dieser Bibliothek erledigt werden, aber für komplexere Aufgaben braucht man einige Zeit, um die Dokumentation zu lesen und zu "verstehen".

74voto

T.Todua Punkte 48569
  1. verwenden. MPDF ! ==

a) Auszug in yourfolder

b) erstellen file.php en yourfolder und fügen Sie 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) offen file.php von Ihrem Browser aus

2) Verwendung pdfToHtml !

  1. Auszug pdftohtml.exe in Ihren Root-Ordner:

  2. innerhalb dieses Ordners, in jedeDatei.php Datei, fügen Sie diesen Code ein (vorausgesetzt, es gibt auch einen Quellcode example.pdf):

  3. eingeben. FinalFolder und es werden die konvertierten Dateien angezeigt (so viele Seiten, wie das Quell-PDF hatte..)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X