Пакетный конвертер HTML в PDF (или библиотека), который поддерживает CSS @font-face?

ПРИМЕЧАНИЯ. Мой запрос касается программного обеспечения или библиотек, поэтому я пишу здесь. Я также проверил похожие темы здесь, но они просили что-то немного другое.

У меня есть следующая HTML-страница:

<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>

И определение шрифта в font.css (обрезано для краткости):

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

Страница отлично отображается в браузере, а при печати в PDF из браузера также отображается нормально. Однако каждая утилита, которую я использовал для создания PDF-файла из серверного программного обеспечения (PHP), потерпела неудачу:

  1. Wkhtmltopdf испортил шрифты.
  2. PhantomJS испортил шрифты.
  3. SlimerJS не отображался, открывал окна и имел неприемлемые зависимости.
  4. PrinceXML испортил шрифты и не смог разобрать все правила CSS
  5. pandoc преобразуется только в LaTeX и требует различных утилит (в Windows/Linux) для перехода в PDF. Более того, это преобразование LaTeX (согласно онлайн-версии, которую я пробовал) также испортило шрифты.

Каковы мои альтернативы? Мне нужно это, чтобы...

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)

Ответы (2)

Я не смог получить образец CSS, который вы дали, чтобы что-то сделать в моем браузере, поэтому не смог его протестировать, но я предлагаю вам попробовать pandoc .

  1. Уважает CSS, включая @font-face — на самом деле использует его сам.
  2. Доступный в Windows, Linux и Mac вывод будет аналогичным, если доступны все шрифты, но при необходимости вы можете использовать css для переопределения выбора шрифтов.
  3. Офлайн - однозначно
  4. Разрешить коммерческое использование. Pandoc — это бесплатное программное обеспечение, выпущенное под лицензией GPL. © 2006-2014 Джон Макфарлейн. Насколько я знаю, это означает, что, хотя вы не можете изменить pandoc для коммерческих процессов, нет причин не использовать его в коммерческих целях.
  5. Это бесплатно .
  6. Он работает в пакетном режиме из командной строки и не открывает никаких окон.
  7. Он может анализировать большое количество входных форматов и выводить в гораздо большем количестве форматов.

Обновлять

Обратите внимание, что без фактического URL-адреса шрифта в CSS я не могу протестировать ваш образец даже в браузере. Я бы порекомендовал запасной вариант, используя стеки шрифтов в вашем CSS. Мне удалось найти один онлайн-источник шрифта, который вы указали, но это платный вариант, поэтому я подозреваю, что большинство из них не смогут помочь.

Настоятельно рекомендуется использовать стеки шрифтов для предоставления резервных вариантов. Рекомендуемые запасные варианты: Helvetica Neue, Helvetica, Arial, sans-serif.

Изменение вашего примера на:

<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>

Или установка шрифта локально вполне может помочь.

Спасибо, но он не конвертируется в PDF; он преобразуется в LaTeX, затем требуется конвертер LaTeX-> PDF. Таким образом, даже если это преобразование является единым для платформы, все еще существует единообразие платформы конвертера LaTeX->PDF, что маловероятно, поскольку для этого рекомендуются разные пакеты, и уже маловероятно, что один и тот же пакет преобразования будет вести себя одинаково. Я буду иметь в виду pandoc в крайнем случае, если позволит время.
Только что попробовал его онлайн-преобразование в LaTex (шаг к PDF), и он не распознал шрифт. Автономная версия может быть другой, но это настолько маловероятно, что я отклоняю pandoc как вариант и изменяю свой вопрос, чтобы добавить его в список исключений.
@R.Barzell Причина, по которой он не дает «Правильный» шрифт в онлайн-версии, проста - на сервере не установлен шрифт - это не самый распространенный шрифт в мире. На «вашей» машине этот шрифт, очевидно, установлен — ни apaddedcell.com/web-fonts , ни media.24ways.org/2007/17/fontmatrix.html не указывают его, поэтому вряд ли он будет распознан в Интернете, см. smashingmagazine.com/ 2009/09/22/… и w3schools.com/cssref/css_websafe_fonts.asp для получения дополнительной информации.
На самом деле, я поместил таблицу стилей (которая имеет встроенное определение шрифта) на общедоступный сервер и изменил ссылку на URL-адрес, а также удостоверился, что она была получена в базовом тесте, отличном от pandoc, так что это не проблема. Я знаю о запасных вариантах, но это не очень важно, поскольку шрифты доступны. Если бы запасные варианты были достаточно хороши, я бы не использовал пользовательские шрифты: P

Пандок уже упоминался...

... но PrinceXML также является сильным соперником.

В то время как Pandoc является бесплатным программным обеспечением, PrinceXML является проприетарным (хотя и бесплатным для использования в личных целях). PrinceXML действительно силен, когда дело доходит до поддержки CSS, и он выполняет только преобразование HTML/XML/CSS в PDF (без использования каких-либо других внешних библиотек).

Pandoc требует LaTeX для создания PDF-файлов, но Pandoc также может выполнять множество других преобразований форматов документов (вы можете назвать это «швейцарским армейским ножом» преобразования документов).


Обновлять:

Только что заметил в обновлении ОП, что уже протестировал PrinceXML и разочаровался. Это, вероятно, можно было бы отладить, если бы входной файл (ы) был каким-то образом доступен для его воспроизведения.

Pandoc он также пробовал... да, в Windows требуется дополнительная установка MikTeX, чтобы он мог конвертировать HTML в PDF.