我是一位对字体没有深入了解的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.php,blah.z和blah.ctg.z。如果转换blah bold.ttf,TCPDF会发现它是粗体字体,并将'b'附加到文件名的末尾:blahb.php,blahb.z和blahb.ctg.z。
希望这里会有一些掘金会有所帮助!祝好运!
-
是的,我敢肯定。香港专业教育学院试图尽我所能解释我的情况。当我在错误发生后检查服务器时,总是得到相同的结果。一个customfont.z文件,但没有一个customfont.php文件。如果我正确地理解了TCPDF,我所描述的错误指向customfont.php(定义)文件的创建失败。
-
没错,您应该最终得到三个文件(.php,.z和.ctg.z)。奇怪的是,addTTFfont()只会创建.z文件,而不会创建其他两个文件。函数是返回字体名称(表示成功)还是返回布尔值false(表示错误)?
-
更新:我只是尝试转换TCPDF不喜欢的TTF文件,它创建了.z文件,但其他两个文件都不创建。该函数返回FALSE。在我的特殊情况下,当在tcpdf_fonts.php中的365行附近检查" snft版本"时,它失败了(Im版本为6.0.039,但我认为该文件最近没有更改)。老实说,尽管作者在TCPDF方面做得非常出色,但是字体转换方面一直是我一生的祸根,因此我使用了替代方式来转换字体。
-
感谢您深入研究JamesG。您能告诉我找到了哪些替代方法来转换字体?我们真的很想在PDF文件中使用我们的字体。
-
老实说,Ive在此站点上获得了最大的成功:xml-convert.com/en/convert-tff-font-to-afm-pfa-fpdf-tcpdf您必须先从OTF转换为TTF,但我认为还有其他站点可以相当轻松地处理这一方面。您可能会遇到的另一个问题是,许多(大多数?全部?)OTF / TTF字体具有两字节编码,但是PostScript字体(即addTTFfont()和该网站都转换成的字体)使用了一个字节。编码,这意味着您只能从原始字体中获取前255个字符。祝好运!
-
@JamesG您能为OCR-B字体添加一个工作代码段吗?我没有使其正常工作(可能是路径或语法问题)。
-
除非我知道它是什么类型的字体(例如TTF,OTF等),否则我无法提供有效的代码段。即使那样,您真正需要做的就是使用addTTFFont()函数,看看它是否有效。有关转换字体的更多信息,请参见:tcpdf.org/docs/fonts
TCPDF新字体添加和土耳其字符问题解决方法。
使用转换器链接:
http://fonts.snm-portal.com
下载3个文件,
复制TCPDF-master / fonts
用法:$ pdf-> SetFont('roboto','',14);
用生成字体来解决这个问题。
确保所有路径均正确。
使用这个连结
记住将文件夹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);