提取pdf页面并插入现有的pdf

时间:2015-11-07 11:31:05

标签: java itext

我有以下iText代码,我想将一页从src pdf文件复制到其他pdf文件(我已经存在PdfStamper,这里是mainPdfStamper)。

PdfReader srcReader = new PdfReader(new FileInputStream("source.pdf"));

File file = File.createTempFile("temporary", ".pdf");

PdfStamper pdfStamper = new PdfStamper(srcReader, new FileOutputStream(file));
PdfImportedPage importedPage = pdfStamper.getImportedPage(srcReader, 1);

// copying extracted page from src pdf to existing pdf
mainPdfStamper.getOverContent(1).addTemplate(importedPage, 10,10);
pdfStamper.close();
srcReader.close();

这不起作用,我不知道如何实现这一目标。简而言之,我想从源pdf复制一页到现有的pdf。请帮忙。

更新

根据布鲁诺的答案,下面的代码工作。

    PdfReader reader2 = new PdfReader(srcPdf.getAbsolutePath());
    PdfImportedPage page = pdfStamper.getImportedPage(reader2, 1);
    stamper.insertPage(1, reader2.getPageSize(1));
    pdfStamper.getUnderContent(1).addTemplate(page, 100, 100);
    // Close the stamper and the readers
    pdfStamper.close();
    reader2.close();

1 个答案:

答案 0 :(得分:1)

请阅读文档,例如chapter 6 of iText in Action。如果您转到第6.3.4节("将页面插入现有文档"),您将找到InsertPages示例。

如果p是指示您要插入页面的位置的页码,main_file是主文件的路径,to_be_inserted是文件的路径,则只需要此代码需要插入(dest是生成文件的路径):

PdfReader reader = new PdfReader(main_file);
PdfReader reader2 = new PdfReader(to_be_inserted);
// Create a stamper
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
// Create an imported page to be inserted
PdfImportedPage page = stamper.getImportedPage(reader2, 1);
stamper.insertPage(p, reader2.getPageSize(1));
stamper.getUnderContent(i).addTemplate(page, 0, 0);
// Close the stamper and the readers
stamper.close();
reader.close();
reader2.close();

这只是组合两个文件中页面的一种方法。您也可以使用PdfCopy来实现此目的。使用PdfCopy的优点是您可以保留交互式页面的交互功能。使用PdfStamper时,您将丢失插入页面中的所有互动功能(例如所有链接)。