为什么即使我指定不嵌入 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中的汉字了。
我的问题
- 为什么 NOT_EMBED 选项仍然嵌入字体?
- 由于 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 规范,并且可能会导致一些专利侵权。
我正在使用 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中的汉字了。
我的问题
- 为什么 NOT_EMBED 选项仍然嵌入字体?
- 由于 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 规范,并且可能会导致一些专利侵权。