使用iTextSharp删除PDF不可见对象

是否可以使用iTextSharp从PDF文档中删除不可见(或至少未显示)的对象?

更多细节:

1)我的源代码是一个包含图像和文本(可能是一些矢量图形)和嵌入字体的PDF页面。

2)有一个界面来设计多个“裁剪框”。

3)我必须生成一个新的PDF,其中只包含裁剪框内的内容。 其他任何东西都必须从结果文档中删除(实际上,我可能会接受内部一半和外部一半的内容,但这不是理想的,它不应该出现)。

目前我的解决方案是:

我已经成功开发了一个解决方案,可以创建新的临时文档,每个文档都包含每个裁切框的内容(使用writer.GetImportedPage和contentByte.AddTemplate加上与裁切框完全相同的页面)。 然后我创建最终文档并重复该过程,使用AddTemplate方法将最终页面中的每个“裁剪页面”定位。

该解决方案有两大缺点:

  • 文档的大小是[原始大小] * [裁剪框数量],因为整个页面都在那里,被加盖多次! (不可见,但它在那里)
  • 通过选择Reader中的全部(CTRL + A)并粘贴,仍然可以访问不可见文本。
  • 所以,我想我需要遍历PDF对象,检测它是否可见,然后删除它。 在撰写本文时,我正在尝试使用pdfReader.GetPdfObject。

    谢谢您的帮助。


    如果您正在尝试的PDF是模板/预定义/修正,那么您可以通过调用RemoveField来移除该对象。

    PdfReader pdfReader = new PdfReader(../Template_Path.pdf"));
    PdfStamper pdfStamperToPopulate = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create));
    AcroFields pdfFormFields = pdfStamperToPopulate.AcroFields;
    pdfFormFields.RemoveField("fieldNameToBeRemoved");
    

    PdfReader pdfReader = new PdfReader(../Template_Path.pdf"));
    PdfStamper pdfStamperToPopulate = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create));
    AcroFields pdfFormFields = pdfStamperToPopulate.AcroFields;
    pdfFormFields.RemoveField("fieldNameToBeRemoved");
    

    是的,这是可能的。 您需要将pdf页面内容字节解析为PdfObjects,将它们存储到内存中,删除未拆分的PdfObject,将Pdf内容从PdfObject构建回pdf内容字节,在通过PdfWriter导入页面之前替换PdfReader中的页面内容。

    我会建议你看看这个: http : //habjan.blogspot.com/2013/09/proof-of-concept-converting-pdf-files.html

    从链接样本实现Pdf内容字节解析,从PdfObjec的建设,取代PdfReader页面内容字节...

    链接地址: http://www.djcxy.com/p/46739.html

    上一篇: Removing PDF invisible objects with iTextSharp

    下一篇: itextsharp and pdf