6

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

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

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

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

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

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

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

此致,

罗宾

4

4 回答 4

15

我在同一个问题上花了很多时间试图让多个 Gotham 面孔一起工作,并且能够解决这个问题。我发现作为集合一部分的许多 TTF/OTF 字体在 TTF 名称表中包含一个名为“Preferred Family”的字段。该字段的值将是通用集合名称,如所有字体文件中的“Gotham”。所以实际的“Family Name”可能是唯一的,例如“Gotham Book”或“Gotham Light”,但“Preferred Family”在所有文件中都是通用的。

FontForge TTF 名称

如果您在 Linux 上使用 fc-list 之类的工具检查已安装的字体,您会看到该字体有两个家族名称:

两个姓氏

问题就在这里。当在同一个 PDF 中使用同一系列中的多个面时,wkhtmltopdf(不确定这是 webkit 的东西还是 QT 的东西)似乎只选择了“Preferred Family”中的一种字体并使用它来渲染所有该组内应由不同字体显示的文本。

幸运的是,您可以完全使用 FontForge 之类的工具从字体文件中删除“首选系列”字段。我为我需要的所有 Gotham 系列变体执行此操作并重新安装它们,从而解决了双姓问题:

一个姓氏

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

于 2017-08-05T16:59:30.013 回答
1
  • 使用这个由更多开发人员支持的类似实用程序:https ://github.com/plessl/wkpdf
  • 如果这对您不起作用,请检查您是否拥有最新版本的wkhtmltopdf

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

于 2016-04-13T09:05:48.587 回答
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, '');
于 2016-04-18T12:34:33.183 回答
0

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

FontForge 不适合我。相反,我安装了命令行工具ttx(通过brew install fonttoolsOS X)。

然后:

  • 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
于 2021-03-04T15:47:14.577 回答