WkhtmlToPdf多个字体/样式

时间:2016-04-05 13:12:40

标签: php fonts font-face wkhtmltopdf font-style

在使用wkhtmltopdf时,我已经阅读了许多关于使用多种字体样式/面孔的麻烦的主题。

我们目前在同一页面上以常规样式和粗体样式使用Nunito(由Google webfonts提供)时遇到问题。我们已经尝试了许多(可能的)解决方案,但它们都没有给我们提供解决方案。

我们尝试了以下解决方案,但尚未成功:

以上所有方法均无效。浏览器确实正确渲染它,但是wkhtmltopdf似乎正在渲染它。

我们发布了一些测试用例: http://bannes.nl/fonts

如果有人对如何解决这个问题有任何建议,请告诉我。如果您使用的是mac并安装了wkhtmltopdf,请随时在http://bannes.nl/fonts上测试案例。我已将每个测试用例的输出PDF包含在其目录中。

希望有人就如何解决这个问题提出建议!

致以最诚挚的问候,

罗宾

4 个答案:

答案 0 :(得分:10)

我花了很多时间研究同一个问题,试图让多个Gotham面孔一起工作,并且能够解决问题。我发现许多作为集合一部分的TTF / OTF字体包含一个名为" Preferred Family"在TTF名称表中。该字段的值将是通用集合名称,例如" Gotham"在所有的字体文件中。所以实际的"姓氏"可能是独一无二的,例如" Gotham Book"或" Gotham Light",但"首选家庭"将在所有文件中很常见。

FontForge TTF Names

如果您在Linux上使用类似fc-list的内容检查已安装的字体,您会看到该字体有两个系列名称:

Two Family Names

这就是问题所在。当在同一个PDF中使用同一系列中的多个面时,wkhtmltopdf(不确定这是一个webkit事物还是QT事物)似乎只选择" Preferred Family"中的一个字体。并使用它来呈现该组中不同字体应显示的所有文本。

幸运的是,您可以删除" Preferred Family"字体文件中的字段完全使用FontForge之类的工具。我为Gotham家族的所有变种做了这个,我需要并重新安装它们,这解决了双重姓氏问题:

One family name

这允许wkhtmltopdf在我的系统上正确渲染所有字体。

答案 1 :(得分:1)

  • 使用此类似的实用程序,由更多开发人员支持:https://github.com/plessl/wkpdf
  • 如果这对您不起作用,请检查您是否拥有最新版本的wkhtmltopdf

如果以上操作根本不起作用,您可以尝试使用其他命令行实用程序或强大的解决方案,例如:" LaTeX":https://www.latex-project.org/

答案 2 :(得分:1)

为什么不改变lib?

我使用了wkhtmltopdf但是我发现了TCPDF

的内心和平

我打印了一个执行此操作的HTML页面

// set font
$pdf->SetFont('itclegacysansltmedium', '', 12);
// add a page
$pdf->AddPage();

// set some text to print
ob_start();
include('view.php');
$html = ob_get_clean();
$pdf->writeHTML($html, true, false, true, false, '');

答案 3 :(得分:0)

我来到这里是为了寻找“wkhtmltopdf 字体冲突”。

FontForge 对我不起作用。相反,我安装了命令行工具 ttx(通过 OS X 上的 brew install fonttools)。

那么:

  • ttx /path/to/font.otf,输出 /path/to/font.ttx
  • 使用文本编辑器打开 /path/to/font.ttx
  • 为包含通用字体名称的名称元素设置唯一值。例如
    # original:
    <namerecord nameID="1" platformID="1"...>Arial</namerecord>
    # updated: 
    <namerecord nameID="1" platformID="1"...>Arial Bold</namerecord>
    
  • 保存文件
  • ttx /path/to/font.ttx,输出 /path/to/font#1.otf
  • 使用 /path/to/font#1.otf 代替 /path/to/font.otf