编程语言
首页 > 编程语言> > php – 使用TCPDF生成的UTF-8 PDF在Adobe Acrobat中显示正常,但在Illustrator和Google预览中已损坏

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

作者:互联网

我使用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);
    ...
}
...

}

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

非常感谢你提前.

页.

解决方法:

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

解决方法是设置:

$pdf->setFontSubsetting(false);

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

标签:php,utf-8,diacritics,tcpdf
来源: https://codeday.me/bug/20190630/1339103.html