itext 7如何合并PDF?
我有个问题,需要你的帮助。我正在运行itext 7.0.2。java和我正在尝试将PdfDocument类型的列表ArrayList合并为一个pdf 我尝试了以下方法:itext 7如何合并PDF?,pdf,itext,Pdf,Itext,我有个问题,需要你的帮助。我正在运行itext 7.0.2。java和我正在尝试将PdfDocument类型的列表ArrayList合并为一个pdf 我尝试了以下方法: ByteArrayOutputStream bosGes = new ByteArrayOutputStream(); PdfWriter writerGes = new PdfWriter(bosGes); PdfDocument docGes = new PdfDocument
ByteArrayOutputStream bosGes = new ByteArrayOutputStream();
PdfWriter writerGes = new PdfWriter(bosGes);
PdfDocument docGes = new PdfDocument(writerGes);
ArrayList<PdfDocument> pdfs = AListOfSomePreviousCreatedPdfDocuments;
for (int i=0; i < pdfs.size(); i++) {
PdfDocument d = pdfs.get(i);
PdfPage p = d.getFirstPage().copyTo(docGes);
docGes.addPage(p);
d.close();
}
ByteArrayOutputStream bosGes = new ByteArrayOutputStream();
PdfWriter writerGes = new PdfWriter(bosGes);
PdfDocument docGes = new PdfDocument(writerGes);
for (int i=0; i < pdfs.size(); i++) {
PdfDocument d = pdfs.get(i);
docGes.addPage(d.getFirstPage());
d.close();
}
但最终又出现了这样的错误:
com.itextpdf.kernel.PdfException:无法从正在编写的文档复制间接对象
这可能是因为我的pdf是表单,合并时必须重置值吗?您阅读了手册吗?查看并查找
PdfMerger
。我尝试过,但没有成功。不知道我做错了什么你问题中的代码与你评论中的说法相矛盾。您问题中的代码与教程中显示的完全不同,因此我只能假设您没有尝试教程中的示例。Ok。我必须再试一次。我的问题如下。有人给了我一个pdfdocument对象的Arraylist,里面有一个填好的公式。每一页只有一页。我必须将它们与所有文档的页数合并到一个PDF文档中错误消息“无法从正在编写的文档中复制间接对象”似乎表明要合并的PdfDocument
对象并非仅使用PdfReader
创建的,而是至少使用PdfWriter
创建的。
ArrayList<PdfDocument> pdfs = new ArrayList<PdfDocument>();
while (rs.next()) {
URL fullPath = context.getResource("/formulare/kontrollbogen.pdf");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(bos);
PdfReader reader = new PdfReader(fullPath.getFile());
PdfDocument doc = new PdfDocument(reader, writer);
PdfAcroForm form = PdfAcroForm.getAcroForm(doc, true);
String firma = rs.getString("firma");
if (firma != null && !firma.equals("")) {
form.getField("firma").setValue(firma);
}
.
.
.
pdfs.add(doc);
}
ByteArrayOutputStream bosGes = new ByteArrayOutputStream();
PdfWriter writerGes = new PdfWriter(bosGes);
PdfDocument resultDoc = new PdfDocument(writerGes);
for (int i=0; i < pdfs.size(); i++) {
PdfReader r = pdfs.get(i).getReader();
PdfDocument sourceDoc1 = new PdfDocument(r);
int n1 = sourceDoc1.getNumberOfPages();
for (int j = 1; j <= n1; j++) {
PdfPage page = sourceDoc1.getPage(j).copyTo(resultDoc);
resultDoc.addPage(page);
}
sourceDoc1.close();
}
resultDoc.close();
//Initialize PDF document with output intent
PdfDocument pdf = new PdfDocument(writerGes);
PdfMerger merger = new PdfMerger(pdf);
//Add pages from the first document
PdfDocument firstSourcePdf = pdfs.get(0);
merger.merge(firstSourcePdf, 1, firstSourcePdf.getNumberOfPages());
//Add pages from the second pdf document
PdfDocument secondSourcePdf = pdfs.get(1);
merger.merge(secondSourcePdf, 1, secondSourcePdf.getNumberOfPages());
firstSourcePdf.close();
secondSourcePdf.close();
pdf.close();