php - TCPDF,带有 OpenType 字体的 "Could not include font definition file"

标签 php fonts tcpdf opentype

我是一名网络程序员,对字体没有深入的了解,正在努力让 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.phpblah.zblah.ctg .z。如果您转换 blah bold.ttf,TCPDF 会发现它是粗体字体并将“b”附加到文件名的末尾:blahb.phpblahb.zblahb.ctg.z

希望这里有一些有用的东西!祝你好运!

关于php - TCPDF,带有 OpenType 字体的 "Could not include font definition file",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19385618/

相关文章:

php - 将 &#038 转换回 & 符号

php - AJAX聊天,自动滚动窗口

javascript - jQuery PHP Mysql jSon 循环显示数据

css - Chrome 和 Firefox 不渲染 Avenir 的粗体字体,但 Safari 可以!怎么修?

php - 使用 TCPDF 生成的 UTF-8 PDF 在 Adob​​e Acrobat 中显示良好,但在 Illustrator 和 Google 预览中损坏

php - MYSQL如果某个字段返回0则选择另一个查询并连接

java - 如何在 java 中从 jar 加载嵌入字体作为 InputStream?

java - 如何设置birt报告的编码类型

php - 如何计算 TCPDF 中 MultiCell/writeHTMLCell 的高度?

php - 基本的 css 样式(如 border-bottom)不影响动态创建的表格