HTML-zu-PDF-Batch-Modus-Konverter (oder Bibliothek), der CSS @font-face respektiert?

HINWEISE: Meine Anfrage bezieht sich auf Software oder Bibliotheken, daher poste ich hier. Ich habe auch die ähnlichen Threads hier überprüft, aber sie haben nach etwas subtil anderem gefragt.

Ich habe folgende HTML-Seite:

<html>
<head>
   <link rel="stylesheet" type="text/css" href="font.css">
   <style>
      body {
        font-family: "Gotham SSm A";
        font-size: 22px;
      }
   </style>
</head>
<body>
   SUMMARY
</body>
</html>

Und die Schriftdefinition in font.css (der Kürze halber abgeschnitten):

@font-face { 
   font-family: "Gotham SSm A"; 
   src: url(data:font/truetype;base64,...) format('truetype'); 
   font-weight:700; 
   font-style:italic; 
}

Die Seite wird im Browser gut angezeigt, und wenn sie aus dem Browser als PDF gedruckt wird, wird sie auch gut gerendert. Jedes Dienstprogramm, mit dem ich ein PDF aus serverseitiger Software (PHP) generiert habe, ist jedoch fehlgeschlagen:

  1. Wkhtmltopdf hat die Schriftarten durcheinander gebracht.
  2. PhantomJS hat die Schriftarten durcheinander gebracht.
  3. SlimerJS konnte nicht gerendert werden, öffnete Fenster und hatte inakzeptable Abhängigkeiten
  4. PrinceXML hat die Schriftarten durcheinander gebracht und konnte nicht alle CSS-Regeln analysieren
  5. pandoc konvertiert nur in LaTeX und erfordert verschiedene Dienstprogramme (unter Windows/Linux), um zu PDF zu wechseln. Außerdem hat die LaTeX-Konvertierung (laut der Online-Version, die ich versuche) auch die Schriftarten durcheinander gebracht.

Was sind meine Alternativen? Ich brauche das um...

1. Respect modern CSS (including @font-face).
2. Be available on Windows & Linux with similar output on both
3. Be offline (utility or library is fine)
4. Allow commercial use
5. Be cost effective (preferably free)

Antworten (2)

Ich konnte das von Ihnen angegebene CSS-Beispiel nicht dazu bringen, irgendetwas in meinem Browser zu tun, also konnte ich es nicht testen, aber ich schlage vor, dass Sie pandoc ausprobieren .

  1. Respektiert CSS einschließlich @font-face - es verwendet dies tatsächlich selbst
  2. Die unter Windows, Linux und Mac verfügbare Ausgabe ist ähnlich, vorausgesetzt, die Schriftarten sind alle verfügbar, aber Sie können CSS verwenden, um die Auswahl der Schriftarten bei Bedarf zu überschreiben.
  3. Offline - auf jeden Fall
  4. Kommerzielle Nutzung zulassen – Pandoc ist kostenlose Software, die unter der GPL veröffentlicht wurde. © 2006-2014 John MacFarlane. AFAIK Das bedeutet, dass Sie pandoc zwar nicht für kommerzielle Zwecke modifizieren können, es aber keinen Grund gibt, es nicht für kommerzielle Zwecke zu verwenden.
  5. Es ist kostenlos .
  6. Es funktioniert im Batch-Modus über die Befehlszeile und öffnet keine Fenster.
  7. Es kann eine große Anzahl von Eingabeformaten analysieren und in eine viel größere Anzahl von Formaten ausgeben.

Aktualisieren

Beachten Sie, dass ich Ihr Beispiel ohne die tatsächliche URL der Schriftart im CSS nicht einmal in einem Browser testen kann. Ich würde empfehlen, einen Fallback mit Schriftstapeln in Ihrem CSS zu haben. Ich habe es geschafft, eine Online-Quelle für die von Ihnen angegebene Schriftart zu finden, aber es handelt sich um eine kostenpflichtige Option, sodass die meisten hier nicht in der Lage sein werden, zu helfen, vermute ich.

