2017-08-29 180 views
-2

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

+1

它是如何不规则?除非您提供更多细节,否则我们无法帮助您。 – sorifiend

+2

第一次猜测:你没有嵌入任何字体。 PDF代表* Portable *文档格式,这意味着您查看PDF的位置(或在哪个操作系统上)无关紧要;它应该总是看起来一样。主要的例外是使用非嵌入式字体。创建您的PDF作为PDF/A文件来解决这个问题。第二个猜测:你的朋友使用一个破碎的PDF查看器;许多在网上找到的“PDF扫描仪”并不真正起作用。第三个猜测:你正在使用一个过时的iText版本。 –

+0

*“我做错了什么事情”* - 很有可能。 *“,如果是这样,我该如何解决这个问题?”* - 您应该先提供一些信息,说明您实际做了什么,即将关键代码添加到问题中并共享样本结果PDF。 – mkl

回答

0

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

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

现在,当你在你自己的机器上打开这个PDF文件时,它看起来很完美。为什么?由于您的PDF为Unicode值,您需要在您自己的系统上需要的字体

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

如何解决这个问题? 嵌入(字体的一个子集)!

我不知道你正在使用的iText的版本,你不同意任何代码,但是当你创建iText的5 BaseFont或iText的7 FontProgram/PdfFont,您可以使用参数来指示字体是否应嵌入文档中。

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

相关问题