itext 7如何合并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

我有个问题,需要你的帮助。我正在运行itext 7.0.2。java和我正在尝试将PdfDocument类型的列表ArrayList合并为一个pdf

我尝试了以下方法:

        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();