使用 TCPDF 生成的 UTF-8 PDF 在 Adobe Acrobat 中显示正常,但在 Illustrator


UTF-8 PDF generated with TCPDF showing up fine in Adobe Acrobat but corrupted in Illustrator and Google preview

我使用PHP和TCPDF生成用utf8编码的在线发票。我按照 tcpdf 网站上的教程使用 PT-sans .ttf文件创建了字体定义文件。

生成的 pdf 文件在使用 Adobe Reader 打开时看起来不错(重音符号显示正确)。但是,一旦您使用Adobe Illustrator打开pdf文件,您就会看到正常的ASCII字符和缺失字符符号的混合。在Gmail预览中作为附件打开时,根本不显示任何文本,只会显示图像。

我也得到了与福昕读者不一致的行为。在一台计算机上还可以(安装了字体),但在另一台计算机上损坏(未安装字体)。

插画师(左)和福昕阅读器打印屏幕:http://dl.dropbox.com/u/14647415/illustrator%20and%20foxit.jpg

以下是损坏文件的副本:http://dl.dropbox.com/u/14647415/2011040-3.pdf

PDF的大小为±200kB,因此字体似乎被正确嵌入。

这似乎发生在任何utf8字体上,嵌入了tcpdf网站上描述的过程。当我尝试 tcpdf 库附带的核心 cid 字体时,重音字符丢失或替换为 ?,但整体布局和文本在 Illustrator 中也可以。附加的utf-8字体(如Dejavusans)也已损坏。

我使用"UTF-8"作为传递给tcpdf构造函数的参数。

类 XTCPDF 扩展了 TCPDF{

function __construct(){
    parent::__construct('P', 'mm', 'A4', true, 'UTF-8', false);
    ...
}
...

}

您对可能导致这种情况的原因有任何想法吗?

提前非常感谢你。

p.

问题显然是由 TCPDF 自动子集化字体引起的。这导致了字符集的问题(字符被"移位","0"被解释为"A"等)在Acrobat以外的应用程序中。

对此的解决方案是设置:

$pdf->setFontSubsetting(false);

并根据您要使用的字符集手动对字体进行子集化以减小生成的文件大小。