Es wird dringend empfohlen, Schriftartstapel zu verwenden , um Fallback-Optionen bereitzustellen. Empfohlene Fallbacks sind „Helvetica Neue“, Helvetica, Arial, serifenlos.

Ändern Sie Ihr Beispiel in:

<html>
<head>
   <link rel="stylesheet" type="text/css" href="font.css">
   <style>
      body {
        font-family: "Gotham SSm A", “Helvetica Neue”, Helvetica, Arial, sans-serif;
        font-size: 22px;
      }
   </style>
</head>
<body>
   SUMMARY
</body>
</html>

Oder die lokale Installation der Schriftart kann durchaus hilfreich sein.

Danke, aber es wird nicht in PDF konvertiert; Es konvertiert in LaTeX und erfordert dann einen LaTeX->PDF-Konverter. Selbst wenn diese Konvertierung plattformeinheitlich ist, gibt es immer noch die Plattformeinheitlichkeit des LaTeX->PDF-Konverters, was höchst unwahrscheinlich ist, da dafür verschiedene Pakete empfohlen werden und es bereits unwahrscheinlich ist, dass sich dasselbe Konvertierungspaket einheitlich verhält. Ich werde Pandoc als letzten Ausweg im Hinterkopf behalten, soweit es die Zeit erlaubt.
Ich habe gerade die Online-Konvertierung in LaTex (der Schritt in Richtung PDF) versucht und die Schriftart nicht erkannt. Die Offline-Version mag anders sein, aber das ist so verschwindend unwahrscheinlich, dass ich Pandoc als Option ablehne und meine Frage ändere, um es der Ausschlussliste hinzuzufügen.
@R.Barzell Der Grund, warum es in der Online-Version nicht die "richtige" Schriftart gibt, ist einfach - auf dem Server ist die Schriftart nicht installiert - es ist nicht die gebräuchlichste Schriftart der Welt. Auf "Ihrem" Rechner ist diese Schriftart offensichtlich installiert - Weder apaddedcell.com/web-fonts noch media.24ways.org/2007/17/fontmatrix.html listen sie auf, daher ist es unwahrscheinlich, dass sie im Web erkannt wird, siehe smashingmagazine.com/ 2009/09/22/… und w3schools.com/cssref/css_websafe_fonts.asp für mehr.
Tatsächlich habe ich das Stylesheet (das die Schriftdefinition inline enthält) auf einen öffentlich verfügbaren Server gestellt und den Link in eine URL geändert und sichergestellt, dass es in einem Nicht-Pandoc-Baseline-Test erfasst wurde – das ist also nicht das Problem. Ich kenne Fallbacks, aber das ist nicht wirklich relevant, da die Schriftarten verfügbar sind. Wenn Fallbacks gut genug wären, würde ich keine benutzerdefinierten Schriftarten verwenden: P

Pandoc wurde schon erwähnt...

...aber auch PrinceXML ist ein starker Anwärter.

Während Pandoc Freie Software ist, ist PrinceXML proprietär (obwohl es für private Zwecke kostenlos verwendet werden kann). PrinceXML ist wirklich stark, wenn es um CSS-Unterstützung geht, und es führt nur eine HTML/XML/CSS-Konvertierung in PDF durch (ohne dass andere externe Bibliotheken erforderlich sind).

Pandoc benötigt LaTeX, um PDFs zu erstellen, aber Pandoc kann auch viele andere Dokumentformatkonvertierungen erreichen (man könnte es das "Schweizer Taschenmesser" der Dokumentkonvertierung nennen).


Aktualisieren:

Hab gerade beim Update des OP gemerkt, dass er PrinceXML schon getestet hatte und war enttäuscht. Dies könnte wahrscheinlich debuggt werden, wenn die Eingabedatei (en) irgendwie verfügbar wäre, um es zu reproduzieren.

Pandoc hat er auch ausprobiert... ja, unter Windows benötigt es eine zusätzliche MikTeX-Installation, damit es HTML in PDF umwandeln kann.