【问题标题】:itext7 - How to copy page as form XObject while keeping hidden OCGs hiddenitext7 - 如何在保持隐藏的 OCG 隐藏的同时将页面复制为表单 XObject
【发布时间】:2022-01-11 13:28:51
【问题描述】:
我使用PdfFormXObject pageCopy = sourcePage.CopyAsFormXObject(pdf); 然后使用pdfCanvas.AddXObjectFittedIntoRectangle 将pageCopy 插入新的PDF 页面。复制的页面按预期在新 PDF 中可见,但它的“隐藏”OCG 是如何可见的。
我这样做的原因是能够获取一个 PDF 页面,对其进行缩放和裁剪,并将其添加到一个新的 PDF 中,以便与其他内容进行比较。
有没有办法在创建 XObject 之前删除 OCG PDF 内容,或者有没有其他方法可以在不使用 XObject 路由的情况下实现我的目标,从而让我保持隐藏 OCG 的“关闭”状态
【问题讨论】:
标签:
java
c#
itext
itext7
ocg
【解决方案1】:
OCG 删除功能在 iText 7 中尚不可用。
但是,您可以尝试应用一种解决方法:我们可以将有关 OCG 的所有信息从您的源文档复制到目标文档,这应该在目标文档中创建相同的 OCG 并保留默认的开/关状态.
要复制 OCG,您可以将页面从一个文档复制到另一个文档(这将复制所有 OCG),然后删除该页面。
当 iText 中提供 OCG 删除功能时,该方法会变得更简洁,但现在您可以使用类似于以下的代码:
PdfDocument sourceDocument = new PdfDocument(new PdfReader(sourcePdfPath));
PdfDocument targetDocument = new PdfDocument(new PdfWriter(targetPdfPath));
PdfFormXObject pageCopy = sourceDocument.getFirstPage().copyAsFormXObject(targetDocument);
PdfPage page = targetDocument.addNewPage();
PdfCanvas canvas = new PdfCanvas(page);
canvas.addXObject(pageCopy);
// Workaround: copying the page from source document to destination document also copies OCGs
sourceDocument.copyPagesTo(1, 1, targetDocument);
// Workaround: remove the page that we only copied to make sure OCGs are copied
targetDocument.removePage(targetDocument.getNumberOfPages());
sourceDocument.close();
targetDocument.close();