微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 itextsharp 或 itext7 裁剪 PDF 页面的一部分并将其另存为新的 PDF 文档?

如何解决使用 itextsharp 或 itext7 裁剪 PDF 页面的一部分并将其另存为新的 PDF 文档?

我需要将 PDF 文件的矩形区域保存到新的 PDF 文件中,最好使用 iTextSharp 或 iText7。我已经设法将页面拆分为相同大小的页面,这很好用,但现在我需要使用自定义大小和位置的区域并将其放在单独的页面中 - 完成后,我可以轻松提取页面并将其另存为单独的 pdf。

我到目前为止的代码

        public void manipulatePdf(string src,string dest)
    {  
        PdfReader reader = new PdfReader(src);
        iTextSharp.text.Rectangle pagesize = reader.GetPageSizeWithRotation(1); 
        Document document = new Document(pagesize); 
        PdfWriter writer = PdfWriter.GetInstance(document,new FileStream(dest,FileMode.OpenorCreate,FileAccess.ReadWrite,FileShare.ReadWrite)); 
        document.open();  
        PdfContentByte content = writer.DirectContent; 
        PdfImportedPage page = writer.GetImportedPage(reader,1); 
        float x,y;

        x = 0;// -pagesize.Width * (0 % 4);
        y = 0;// pagesize.Height * (0 / 4 - 3);
        content.AddTemplate(page,2,x,y);
        document.NewPage();

        document.Close(); 
    }

解决方法

在 iText 7 中发布解决方案。

我们将创建一个包含一页的新文档,该文档是我们想要从中获取区域的原始页面的精确副本,但定义了裁剪框。裁剪框将确保将内容剪切到您想要的区域。请注意,在这种情况下,其余内容(在不可见区域中)并未消失并且仍然存在于内部文档结构中,因此如果您的文档中没有任何敏感信息,则可以应用此解决方案你想剪掉的。如果您确实有此类敏感信息,请查看 pdfSweep 插件。

PdfDocument source = new PdfDocument(new PdfReader("C:\\source.pdf"));
PdfDocument croppedSinglePageTarget = new PdfDocument(new PdfWriter("C:\\cropped.pdf"));
Rectangle area = new Rectangle(200,400,200,200);
int pageToCopy = 1;
source.copyPagesTo(pageToCopy,pageToCopy,croppedSinglePageTarget);
croppedSinglePageTarget.getPage(1).setCropBox(area);
source.close();
croppedSinglePageTarget.close();

原始文档:original document

裁剪结果 (200x200):cropped result

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。