问题描述
我需要将 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();