Wkhtmltopdf: Mehrseitige Vorlagen überlappen sich

Hallo Community,

kennt sich jemand mit wkhtmltopdf aus und kann uns vielleicht weiterhelfen? Wir haben eine mehrseitige HTML-Vorlage für gedruckte Serienbriefe aus Civi und bei der PDF-Generierung vermischen bzw. überlappen sich die Folgeseiten mit dem nächsten Briefempfänger, es funktioniert also der Seitenumbruch nicht korrekt.

Kennt jemand die Konfigurationsoptionen von wkhtmltopdf genauer, so dass wir da ggf. etwas ausprobieren könnten? Aktuell ist bei uns die Version 0.12.3 im Einsatz.

Vielen Dank schon mal im voraus!

Gerold

Hi Gerold,

das beantwortet leider nicht deine Frage, aber trotzdem als Anregung: Wir verwenden für Serienbriefe CiviOffice. Alle sind happy damit, geht wirklich gut und dieses HTML-Gefummel um PDF-Dateien zu erstellen ist ja wirklich etwas pain-in-the-ass…

Beim nächsten CiviStammtisch gibts auch einen TOP zu CiviOffice.

LG!
Daniel

Danke für die Empfehlung!

Lieber Gerold,

ich kenne das von Dir beobachtete Phänomen leider gut aus eigener Erfahrung. Das kann noch dazu verschiedene Ursachen haben – von falschen Seitenformat-Einstellungen über nicht korrekten CSS-Angaben in der Vorlage selbst bis hin zu nicht passenden Parametern beim Aufruf von wkhtmltopdf. Sogar an der Version von wkhtmltopdf auf eurem Server kann es liegen.

Wir haben die Erfahrung gemacht, dass mit wkhtmltopdf bildlich gesprochen „Endlospapier“ generiert wird, so dass man nach einem Seitenumbruch nichts absolut vertikal platzieren kann. Man kann also nicht ohne weiteres auf Seite 2 beispielsweise ein Logo mit 2cm Abstand zum oberen Blattrand platzieren oder eine Fußzeile bei sagen wir 26cm, so dass sie am unteren Rand steht (beides landet dann auf der ersten Seite). Eine Positionierung vom unteren Seitenrand ist mit wkhtmltopdf generell nicht möglich (denn der untere Rand entspricht nicht dem Blattrand, sondern ist das Ende des letzten Elements – und das ist flexibel (je nach Textlänge), so dass die Fußzeile irgendwo auf der Seite erscheint. Erzeugt man ein Dokument für mehrere Kontakte in einer PDF, landet ein absolut positioniertes Logo nicht auf jeder ersten Seite eines Kontakts, sondern liegt dann entsprechend der Anzahl der Kontakte auf der ersten Seite übereinander.

Ohne einen Blick in eure Vorlage zu werfen, kann ich zwar nicht sagen, was genau das Problem ist und ob es sich alleine durch den Vorlagen-Code lösen ließe. Auch ob es sich dabei um Phänomene handelt, die alleine durch wkhtmltopdf oder aber durch das Zusammenspiel von wkhtmltopdf und CiviCRM verursacht werden, kann ich nicht beurteilen. Mein eigenes Glück ist aber: Meine Kolleg*innen @romyy und Sebastian haben sich der Sache schon vor einer Weile grundlegend angenommen und ein Wrapper-Skript geschrieben. Das schaltet sich zwischen die CiviCRM Vorlage und den eigentlichen wkhtmltopdf-Aufruf, so dass man in der CiviCRM-Vorlage Bereiche wie sich wiederholende Kopf- und Fußzeilen sowie Seitennummerierung definieren kann und so auch ein automatischer Seitenumbruch möglich ist. Die entsprechende Vorlage ist wiederum so flexibel, dass man gut korrekt gerenderte mehrseitige Dokumente damit erzeugen kann. Allerdings gibt es auch hier einen kleinen Wermutstropfen: Will ich ein mehrseitiges Dokument für mehrere Kontakte mit Seitenzahlen gleichzeitig erzeugen, muss zuvor eine Stapelverarbeitungs-Aktion mit dem Search Action Designer gebaut werden, die es ermöglicht, die erzeugten Dokumente als ZIP herunterzuladen, in der sich dann pro Kontakt eine PDF befindet. Und zwar weil bei Ausgabe in einer Sammel-PDF die Seitenzahlen fortlaufen sind und nicht pro Kontakt neu hochzählen. Wenn dieser zugegebenermaßen technisch nicht ganz anspruchslose Ansatz etwas für Dich ist, teilen wir das gern.

Vielleicht reicht es ja in deinem Fall auch bereits, statt einer Sammel-PDF ein ZIP mit Einzel-PDFs zu erzeugen: Statt mit der Dokument-Erzeugen-Aktion von CiviCRM ein riesiges Dokument für Deinen Serienbrief zu erstellen, kannst Du mit dem Search Action Designer eine neue Aktion bauen, die für jeden Kontakt eine PDF-Datei erzeugt und diese dann in einer ZIP zum Download anbietet. Das löst manchmal schon das ein oder andere Problem bei der Arbeit mit wkhtmltopdf, wenn die Vorlage bei Einzeldokumenten keine Probleme macht, aber dann bei der Stapelverarbeitung.

Viele Grüße
Andreas

1 „Gefällt mir“

Vielen Dank für die ausführlichen, aber doch ziemlich abschreckenden Erläuterungen! Wir werden es jetzt mal mit CiviOffice versuchen, um dem wkhtmltopdf-Dauerproblem etwas aus dem Weg zu gehen…