在java中制作多个pdf文档

时间:2017-05-31 07:21:59

标签: 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 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); 
    } 

我收到此异常:com.itextpdf.text.DocumentException:文档已关闭。您无法添加任何元素。

有人可以帮我解决这个问题,以便可以创建其他pdf并添加paragrph吗?

2 个答案:

答案 0 :(得分:2)

好吧,你的意图并不是很清楚你的代码和问题,所以我将按照以下假设进行操作:

  1. 您正在为正在处理的每个框创建报告
  2. 每个报告都需要是一个单独的PDF文件
  3. 您在循环的第二次迭代中得到DocumentException,您正尝试通过doc.close();向上一次迭代中已关闭的文档添加内容。 'doc.close'将最终确定Document,并将所有待处理的内容写入任何链接的PdfWriter

    如果您希望为每个框创建单独的pdf,则还需要在循环语句中创建单独的Document,因为通过PdfWriter创建新的PdfWriter.getInstance(doc, new FileOutputStream("Order" + x + ".pdf"));不会创建一个新的Document

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

答案 1 :(得分:-1)

您可以使用Apache PDFBox

尝试这样的事情
File outputFile = new File(path);
outputFile.createNewFile();
PDDocument newDoc = new PDDocument();

然后创建一个PDPage并在该页面中写下您想要写的内容。页面准备好后,将其添加到newDoc,最后保存并关闭它

newDoc.save(outputFile);

newDoc.close()

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