使用itext将静态pdf添加到当前动态生成的pdf

使用itext将静态pdf添加到当前动态生成的pdf,pdf,merge,itext,document,writer,Pdf,Merge,Itext,Document,Writer,我在将已经存在的pdf添加到我刚刚生成的当前pdf中时遇到问题。 我看到了PdfCopy,但我的情况有点不同。我有一个即时生成的pdf,在发送给客户端之前,我需要向其中添加一个现有的pdf。如果您不介意丢失现有pdf中可能存在的所有交互,您可以使用PdfReader和PdfImportedPage。请首先阅读第6.2.1节“导入页面”,更具体地说是第6.2.1节。您还可以下载示例或查看以下代码段: PdfReader reader = new PdfReader(existing_pdf); P

我在将已经存在的pdf添加到我刚刚生成的当前pdf中时遇到问题。
我看到了PdfCopy,但我的情况有点不同。我有一个即时生成的pdf,在发送给客户端之前,我需要向其中添加一个现有的pdf。

如果您不介意丢失现有pdf中可能存在的所有交互,您可以使用
PdfReader
PdfImportedPage
。请首先阅读第6.2.1节“导入页面”,更具体地说是第6.2.1节。您还可以下载示例或查看以下代码段:

PdfReader reader = new PdfReader(existing_pdf);
PdfImportedPage page = writer.getImportedPage(reader, pagenumber);
document.setPageSize(reader.getPageSize(pagenumber));
document.newPage();
PdfContentByte canvas = writer.getDirectContent();
canvas.addTemplate(page, 0, 0);

这段代码是从内存中编写的。如果它不能立即工作,您可能需要在这里和那里调整它。

如果您不介意丢失现有PDF中可能存在的所有交互,您可以使用
PdfReader
PdfImportedPage
。请首先阅读第6.2.1节“导入页面”,更具体地说是第6.2.1节。您还可以下载示例或查看以下代码段:

PdfReader reader = new PdfReader(existing_pdf);
PdfImportedPage page = writer.getImportedPage(reader, pagenumber);
document.setPageSize(reader.getPageSize(pagenumber));
document.newPage();
PdfContentByte canvas = writer.getDirectContent();
canvas.addTemplate(page, 0, 0);

这段代码是从内存中编写的。如果它不能立即工作,您可能需要在这里和那里调整它。

或者,将新生成的文件序列化到内存(
ByteArrayOutputStream
)并将其读入
PdfReader
,然后您可以使用
Pdf*Copy*
。@Bruno问题是“现有的\u Pdf”不存在(正在运行)。这只是打印到响应正文中的文档。@pmp如果现有的\u pdf不存在,我建议更新您的问题,其中显示“我在添加现有的pdf时遇到问题”和“我需要将现有的pdf添加到其中”,因为我将这句话解释为:存在现有的\u pdf。换句话说:你的补充评论与你原来的问题相矛盾。@BrunoLowagie说得对。我的错。问题的标题是正确的,但正文有点误导。我的pdf文件正在运行中,我已将其保存在内存中。现在我想知道是否可以添加另一个pdf(已经存在)到它?答案仍然是一样的:您的pdf是使用文档对象集创建的;现有的pdf是另一个已经存在的pdf。请解释一下你对答案不理解的地方,因为我仍然不理解这个问题。当你说“是否可以添加另一个pdf(已经存在)”时,你所说的“已经存在”是什么意思?是档案吗?它是一个字节流吗?(事实上这并不重要,但可能你认为它有关系。)或者,将新生成的数据序列化到内存(
ByteArrayOutputStream
)并将其读入一个
PdfReader
,然后你可以使用
Pdf*Copy*
。@Bruno的问题是“现有的Pdf”不存在(它正在运行)。这只是打印到响应正文中的文档。@pmp如果现有的\u pdf不存在,我建议更新您的问题,其中显示“我在添加现有的pdf时遇到问题”和“我需要将现有的pdf添加到其中”,因为我将这句话解释为:存在现有的\u pdf。换句话说:你的补充评论与你原来的问题相矛盾。@BrunoLowagie说得对。我的错。问题的标题是正确的,但正文有点误导。我的pdf文件正在运行中,我已将其保存在内存中。现在我想知道是否可以添加另一个pdf(已经存在)到它?答案仍然是一样的:您的pdf是使用文档对象集创建的;现有的pdf是另一个已经存在的pdf。请解释一下你对答案不理解的地方,因为我仍然不理解这个问题。当你说“是否可以添加另一个pdf(已经存在)”时,你所说的“已经存在”是什么意思?是档案吗?它是一个字节流吗?(事实上这并不重要,但也许你认为是的。)