关于php:TCPDF,带有OpenType字体的“无法包含字体定义文件”

TCPDF, “Could not include font definition file” with OpenType fonts

我是一位对字体没有深入了解的Web程序员,并且正在努力使TCPDF包含我们的自定义OpenType字体。我们已经购买了OpenType字体文件(.oft),该文件不受任何类型的DRM的保护。

关于此错误消息的许多问题最终都得到了相同的建议。我已经为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()函数(在此处提供文档),由于它不包含对任何字体类型的任何引用,因此使用起来似乎更为明显。但是,我无法使用此功能来使用它提供的少量文档。

任何帮助将不胜感激。


您确定在调用addTTFfont()时遇到此错误吗?我问的原因是因为我检查了TCPDF代码(就像对"不能包含字体定义文件"进行了全局搜索一样),并且该消息仅出现在addFont()方法中。

这两种方法可能会有些混乱,但是几个月前我给自己写了一些笔记,下面将部分复制,以希望对您有所帮助:

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

  • addFont()-这将在文档中添加"原始"(即已经转换)的字体,这意味着该字体可用于编写文本。

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

因此,我将使用addTTFfont()将字体预转换为"原始"版本,然后在实际创建PDF的代码中使用addFont()SetFont()

如果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

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


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

使用转换器链接:

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


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

    确保所有路径均正确。

    使用这个连结

    记住将文件夹make_font放在html2pdf的文件夹内

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

    要么

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

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

    例如在生成pdf时使用:

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

    错误:$html2pdf->addFont('lato', '', 'latoi.php');

    请记住,仅生成2个文件:

    latoi.php

    latoi.z

    您不需要任何ctg文件。

    希望对您有所帮助


    在我的情况下,这只是(未找到).ttf字体文件的错误路径。
    为了进行测试,我成功使用了驱动器D:/,但是忘记了在使用addTTFfont('C:/...')命令的代码行中将其更改回我的php文件中的生产驱动器C:/

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


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