Google Webfonts und PDF-Generierung aus HTML mit wkhtmltopdf
Lesezeit: 7 Minuten
Mathieu Rodic
ich benutze wkhtmltopdf um HTML-Dateien in das PDF-Format zu konvertieren; Es liefert überraschend gute Ergebnisse und rendert das PDF genau so, wie es WebKit tun würde.
ich benutze Google Webfonts um Benutzern die Möglichkeit zu geben, das Erscheinungsbild des von ihnen bearbeiteten Dokuments anzupassen, indem ihnen die Möglichkeit geboten wird, zwischen einigen Schriftarten zu wählen. Es funktioniert auch perfekt in einem Browser.
Das Problem ist, dass ich die Google Fonts nicht zum Laufen bekomme, wenn ich solche HTML-Dateien mit wkhtmltopdf in PDF umwandele. Ich habe gelesen, dass andere Leute das gleiche hatten Ausgabe.
Könnte mir bitte jemand helfen, das zu beheben?
BEARBEITEN: Das Deklarieren von @font-face direkt im CSS funktioniert auch nicht.
Shaharia Azam
So konvertieren Sie HTML in PDF von wkhtmltopdf versuchen zu vermeiden woff Schriftart. Verwenden Sie die truetype Format der Google Web Fonts mit base64 kodieren.
Kürzlich habe ich versucht, einen Google Web Font von Google Web Fonts zu verwenden. Im Browser wird es korrekt angezeigt, aber nach der Konvertierung von HTML in PDF nicht.
Nachdem ich das Internet ausgiebig durchsucht hatte, fand ich endlich Tools zum Codieren von Schriftarten in die base64 Format und bekam auch CSS für @font-face.
+1. Hinweis: wie in einem Kommentar auf der verlinkten Lösungsseite erwähnt: Es scheint nicht unter OS X (10.9) zu funktionieren, funktioniert aber unter Linux.
– Pepijn Olivier
2. Juni 14 um 12:05 Uhr
Es funktioniert gut in Windows und auch mit dem Node-Paket-Wrapper für wkhtmltopdf.
– rjred
10. Juli 14 um 15:28 Uhr
Dies funktioniert immer noch nicht mit komprimierten Schriftarten wie Roboto Condensed gemäß wkhtmltopdf-binary 0.12.3.1 mit gepatchtem QT. Vielleicht wegen des hartnäckigen Kerning-Bugs …?
– genkilabs
24. Februar 17 um 19:03 Uhr
Kannst du den Link aktualisieren? Seite existiert seit letztem Monat nicht mehr
– Jeroen van Veghel
23. März 18 um 10:04 Uhr
Wenn es immer noch nicht funktioniert, konvertieren Sie die Schriftart in eine Base64-Zeichenfolge!
– Kopfbedeckung
22. Januar 21 um 14:33 Uhr
Arman H
Eine einfache Lösung: Base64-kodieren Sie Ihre Schriftart und betten Sie sie in das CSS ein:
FontSquirrel kann dies für Sie durch die erweiterten Optionen von FontSquirrel erledigen Webfont-Generator; Google- und andere Schriftarten können codiert werden mit diesem Werkzeug.
Ich habe diese Lösung mit verwendet pdfkit und wicked_pdf, die über wkhtmltopdf funktionieren, also nehme ich an, dass dies mit dem nativen funktionieren sollte wkhtmltopdf sowie.
Ich kann bestätigen, dass dies bei mir funktioniert hat, aber ich musste v0.10.0-rc2 von wkhtmltopdf für OS X verwenden. Die neuesten Versionen haben in dieser Hinsicht bei mir nicht funktioniert.
– MetaSkills
27. August 13 um 14:47 Uhr
@MetaSkills danke, dass Sie das erwähnt haben – ich stoße auf das gleiche Problem und es war die Hölle, Fehler zu beheben. wkhtmltopdf Ausführung 0.12.3 funktioniert einfach nicht mit benutzerdefinierten Schriftarten, wenn es unter OSX ausgeführt wird, scheint aber auf unseren Ubuntu-Staging- und Produktionsservern gut zu funktionieren.
– Topher Hunt
17. Februar 16 um 17:02 Uhr
@Topher Hunt Ich bin froh, dass ich auf Ihren Kommentar gestoßen bin. Ich habe dasselbe unter OSX erlebt, dass die Schriftart nicht funktioniert, aber wenn sie auf einem Ubuntu-Server bereitgestellt wird, funktioniert sie.
– HastingsDirect
12. März 20 um 16:35 Uhr
Josef Erickson
Ich hatte dasselbe Problem und löste es, indem ich die Schriftarten herunterlud und sie mit dieser Schriftartdeklaration aus einer lokalen Datei auf meinem Webserver ausführte:
Ich konnte diese Schriftart auf finden Schriftart Eichhörnchen, aber Ihr Kilometerstand kann variieren.
Ich denke, was mit den Schriftarten von Google passiert, ist, dass es versucht, nur das Format zu laden, von dem es glaubt, dass dieser Browser es wünscht, was für WebKit (glaube ich) schwach ist. Aber wkhtmltopdf kann keine Woff-Schriftart in eine PDF-Datei einbetten und wird daher standardmäßig wieder auf Sans-Serif zurückgesetzt. Indem Sie alle deklarieren, wird die TrueType-Schriftart eingeschlossen, die das PDF tatsächlich verwendet.
Außerdem müssen Sie die Schriftart, die Sie verwenden möchten, als erste in einer CSS-Definition für die Schriftartfamilie definieren, sonst wird wkhtmltopdf sie einfach ignorieren.
Gute Erklärung. Wenn Sie auf die GWF-Site gehen und die ZIP-Datei der Schriftart herunterladen, enthält sie die TTF-Datei, die wkhtmltopdf verarbeiten kann. Ich bin mir jedoch nicht sicher, ob alle Schriftarten auf GWF die TTF enthalten.
– allein
3. Februar 12 um 7:39 Uhr
Vielen Dank! Ich persönlich habe eine Problemumgehung gefunden, indem ich die Schriftarten (sie können aus einem Repository heruntergeladen werden) auf dem X11-Server meines Computers installiert habe.
– Mathieu Rodic
17. Februar 12 um 9:17 Uhr
Wenn jemand hierher kommt, während ich nach PISA PDF HTML Django-Problemen mit der Google Fonts-API suche, werfen Sie einen Blick auf: xhtml2pdf.appspot.com/static/pisa-en.html und verwenden Sie einfach die ttf-Datei
– Andilabs
22. August 14 um 19:37 Uhr
Noch eine Anmerkung zu PISA – Sie werden den Witz verstehen) gibt es ein wichtiges Problem beim Verknüpfen von Schriftarten in CSS. Auf dem Entwicklungsserver funktioniert es zB mit dem Linken zu Statics, aber auf der Produktion müssen Sie es nicht über http, sondern auf die lokale Datei verlinken, damit es funktioniert, also verwenden Sie für diesen Zweck zB MEDIA_ROOT.
– Andilabs
11. Oktober 14 um 22:19 Uhr
Ich habe das gerade mit dem getestet @importNotation funktioniert:
Ich habe jetzt seit ungefähr zwei Tagen damit zu kämpfen, mein Rat an Sie, wenn keine der obigen Antworten für Sie funktioniert:
Installieren Sie die Schriftart (ttf) auf dem Computer, der den Webserver hostet, und fordern Sie sie einfach im CSS an, genau wie Sie es mit einer gewöhnlichen Schriftart tun würden.
body{
font-family: 'Lato';
}
Jetzt wkhtmltopdf sollte in der Lage sein, die Schriftart einzuschließen
Da er den Benutzern ermöglicht, die Schriftart, die sie verwenden möchten, anhand der verfügbaren Google-Schriftarten auszuwählen, könnte dies bedeuten, dass eine zunehmende Anzahl von Schriftarten installiert werden muss
– gdvalderrama
26. August 16 um 08:11 Uhr
Danke. Ich habe andere Antworten zum Einbetten einer riesigen Base64-codierten Schriftartzeichenfolge in meinen Code ausprobiert, halte das jedoch nicht für eine gute Idee. Endlich habe ich Schriftarten installiert, die ich brauche, da ich nicht zu viele Schriftarten brauche.
– Kenshin
29. März 18 um 23:31 Uhr
Könntest du bitte genauere Angaben machen, wie man es einbindet? Beispielsweise, src: {{ public_path('fonts/noto-sans.regular.ttf') }}; Wie hast du es importiert?
– Pathos
29. Januar 21 um 5:49 Uhr
jenson-button-event
Ich muss eine Unmenge von Variationen ausprobiert haben, um diese Arbeit zu bekommen (von lokal). Ich versuche, Open Sans Condensed über WKHtmlToPdf in ein PDF einzubetten.
Ich denke, es ist wichtig, dass Sie die Open Sans Condensed ttf direkt von Google herunterladen und installieren und installieren. Es ist auch wichtig, neu zu starten, um anderen Diensten nach der Installation Zugriff zu gewähren. Ich habe das ttf ursprünglich von font-squirrel heruntergeladen und Condensed wurde als “Open Sans” in Windows/Fonts aufgeführt, was falsch ist. Wenn Sie nach der Google-Installation suchen, wird es als “Open Sans Condensed Light” aufgeführt, also sogar von Google local('Open Sans Cond Light') Skript ist falsch.
Wie bereits erwähnt, müssen Sie die Dehnung und die Gewichte explizit angeben, also hat Folgendes für mich funktioniert:
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: local('Open Sans');
}
@font-face {
font-family: 'Open Sans Condensed';
font-stretch:condensed;
font-style: normal;
font-weight: 300;
src: local('Open Sans Condensed Light');
}
@@font-face { font-family: 'Open Sans Condensed Bold'; font-stretch:condensed; font-style: normal; font-weight: 700; src: local('Open Sans Condensed'), local('Open Sans Condensed Bold');}
Da er den Benutzern ermöglicht, die Schriftart, die sie verwenden möchten, anhand der verfügbaren Google-Schriftarten auszuwählen, könnte dies bedeuten, dass eine zunehmende Anzahl von Schriftarten installiert werden muss
– gdvalderrama
26. August 16 um 08:11 Uhr
Danke. Ich habe andere Antworten zum Einbetten einer riesigen Base64-codierten Schriftartzeichenfolge in meinen Code ausprobiert, halte das jedoch nicht für eine gute Idee. Endlich habe ich Schriftarten installiert, die ich brauche, da ich nicht zu viele Schriftarten brauche.
– Kenshin
29. März 18 um 23:31 Uhr
Könntest du bitte genauere Angaben machen, wie man es einbindet? Beispielsweise, src: {{ public_path('fonts/noto-sans.regular.ttf') }}; Wie hast du es importiert?
– Pathos
29. Januar 21 um 5:49 Uhr
xtian
In meinem Fall musste ich diese Option nur hinzufügen
--javascript-delay 1000
und Google Font-Text wurde angezeigt.
[wkhtmltopdf 0.12.4 (with patched qt)]
.
6503700cookie-checkGoogle Webfonts und PDF-Generierung aus HTML mit wkhtmltopdfyes