使用TCPDF生成的UTF-8 PDF在Adobe Acrobat中显示正常,但在Illustrator和Google预览中已损坏

时间:2011-05-09 13:20:54

标签: php utf-8 tcpdf diacritics

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

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

我对福昕阅读器也有不一致的行为。它在一台计算机上安装了(安装了字体),但在另一台计算机上损坏(没有安装字体)。

Illustrator(左侧)和福昕阅读器printcreen: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中也可以使用整体布局和文本。像Dejavusans这样的附加utf-8字体也显示出损坏。

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

类XTCPDF扩展了TCPDF {

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

}

你对可能导致这种情况的原因有什么看法吗?

非常感谢你。

1 个答案:

答案 0 :(得分:4)

问题显然是由TCPDF自动对字体进行子集化引起的。这导致了除了Acrobat之外的字符集(字符被“移位”,“0”被解释为“A”等)的问题。

解决方法是设置:

$pdf->setFontSubsetting(false);

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