【问题标题】:Why is iText embedding font even if I have specified not to embed?即使我指定不嵌入,为什么 iText 会嵌入字体?
【发布时间】:2015-05-30 15:34:43
【问题描述】:

我正在使用 Noto 字体创建 pdf 并查看字体的嵌入与不嵌入它们。我的代码

   FontFactory.register("c:/temp/fonts/NotoSansCJKsc-Regular.otf", "my_nato_font");
   Font myBoldFont = FontFactory.getFont("my_nato_font", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

当我创建 pdf 并执行 CTRL + D 时,我可以看到字体已嵌入。

但是一旦我选择了选项

   FontFactory.register("c:/temp/fonts/NotoSansCJKsc-Regular.otf", "my_nato_font");
   Font myBoldFont = FontFactory.getFont("my_nato_font");

文件大小减小,字体不嵌入。现在我看不到我添加到pdf中的汉字了。

我的问题

  1. 为什么 NOT_EMBED 选项仍然嵌入字体?
  2. 由于 Noto 字体由 google 开源并由 adobe Introducing Source Hans 支持,我认为最终用户应该能够查看文档,即使不需要嵌入它们。我的理解有误吗?

【问题讨论】:

    标签: fonts itext


    【解决方案1】:

    您正在使用 Identity-H,字体 被嵌入,因为如果 embedded 参数不会被忽略,iText 将创建一个违反 ISO-32000 的 PDF- 1:

    第 9.7.5.2 节:

    Identity-H 和 Identity-V CMap 不得与非嵌入字体一起使用。

    Adobe 在 PDF 软件方面拥有大量专利。 Adobe 授予任何人免费使用这些专利的权利,前提是您创建的 PDF 文件符合 PDF 规范。

    如果您调整 iText 使其不会在 Identity-H CMaps 中嵌入字体,则您将违反 PDF 规范,这也可能导致一些专利侵权。

    【讨论】:

    • 完美。解释一切。谢谢
    猜你喜欢
    • 2016-08-29
    • 2012-05-13
    • 1970-01-01
    • 2010-10-12
    • 2015-12-04
    • 2010-12-19
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    相关资源
    最近更新 更多