【问题标题】: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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多