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

时间:2015-03-26 14:47:50

标签: fonts itext

我正在使用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字体由谷歌开源并由adobe Introducing Source Hans支持,我认为最终用户应该能够查看文档,即使不需要嵌入它们。我的理解错了吗?

1 个答案:

答案 0 :(得分:3)

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

  

第9.7.5.2节:

     

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

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

如果您要调整iText以便它不会使用Identity-H CMaps嵌入字体,那么您将违反PDF规范,这也可能导致一些专利违规行为。