0

然后我使用PdfFormXObject pageCopy = sourcePage.CopyAsFormXObject(pdf);将 pageCopy 插入到新的 PDF 页面中pdfCanvas.AddXObjectFittedIntoRectangle。正如预期的那样,复制的页面在新 PDF 中可见,但它是如何“隐藏”的 OCG 可见的。

我这样做的原因是能够获取 PDF 页面,对其进行缩放和裁剪,并将其添加到新的 PDF 中,以便与其他内容进行整理。

有没有办法在创建 XObject 之前删除 OCG PDF 内容,或者有没有不同的方法可以在不使用 XObject 路由的情况下实现我的目标,让我保持隐藏 OCG 的“关闭”状态

4

1 回答 1

1

iText 7 中尚不提供 OCG 删除功能。

但是,您可以尝试使用一种解决方法:我们可以将有关 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();
于 2022-01-30T14:44:33.737 回答