使用iText创建的PDF在不同系统上看起来不同

时间:2017-08-29 05:15:38

标签: java email pdf download itext

我已成功使用iText库生成PDF,但我遇到了一个奇怪的问题。当我在自己的系统上下载PDF文件时,它看起来不错;我会把它描述为常规和正确的。但是,当我通过电子邮件将PDF文件发送给我的朋友时,它有不同的布局,我将其描述为不规则。当我在互联网上扫描PDF(不下载)时,它看起来也不规则。所以我想知道:我做错了什么,如果是的话,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

假设您正在创建包含特殊字符的PDF。我们假设您使用在 系统中找到的特定字体混合英文和中文文本。

假设您没有嵌入此字体的子集。这意味着PDF包含您在文档中使用的特殊字符的Unicode值,但PDF不知道如何显示相应的字形

现在,当您在自己的机器上打开此PDF时,它看起来很完美。为什么?因为您拥有带有的Unicode值的PDF,所以您拥有自己系统所需的字体

但是,当您的朋友收到文档并打开PDF时,他们会使用Unicode字符,但不是字体。他们的PDF查看器将使用与您想到的字体不同的字体。因此,内容可能看起来不同(我使用的单词混乱)。当您将PDF放在某些在线存储上然后在浏览器中查看PDF时也是如此:如果该在线存储将PDF用作图像,则该图像中的文本看起来会混乱,因为在线服务不会可以访问系统中的字体。

如何解决这个问题? 嵌入字体的一部分!

我不知道您正在使用哪个版本的iText并且您没有共享任何代码,但是当您在iText 5或BaseFont / {中创建FontProgram时{1}}在iText 7中,您可以使用参数来指示字体是否应嵌入文档中。

不要担心iText会嵌入完整的字体,以防您拥有庞大的中文字体。在这种情况下,iText将对字体进行子集化,并仅添加文档中使用的字形。