13

我是一个对字体没有深入了解的网络程序员,并且正在努力让 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 ERROR: Could not include font definition file:

我们使用的是 TCPDF v6.0.020,到目前为止,我一直在阅读TCPDF 字体信息页面,但没有运气。我注意到 TCPDF 还具有似乎更明显使用的addFont()功能(此处的文档),因为它不包含对任何字体类型的任何引用。但是,我无法让这个函数与它拥有的小文档一起工作。

任何帮助将不胜感激。

4

7 回答 7

16

您确定在调用时收到该错误addTTFfont()吗?我问的原因是因为我检查了 TCPDF 代码(只是对“无法包含字体定义文件”进行了全局搜索)并且该消息仅出现在addFont()方法中。

这两种方法可能有点令人困惑,但几个月前我给自己写了一些笔记,我将在下面部分复制,希望它能以某种方式帮助你:

  • addTTFfont()- 此方法的主要功能是将字体从 TTF(或 OTF)转换为 TCPDF 所需的“原始”版本。这个函数的实现方式,理论上,您可以将其用作向文档添加字体的主要方法。它将首先检查 tcpdf 字体文件夹,如果转换后的文件不存在,它将继续进行转换。这只是一点点开销,但仍然不是我向文件添加字体的首选方法,因为您需要知道要转换的字体样式才能使该过程成功运行。IMO,最好使用此方法预先转换您计划使用的任何字体,并简单地用于addFont()将“原始”版本添加到文档中。

  • AddFont()- 这会在文档中添加一个“原始”(即已经转换的)字体,这意味着它可以用于编写文本。

  • SetFont()- 这将为您编写的下一段文本设置字体。

所以我会使用addTTFfont()将字体预先转换为“原始”版本,然后在实际创建 PDF 的代码中使用addFont()setFont()

如果addFont()上面的错误信息失败,这意味着它找不到字体定义文件。请记住,如果您addFont()使用样式集('i'、'b'、'bi' 等)调用,它所做的只是将其附加到文件名(在扩展名之前)。

最重要的是,您需要确保您的调用addTTFFont()正在生成“原始”字体文件并将它们保存到您的字体文件夹中。每个样式应该有三个文件,扩展名为.php,.z.ctg.z. 因此,如果您转换了一种名为的字体,blah.ttf您最终会得到blah.php,blah.zblah.ctg.z. 如果您转换blah bold.ttf,TCPDF 将确定它是粗体字体并将“b”附加到文件名的末尾blahb.phpblahb.zblahb.ctg.z.

希望这里有一些金块会有所帮助!祝你好运!

于 2013-10-16T03:04:32.983 回答
9

TCPDF 新字体添加和土耳其字符问题解决方法。

使用转换器链接:

  1. http://fonts.snm-portal.com
  2. 下载3个文件,
  3. 复制 TCPDF-master/fonts
  4. 用法:$pdf->SetFont('roboto', '', 14);

在此处输入图像描述

于 2018-03-23T12:02:25.533 回答
2

用生成字体来解决这个问题。

确保所有路径都正确。

使用此链接

记得把文件夹放在文件夹make_font里面html2pdf

记住正确的路径:index.php 中的 make_font 文件夹内的 html2pdf.class.php

或者

如果您有其他问题 - 字体:无法包含字体定义文件:

这是新字体名称正确的问题。

例如在生成pdf时使用:

正确的:$html2pdf->addFont('lato i', '', 'latoi.php');

不正确:$html2pdf->addFont('lato', '', 'latoi.php');

请记住,只生成了 2 个文件:

拉托伊.php

latoi.z

您不需要任何 ctg 文件。

我希望它会有所帮助

于 2017-02-16T11:25:54.477 回答
0

就我而言,问题是字体路径不可写。我通过更改文件夹的权限来修复它:var_dump(K_PATH_FONTS);

于 2020-03-29T16:13:50.873 回答
0

就我而言,这只是(不再找到).ttf字体文件的错误路径。对于测试,我成功使用了驱动器,但我忘记在我使用命令的代码行中的 php 文件中将其D:/更改回 prod 驱动器。C:/addTTFfont('C:/...')

不幸的是,TCPDF 错误消息没有输出任何关于源文件和产生问题的代码行的信息。

于 2020-07-03T09:39:44.853 回答
0

将 dejavusans.php 文件添加到字体文件夹中,将 tcpdf 库添加到 codeingiter 库文件夹中。

于 2021-07-30T05:53:38.643 回答
0

“cid0jp”这个字体支持日文和中文。

于 2022-02-22T05:20:48.213 回答