【问题标题】:PDF created with iText looks different on different systems使用 iText 创建的 PDF 在不同的系统上看起来不同
【发布时间】:2017-08-29 05:15:37
【问题描述】:

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

【问题讨论】:

  • 怎么不规则?除非您提供更多详细信息,否则我们无法为您提供帮助。
  • 第一个猜测:你没有嵌入任何字体。 PDF 代表 Portable 文档格式,这意味着您在何处(或在哪个操作系统上)查看 PDF 并不重要;它应该总是一样的。主要的例外是使用非嵌入字体时。将您的 PDF 创建为 PDF/A 文件以解决此问题。第二个猜测:您的朋友使用损坏的 PDF 查看器;网上找到的许多“PDF 扫描仪”都无法正常工作。第三个猜测:您使用的是过时版本的 iText。
  • “我做错什么了吗” - 很有可能。 “如果是这样,我该如何解决这个问题?” - 你应该首先提供一些关于你实际做了什么的信息,即将关键代码添加到问题中并共享一个示例结果 PDF。

标签: java email pdf download itext


【解决方案1】:

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

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

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

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

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

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

不用担心 iText 会嵌入 full 字体,以防你有一个巨大的中文字体。在这种情况下,iText 会将字体子集化,并且只添加文档中使用的字形。

【讨论】:

    猜你喜欢
    • 2020-11-24
    • 2010-11-16
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多