【问题标题】:Can't import most TTF files to TCPDF无法将大多数 TTF 文件导入 TCPDF
【发布时间】:2019-08-13 14:04:23
【问题描述】:

我已经阅读了有关该主题的所有教程,但我根本无法完成这项工作,示例代码和在线工具也没有......

当我尝试将大多数 .ttf 文件导入 TCPDF 字体时,生成的 php 文件如下所示:

<?php
$type='TrueType';
$name='FontAwesome5Free-Solid';
$desc=array('Ascent'=>875,'Descent'=>-125,'CapHeight'=>875,'Flags'=>96,'FontBBox'=>'[5000 5000 -5000 -5000]','ItalicAngle'=>-50,'StemV'=>70,'MissingWidth'=>1000);
$up=-123;
$ut=49;
$dw=1000;
$cw=array(
0=>1000,1=>1000,2=>1000,3=>1000,4=>1000,5=>1000,6=>1000,7=>1000,8=>1000,9=>1000,
10=>1000,11=>1000,12=>1000,13=>1000,14=>1000,15=>1000,16=>1000,17=>1000,18=>1000,19=>1000,
20=>1000,21=>1000,22=>1000,23=>1000,24=>1000,25=>1000,26=>1000,27=>1000,28=>1000,29=>1000,
30=>1000,31=>1000,32=>1000,33=>1000,34=>1000,35=>1000,36=>1000,37=>1000,38=>1000,39=>1000,
40=>1000,41=>1000,42=>1000,43=>1000,44=>1000,45=>1000,46=>1000,47=>1000,48=>1000,49=>1000,
50=>1000,51=>1000,52=>1000,53=>1000,54=>1000,55=>1000,56=>1000,57=>1000,58=>1000,59=>1000,
60=>1000,61=>1000,62=>1000,63=>1000,64=>1000,65=>1000,66=>1000,67=>1000,68=>1000,69=>1000,
70=>1000,71=>1000,72=>1000,73=>1000,74=>1000,75=>1000,76=>1000,77=>1000,78=>1000,79=>1000,
80=>1000,81=>1000,82=>1000,83=>1000,84=>1000,85=>1000,86=>1000,87=>1000,88=>1000,89=>1000,
90=>1000,91=>1000,92=>1000,93=>1000,94=>1000,95=>1000,96=>1000,97=>1000,98=>1000,99=>1000,
100=>1000,101=>1000,102=>1000,103=>1000,104=>1000,105=>1000,106=>1000,107=>1000,108=>1000,109=>1000,
110=>1000,111=>1000,112=>1000,113=>1000,114=>1000,115=>1000,116=>1000,117=>1000,118=>1000,119=>1000,
120=>1000,121=>1000,122=>1000,123=>1000,124=>1000,125=>1000,126=>1000,127=>1000,128=>1000,129=>1000,
130=>1000,131=>1000,132=>1000,133=>1000,134=>1000,135=>1000,136=>1000,137=>1000,138=>1000,139=>1000,
140=>1000,141=>1000,142=>1000,143=>1000,144=>1000,145=>1000,146=>1000,147=>1000,148=>1000,149=>1000,
150=>1000,151=>1000,152=>1000,153=>1000,154=>1000,155=>1000,156=>1000,157=>1000,158=>1000,159=>1000,
160=>1000,161=>1000,162=>1000,163=>1000,164=>1000,165=>1000,166=>1000,167=>1000,168=>1000,169=>1000,
170=>1000,171=>1000,172=>1000,173=>1000,174=>1000,175=>1000,176=>1000,177=>1000,178=>1000,179=>1000,
180=>1000,181=>1000,182=>1000,183=>1000,184=>1000,185=>1000,186=>1000,187=>1000,188=>1000,189=>1000,
190=>1000,191=>1000,192=>1000,193=>1000,194=>1000,195=>1000,196=>1000,197=>1000,198=>1000,199=>1000,
200=>1000,201=>1000,202=>1000,203=>1000,204=>1000,205=>1000,206=>1000,207=>1000,208=>1000,209=>1000,
210=>1000,211=>1000,212=>1000,213=>1000,214=>1000,215=>1000,216=>1000,217=>1000,218=>1000,219=>1000,
220=>1000,221=>1000,222=>1000,223=>1000,224=>1000,225=>1000,226=>1000,227=>1000,228=>1000,229=>1000,
230=>1000,231=>1000,232=>1000,233=>1000,234=>1000,235=>1000,236=>1000,237=>1000,238=>1000,239=>1000,
240=>1000,241=>1000,242=>1000,243=>1000,244=>1000,245=>1000,246=>1000,247=>1000,248=>1000,249=>1000,
250=>1000,251=>1000,252=>1000,253=>1000,254=>1000,255=>1000);
$enc='cp1252';
$diff='';
$file='lol.z';
$originalsize=191836;
// --- EOF ---

