将现有 PDF 文档添加到打开的文档

Add existing PDF document to opened document

使用 iText 5.5.5。 我通过 PdfWriter 实例打开了 com.itextpdf.text.Document。在构建文档的各个阶段,我需要添加静态 PDF 页面。静态页面以 byte[].

的形式出现

itextpdf.com 上关注了各种示例之后,我无法将他们的示例与我的用例相结合。这是代码:

Document trunk = new Document();
PdfWriter writer = PdfWriter.getInstance(trunk, getTrunkStream());
writer.setPageEvent(geTrunkPageEvent());
trunk.open();

....

PdfReader reader = new PdfReader(bytes);
// graft == my static content
Document graft = new Document(reader.getPageSizeWithRotation(1));
PdfCopy copy = new PdfCopy(graft, getTrunkStream());
graft.open();

int count = reader.getNumberOfPages();
for(int page = 0; page < count;) {
    copy.addPage(copy.getImportedPage(reader, ++page));
}

copy.freeReader(reader);
reader.close();

代码编译和运行没有错误。但是嫁接页面无法与主干页面一起出现。

阅读这个问题的答案 Read BLOB (PDF Content) from database and edit and output PDF , 更详细的描述

使用PdfContentByte保存要添加的PDF内容

 PdfContentByte cb = writer.getDirectContent(); 

使用 getImportedPage() 为要从另一个文档导入的每个页面创建一个 PdfImportedPage 页面对象,并使用 addTemplate() 添加页面到 writer:

trunk.newPage();
page = writer.getImportedPage(pdfReader, pagenumber);
cb.addTemplate(page, 0, 0);

确保关闭 documentpdfReader

注意:如果您只想合并一堆文件,请不要使用此代码段。你不应该这样做的原因在问题 How to merge documents correctly?

的答案中有解释