2012-12-12 16 views
11

Ich habe ein Problem mit der PDF-Generierung derzeit mein System verwendet Dompdf, um HTML in PDF zu konvertieren, das alles gut funktioniert. Wenn der Benutzer jedoch ein Bild einfügt, das größer als eine A4-Seite ist, versagt die PDF-Datei schlecht und der gesamte Inhalt unter dem großen Bild wird gebündelt oder gar nicht angezeigt.dompdf Bild Überlauf Problem

Hier sind zwei PDFs ein Beispiel für die Ausgabe zeigen

Dieses ist fein

https://dl.dropbox.com/u/65878041/OK.pdf

Dieses Ihnen das erste Bild ist größer als die A4-Seite alle Inhalte sehen können folgendes wird vermasselt, wenn es genauso sein sollte wie das vorhergehende.

https://dl.dropbox.com/u/65878041/Issue.pdf

Was ich im Idealfall tun möchte, ist das Bild in Teile zerbrechen und über so viele Seiten erstrecken, wie erforderlich. Wie das, was in diesem LaTeX solution erreicht wird. Gibt es eine Möglichkeit, dies mit dompdf zu tun? oder irgendeine andere PHP-Bibliothek, um HTML zu PDF zu machen?

Ich habe es selbst untersucht und natürlich könnte ich ein Bild zerhacken, wenn es größer als die A4-Seite ist. Aber Problem ist mit diesem Ansatz, der wissen muss, ob es Text auf der Seite vor der Hand oder so etwas gibt, also ist es nicht ganz so einfach.

Vielen Dank im Voraus. Jede Einsicht würde sehr geschätzt werden.

+2

Es ist keine direkte Lösung, aber Sie könnten erwägen, zu einem anderen HTML-basierten PDF-Generator zu wechseln. Ich hatte viel Glück mit 'wkhtmltopdf', das Webkit verwendet. Dies bedeutet, dass Sie CSS und sogar Javascript verwenden können, um den Inhalt der Seite zu manipulieren, während sie gerendert wird. Beispielsweise könnten Sie das Bild im Verhältnis zum erwarteten Ansichtsfenster messen, so wie es gerendert wird, und dann die Größe entsprechend anpassen. Ich würde natürlich nicht für die Qualität der Größenanpassung bürgen ... – Charles

+0

Was ist die DOMPDF-Version? Ich hatte ein ähnliches Problem und die letzte Beta hat es mir angetan. –

+0

Es ist 0.6.0 Beta 3, das ist das Neueste, aber ich werde versuchen, die absolut neueste Version von Github ziehen. –

Antwort

4

Es würde mir viel hilfreicher, wenn Sie Sie auf dem Laufenden HTML und CSS ... Got zwei Dinge im Sinn:

Option # 1

Versuchen Sie wickeln Ihre Bilder in der zusätzlichen DIV und legen Sie explizit die Breite und Überlauf Regeln.

Option # 2

Bevor ich ein großer Fan von dompdf war aber nach der Entdeckung wkhtmltopdf sah nie zurück. wkhtmltopdf ist ein phänomenales Werkzeug, das Arbeit richtig macht. Versuchen Sie folgende Lösung:

  1. Laden Sie statisches Binärprogramm von project home page herunter, es ist architekturspezifisch, also wählen Sie das richtige ... Sie können beides herunterladen; zur Laufzeit erkennen Architektur und laden geeignete binäre
  2. Legen Sie die Datei in einem Verzeichnis für Ihr Projekt, z.
    /path/to/my/proj/bin/wkhtmltopdf
  3. Führen Sie Ihr Skript und Generat HTML-Dokument; speichern Sie es in einigen tmp Datei
    file_put_contents('/tmp/myfile.html', $html);
  4. Führen Sie den Konvertierungsbefehl
    shell_exec('/path/to/my/proj/bin/wkhtmltopdf /tmp/myfile.html /tmp/myfile.pdf')
  5. Get Inhalt der erzeugten pdf, ändern Response-Header und Server die Datei:
    header('Content-Type: application/pdf');

    echo file_get_contents('/tmp/myfile.pdf');

+0

Swapping zu wkhtmltopdf hat den Trick gemacht. Danke Alex. –

1

Ich weiß nicht, wie die Bilder angezeigt werden, aber Sie können dompdf veranlassen, Seiten nach oder vor einem bestimmten Element zu teilen. Zum Beispiel:

<div style='page-break-after:always;'> 
    <img src="PATH_TO_IMAGE" /> 
</div> 
+0

Wenn die Seite bricht? wenn enthält 100 Bilder. Ich muss brechen, wenn das Div überlaufen oder das A4-Blatt überlaufen. – 151291