我是一名网络程序员,对字体没有深入的了解,正在努力让 TCPDF 包含我们的自定义 OpenType 字体。我们购买了不受任何 DRM 保护的 OpenType 字体文件 (.oft)。
很多关于此错误消息的问题最终得到的都是相同的建议。我已经为 TCPDF (755) 使用的文件夹设置了正确的文件权限,我可以毫无问题地使用 addTTFfont()
来包含 .ttf TrueType 字体,如下所示:
$pdf->addTTFfont('/path-to-font/DejaVuSans.ttf', 'TrueTypeUnicode', '', 32);
所以我编写了以下代码来包含我们的 OpenFont 类型。 addTTFfont()
文档似乎表明支持 OpenTypeUnicode 和 OpenType 参数。
$pdf->addTTFfont('/path-to-font/customfont.otf', 'OpenTypeUnicode', '', 96);
结果是:
TCPDF 错误:无法包含字体定义文件:
我们正在使用 TCPDF v6.0.020,我一直在阅读 TCPDF Fonts information page到目前为止没有运气。我注意到 TCPDF 也有 addFont()
函数 (documentation here)使用起来似乎更明显,因为它不包含对任何字体类型的任何引用。但是,我无法让这个函数与它所拥有的少量文档一起工作。
如有任何帮助,我们将不胜感激。
最佳答案
您确定在调用 addTTFfont()
时出现了该错误吗?我问的原因是因为我检查了 TCPDF 代码(只是对“无法包含字体定义文件”进行了全局搜索)并且该消息仅出现在 addFont()
方法中。
这两种方法可能有点困惑,但我在几个月前给自己写了一些笔记,我将在下面部分复制,希望它能以某种方式帮助你:
<addTTFfont()
- 此方法的主要功能是将字体从 TTF(或 OTF)转换为 TCPDF 需要的“原始”版本。理论上,您可以将此功能的实现方式用作向文档添加字体的主要方法。它将首先检查 tcpdf 字体文件夹,如果转换后的文件不存在,它将继续进行转换。这只是稍微多了一点开销,但仍然不是我向文件添加字体的首选方法,因为您需要知道要转换的字体样式才能使该过程成功运行。 IMO,最好使用此方法预先转换您计划使用的任何字体,并简单地使用addFont()
将“原始”版本添加到文档中。
<AddFont()
- 这会向文档添加“原始”(即已经转换的)字体,这意味着它可以用于编写文本。SetFont()
- 这会为您编写的下一段文本设置字体。
所以我会使用 addTTFfont()
将字体预转换为“原始”版本,然后使用 addFont()
和 setFont()
在实际创建 PDF 的代码中。
如果 addFont()
失败并出现上述错误消息,则表示它找不到字体定义文件。请记住,如果您使用样式集('i'、'b'、'bi' 等)调用 addFont()
,它所做的只是将其附加到文件名(在扩展名之前).
最重要的是,您需要确保对 addTTFFont()
的调用正在生成“原始”字体文件并将它们保存到您的字体文件夹中。每个样式应该有三个文件,扩展名为 .php
、.z
和 .ctg.z
。因此,如果您转换名为 blah.ttf
的字体,您最终会得到 blah.php
、blah.z
和 blah.ctg .z
。如果您转换 blah bold.ttf
,TCPDF 会发现它是粗体字体并将“b”附加到文件名的末尾:blahb.php
, blahb.z
和 blahb.ctg.z
。
希望这里有一些有用的东西!祝你好运!
关于php - TCPDF,带有 OpenType 字体的 "Could not include font definition file",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19385618/