【发布时间】:2016-11-23 09:51:35
【问题描述】:
我想为循环的每次迭代创建一个新的 pdf,所以我在 java 中编写了以下代码:
PdfWriter writer;
PdfDocument pdf;
Document document;
int i=0;
while(condition){
writer = new PdfWriter("test_"+Integer.toString(i)+".pdf");
pdf = new PdfDocument(writer);
document = new Document(pdf);
//content code here
document.close()
i++;
}
我在document.close() 命令的行上得到以下异常:
线程“主”com.itextpdf.kernel.PdfException 中的异常:Pdf 间接对象属于其他 PDF 文档。将对象复制到当前 pdf文件。在 com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:184) 在 com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:174) 在 com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:104) 在 com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:176) 在 com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:104) 在 com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:176) 在 com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:104) 在 com.itextpdf.kernel.pdf.PdfWriter.writeToBody(PdfWriter.java:335) 在 com.itextpdf.kernel.pdf.PdfWriter.flushObject(PdfWriter.java:243) 在 com.itextpdf.kernel.pdf.PdfDocument.flushObject(PdfDocument.java:1446) 在 com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:155) 在 com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:128) 在 com.itextpdf.kernel.pdf.PdfObjectWrapper.flush(PdfObjectWrapper.java:96) 在 com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:489) 在 com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:448) 在 com.itextpdf.kernel.pdf.PdfDocument.close(PdfDocument.java:739) 在 com.itextpdf.layout.Document.close(Document.java:120) 在 gr.moh.Pdf.main(Pdf.java:224)
我已经尝试了很多,但我找不到错误的原因。如果我在没有循环的情况下这样做,它就可以工作。有什么帮助吗?
P.S: 我用的是 itext 7
【问题讨论】:
-
您似乎在
//content code here的多次循环运行中使用了一些 PDF 对象,即用于多个目标 PDF。这可能会导致像您这样的异常。 -
谢谢!我在循环上方使用样式来为段落分配字体。我将它们添加到循环中,它可以工作!