这是我的代码:
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吗?
答案 0 :(得分:2)
好吧,你的意图并不是很清楚你的代码和问题,所以我将按照以下假设进行操作:
您在循环的第二次迭代中得到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
中为每个新文档更改文件的名称。