用java制作多个pdf文档

用java制作多个pdf文档,java,pdf,itext,Java,Pdf,Itext,这是我的代码: try { dozen = magazijn.getFfd().vraagDozenOp(); for (int i = 0; i < dozen.size(); i++) { PdfWriter.getInstance(doc, new FileOutputStream("Order" + x + ".pdf")); System.out.println("Writer instance

这是我的代码:

try { 
        dozen = magazijn.getFfd().vraagDozenOp();
        for (int i = 0; i < dozen.size(); i++) { 
            PdfWriter.getInstance(doc, new FileOutputStream("Order" + x + ".pdf"));
            System.out.println("Writer instance created");
            doc.open(); 
            System.out.println("doc open"); 
            Paragraph ordernummer = new Paragraph(order.getOrdernummer()); 
            doc.add(ordernummer); 
            doc.add( Chunk.NEWLINE );
            for (String t : text) { 
                Paragraph klant = new Paragraph(t);
                doc.add(klant); 
            } 
            doc.add( Chunk.NEWLINE );
            Paragraph datum = new Paragraph (order.getDatum());
            doc.add(datum);
            doc.add( Chunk.NEWLINE );
            artikelen = magazijn.getFfd().vraagArtikelenOp(i);
            for (Artikel a : artikelen){
                artikelnr.add(a.getArtikelNaam());
            }
            for (String nr: artikelnr){
                Paragraph Artikelnr = new Paragraph(nr);
                doc.add(Artikelnr);
            }

            doc.close(); 
            artikelnr.clear(); 
            x++; 
            System.out.println("doc closed"); 
        }

    } catch (Exception e) { 
        System.out.println(e); 
    } 
试试{
打=magazijn.getFfd().vraagdozenpo();
对于(inti=0;i
我得到这个异常:com.itextpdf.text.DocumentException:文档已关闭。不能添加任何元素


有人能帮我解决这个问题,这样就可以创建其他pdf并添加段落了吗?

您可以使用ApachePDFBox尝试类似的方法

File outputFile = new File(path);
outputFile.createNewFile();
PDDocument newDoc = new PDDocument();
然后创建一个
PDPage
,并在该页面中写下您想要写的内容。页面准备好后,将其添加到
newDoc
,最后保存并关闭

newDoc.save(outputFile);
newDoc.close()


重复此
tide.size()
次,并在
path
中为每个新文档不断更改文件名。

好的,从您的代码和问题来看,您的意图不是很清楚,因此我将在以下假设下操作:

  • 您正在为正在处理的每个框创建报告
  • 每个报告都需要是一个单独的PDF文件
  • 在循环的第二次迭代中,您将得到一个
    DocumentException
    ,您试图通过
    doc.close()向上一次迭代中已关闭的文档添加内容'doc.close'将完成
    文档
    并将所有仍挂起的内容写入任何链接的
    PdfWriter

    如果希望为每个框创建单独的pdf,还需要在循环语句中创建单独的
    文档
    ,因为通过
    PdfWriter.getInstance(doc,new FileOutputStream(“Order”+x+.pdf”)创建新的
    PdfWriter
    不会自行创建新的
    文档


    如果我对假设2有错误,并且您希望将所有内容添加到单个PDF中,请移动
    doc.close()在循环之外,只创建一个
    PdfWriter

    ,那么什么是
    x
    ?显然,您需要为每个迭代创建一个新的
    文档
    ,然后将所有内容转储到一个文档中,并创建该文档的X个副本。目前还不清楚这是否是你想要或不想要的行为,但你至少应该在回答中对此提出警告。我将投否决票,直到像这样的东西被添加。@SamuelHuylebroeck你是对的。嗯,我对itext不是很熟悉。所以,我改变了我的答案。你现在的答案毫无意义。您比较了不同PDF库中的两个类,它们在各自的体系结构中具有完全不同的角色,但您希望它们的操作类似,因为它们的名称相似。@mkl我想我在这里没有明确说明。我只是想提出一个只使用PDFBox作为替代方案的解决方案。现在推荐使用不同的库通常被认为是堆栈溢出的糟糕风格。只有当所讨论的库根本不能用于手头的任务时,这才是可行的。使用iText“生成多个pdf文档”也很简单@塞缪尔在他的回答中给出了适当的暗示。不幸的是,OP还没有做出任何反应来说明这个答案是否有用。