为什么即使我指定不嵌入 iText 也会嵌入字体?

Why is iText embedding font even if I have specified not to embed?

我正在使用 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 支持,我认为最终用户应该能够查看文档,即使不需要嵌入它们。我的理解有误吗?

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

Section 9.7.5.2:

The Identity-H and Identity-V CMaps shall not be used with a non-embedded font.

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

如果您调整 iText 使其不嵌入具有 Identity-H CMap 的字体,您将违反 PDF 规范,并且可能会导致一些专利侵权。