TCPDF - 在 iPad 上查看 PDF 时不显示嵌入的 ttf 字体

Posted

技术标签:

【中文标题】TCPDF - 在 iPad 上查看 PDF 时不显示嵌入的 ttf 字体【英文标题】:TCPDF - embedded ttf fonts not showing when PDF is viewed on iPad 【发布时间】:2013-02-23 05:01:48 【问题描述】:

我创建了一个使用 tcpdf 动态创建 PDF 并将字体嵌入 PDF 的网站。用户可以从一系列标准字体中进行选择,如 Arial、Verdana 等。然后系统直接从我的服务器中选择一个 ttf 字体并使用下面的代码嵌入。在大多数 pdf 查看器上可以很好地看到带有该字体的文本,但 iPad/iPhone's 查看器没有显示它。我下载了一个新的(随机)版本的 Arial.ttf 作为测试(不确定文件中的差异,但现在似乎显示正常。

我需要为多种字体执行此操作,但我有点在黑暗中拍摄,因为我不知道字体中的什么可能导致它不被嵌入。有谁知道 ttf 字体中的什么会导致它不显示?在其他查看器上显示正常,并显示嵌入到 Acrobat 文档属性中?

谢谢

$fontname = $pdf->addTTFfont('/tcpdf/fonts/custom/'.$ttfFile.'.ttf', 'TrueTypeUnicode', '', 32);

// 使用字体

$pdf->SetFont($fontname, '', $fontPoints, '', 'false');

【问题讨论】:

“不显示”是什么意思 - 文本实际上完全不存在?您能否分享其中一个 PDF 以便查看? 您好,感谢您的回复,字体可以在 chrome pdf 阅读器和 safari 上看到,但不能通过 iPhone / iPad 上的标准查看器看到。这是一个选择字体的示例,所有字体都通过大多数查看器显示,iPhone 上缺少一些。根据 Acrobat 的说法,它们显然是“嵌入式子集”,任何想法都会非常有帮助。 s316279697.websitehome.co.uk/joe/banner790.pdf 我通过 callas pdfToolbox preflight 运行了您的文件(警告,我隶属于这家公司),我看到了两件可能很奇怪的事情。首先,您的文件还包含两种 Helvetica 字体,它们显然没有在页面上使用(并且没有嵌入)。您的文件还带有许多所使用的 Palatino 字体的错误。这是不显示的字体吗? 【参考方案1】:

$subset 的参数错误。您将其设置为“假”(带引号)。它应该是布尔真值。

    <?php
          ...
          // Wrong
          $pdf->SetFont($fontname, '', $fontPoints, '', 'false');

          // Right
          $pdf->SetFont($fontname, '', $fontPoints, '', true); 
          ...
    ?>

为什么有效?

因为它嵌入了整个字体,而不仅仅是一个子集。 诀窍是将方法 $pdf->SetFont() 中的参数 $subset 设置为 true。

http://www.tcpdf.org/doc/code/classTCPDF.html#a471562985997be1573d387f0aeae6964

PDF 正在使用

iPad (ios 7)、iPhone (IOS 7)、Windows 7、MACOSX 10.9。

我的 PDF 创建环境

MAC 10.9 上的 Apache 2、PHP 5.3.x、TCPDF v6.0.078

文件

Example PDF and a PHP Script to create it

【讨论】:

其实$subset应该设置为false(布尔型false,不在引号中),这样整个字体才能嵌入到文档中,并正确出现在El Capital Preview、iOS等中。

以上是关于TCPDF - 在 iPad 上查看 PDF 时不显示嵌入的 ttf 字体的主要内容,如果未能解决你的问题,请参考以下文章

TCPDF 创建 PDF 耗时太长,此时如何显示加载效果

使用PHP生成PDF文档

CMYK 图像使用 TCPDF 变为负片

解决iPad上查看PDF文件缺页问题

TCPDF 证书

tcpdf 字体连字(英文)?