基本上所有字符都是无效的。

这是我使用我的 PHP 源代码或使用为 TCPDF 制作的在线转换器(例如:http://www.xml-convert.com/en/convert-tff-font-to-afm-pfa-fpdf-tcpdfhttp://fonts.snm-portal.com/)得到的结果。

我正在尝试将 font-awesome 的 TTF 文件(例如 fa-solid-900.ttf)添加到我的 TCPDF,但我收到此错误。

我现在不知道该怎么办。

【问题讨论】:

  • 你提到你得到一个错误,但没有包括你得到的错误。
  • 你看到我粘贴的代码中的所有“1000”了吗?这就是错误。除非 font-awesome 的所有字符都相同(不太可能,每个字符都有一个图标,并且有大量图标......)
  • 我猜你无法通过 cp1252 编码访问字体真棒图标。是否可以在不使用特定编码准备的情况下使用 TTF 文件?您是否尝试过addTTFfont() 方法?详情请见here
  • 是的,我试过addTTFfont(),结果和我链接的那两个网站完全一样。 addTTFFont() 是我的第一个选择,只有在我使用这些网站以确保我正确执行此操作之后(我和这些网站都获得相同的结果,所有字符中的 1000 个)。只有 10% 的 TTF 字体得到了正确转换,其中大部分都失败了,这是一种失败的字体。

标签: php pdf tcpdf


【解决方案1】:

您需要将 FontAwesome 导入为 Unicode 字体。 [另请注意:在您的示例中,字符 0-255 的字符宽度为 1000,因为它们在此字体中不存在,而 1000 是为您缺少的字形宽度定义的宽度。] 对于其他失败的字体,请尝试导入它们也可以作为 Unicode 字体或使用不同的编码表。

//Ignore the warnings about undefined indexes on first import. 
//There's no H or x glyphs in the font, so the warning is expected.
$fa = TCPDF_FONTS::addTTFfont('fa-solid-900.ttf',  'TrueTypeUnicode', '', 4);
//Note: using empty string for $enc since this is a Unicode font
//Note: using 4 for $flags to signify a symbol font. 32 for text fonts.
$pdf->setFont($fa);
$pdf->writeHTMLCell(100,120,40,10,"&#xf11b;");

//An example inlined with normal text:
$pdf->setFont('helvetica');
$pdf->writeHTMLCell(100,120,40,20,"Should be a gamepad: <span style=\"font-family:$fa;\">&#xf11b;</span>");

附上测试输出结果截图:

测试脚本:

<?php
//Update to your TCPDF path
include 'TCPDF/tcpdf.php';

$pdf = new TCPDF('P', 'mm','Letter', true, 'UTF-8', false, true);
$pdf->addPage();
$pdf->setFontSubsetting(true);
$fa = TCPDF_FONTS::addTTFfont('fa-solid-900.ttf',  'TrueTypeUnicode', '', 4);

$testtext = "Font name: {$fa}<br>".
  "Should be a gamepad: <span style=\"font-family:$fa;\">&#xf11b;</span>";
$pdf->writeHTMLCell(100,10,10,10,$testtext);
$pdf->Output(dirname(__FILE__).'/fasolid-test.pdf', 'F');

【讨论】:

  • 我收到“应该是游戏手柄:?”有了这个确切的代码......我不明白。我使用了与您使用的相同的字体文件。这些是 TCPDF addFont 创建的文件,它们看起来与您的不同吗? dropbox.com/s/awyz7r1nnk54913/fa-solid-900-tcpdf.zip?dl=1
  • 你的文件看起来完全和我的一样,所以这个字体应该可以工作。 diff 实用程序没有发现任何差异。有趣的是,这个字体缺少的字形是空的,所以如果 TCPDF 加载了正确的字体,你不应该看到问号。运行添加的示例脚本时是否得到相同的结果?
  • 有效!!我认为我的部分问题是我正在遵循这个示例(tcpdf.org/examples/example_055),他们只是将字体从 0 转储到 256。但似乎这个字体真棒计算索引从 60,000 及以上(为什么??)。有没有办法只转储字体的非空白字符?当您想了解字体的可用符号及其索引时,您会怎么做?
  • 非常好,所以我怀疑你的问题是“应该是一个游戏手柄:?”可能是 $fa 没有在您第一次尝试它的上下文中定义(包含 TCPDF 字体名称)。我使用 font-family: $fa; 将该 span 标签的字体设置为导入的 Font Awesome 字体。无论如何,font-awesome 有一个图标指南,您可以从中获取代码,这可能比构建自动样本文件要容易一些。使用那里提供的 unicode 值插入它们。 【至于为什么使用高位字符,我认为是使用了私人使用范围。不要引用我的话,我必须研究。]
猜你喜欢
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 2017-02-12
  • 2023-03-12
  • 2022-10-02
  • 2011-10-27
  • 1970-01-01
相关资源
最近更新 更多