Java iText 7-将PDF层(OCG)与基础PDF合并

Java iText 7-将PDF层(OCG)与基础PDF合并,java,pdf,itext7,ocg,Java,Pdf,Itext7,Ocg,是否可以将PDF(OCG)的层与基本PDF合并,从而生成没有层的PDF 我发现使用AdobeAcrobatDC这样的应用程序,使用“展平层”选项可以实现这一点,但我需要在我的Java应用程序中使用iText7编程 编辑: @joelgeraci有一个有用且很好的答案,解决了前面的问题,但我最初有一些隐藏层,当从目录中删除OCProperties时,这些隐藏层将显示出来。实际上不需要“合并”这些层。所有图层内容都已经是页面内容的一部分。图层,或者更合适的可选内容组,是一组指令集,查看器可以根据设置

是否可以将PDF(OCG)的层与基本PDF合并,从而生成没有层的PDF

我发现使用AdobeAcrobatDC这样的应用程序,使用“展平层”选项可以实现这一点,但我需要在我的Java应用程序中使用iText7编程

编辑:


@joelgeraci有一个有用且很好的答案,解决了前面的问题,但我最初有一些隐藏层,当从目录中删除OCProperties时,这些隐藏层将显示出来。

实际上不需要“合并”这些层。所有图层内容都已经是页面内容的一部分。图层,或者更合适的可选内容组,是一组指令集,查看器可以根据设置绘制或不绘制,对于不支持图层的查看器,它们只是全部显示。要“展平”图层,只需修改PDF,以便查看者不会认为有任何可选内容。最简单的方法是从目录中删除OCProperties字典。拥有catalog对象后,使用“remove”传递OCPropreties字典的名称

catalog.remove(PdfName.OCPROPERTIES)

这是一个有趣的用例。通过从目录中删除所有与OCG相关的信息,可以以一种肮脏的方式实现这一点,但提供这种功能的方式将非常有趣,即所有与OCG相关的信息也从内容流中删除。事实上,这就是我在评论中提到的肮脏解决方案(+1)。优雅的解决方案是从内容流、表单XObject和小部件注释中删除相应的OCG语法。应用程序之间存在一致性,但每个应用程序创建这些字典的方式不同。这当然是可能的,但这是一个没有多少回报的大量工作。OC数据只是没有占用足够的空间,不值得麻烦。另外,假设您确实删除了OCProperties字典,如果您遗漏了任何一个,都不会受到惩罚。如果得到一切都不重要,那么你得到什么也不重要。@joelgeraci我尝试通过删除OCProperties字典来使用这个解决方案,它对我部分有效,因为最初有些层是“隐藏的”,在删除OCProperties字典后,这些图层将再次显示在生成的pdf中。如果您的原始问题中有详细信息,我不会推荐我的解决方案。OCProperties是存储图层可见性默认值的位置。检测属于特定层的内容是非常重要的,并且可以根据使用的PDF创建工具的不同而有所不同。