iText 7 itextpdf.kernel.PdfException
iText 7 itextpdf.kernel.PdfException
我正在使用 java 和 iText 7 生成 PDF。
我创建了一个 PDF 模板并在该模板中包含了一些数据模型以使其动态化。
当我第一次使用这个模板生成PDF时,效果很好。但是第二次我尝试修改模板中的数据值然后再次生成它引发了错误。
2016-09-24 18:35:17,589|http-bio-8080-exec-20|INFO|CustomerControllercom.itextpdf.kernel.PdfException: pdf.inderect.object.belong.to.other.pdf.document.Copy.object.to.current.pdf.document
com.itextpdf.kernel.PdfException: pdf.inderect.object.belong.to.other.pdf.document.Copy.object.to.current.pdf.document
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:184)
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:174)
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:104)
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:176)
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:104)
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:176)
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:104)
at com.itextpdf.kernel.pdf.PdfWriter.writeToBody(PdfWriter.java:315)
at com.itextpdf.kernel.pdf.PdfWriter.flushObject(PdfWriter.java:232)
at com.itextpdf.kernel.pdf.PdfDocument.flushObject(PdfDocument.java:1257)
at com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:147)
at com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:124)
at com.itextpdf.kernel.pdf.PdfObjectWrapper.flush(PdfObjectWrapper.java:97)
at com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:410)
at com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:367)
at com.itextpdf.kernel.pdf.PdfDocument.close(PdfDocument.java:720)
at com.itextpdf.layout.Document.close(Document.java:115)
我隔离了导致错误的代码,注释掉了 PdfFont 的所有用法,它工作正常。
我查了一个中文博客,好像这个错误是因为当你想再次打印这个PDF时没有释放一些文档对象(比如我的PdfFont)。
http://blog.csdn.net/fu250/article/details/52604900
如果有人能给出更详细的答案,我将不胜感激。
public final PdfFont regular;
public final PdfFont bold;
public InvoiceRecieptServiceImpl() throws IOException {
this.regular = PdfFontFactory.createFont(FontConstants.HELVETICA);
this.bold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD);
}
我正在使用 java 和 iText 7 生成 PDF。
我创建了一个 PDF 模板并在该模板中包含了一些数据模型以使其动态化。
当我第一次使用这个模板生成PDF时,效果很好。但是第二次我尝试修改模板中的数据值然后再次生成它引发了错误。
2016-09-24 18:35:17,589|http-bio-8080-exec-20|INFO|CustomerControllercom.itextpdf.kernel.PdfException: pdf.inderect.object.belong.to.other.pdf.document.Copy.object.to.current.pdf.document com.itextpdf.kernel.PdfException: pdf.inderect.object.belong.to.other.pdf.document.Copy.object.to.current.pdf.document at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:184) at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:174) at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:104) at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:176) at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:104) at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:176) at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:104) at com.itextpdf.kernel.pdf.PdfWriter.writeToBody(PdfWriter.java:315) at com.itextpdf.kernel.pdf.PdfWriter.flushObject(PdfWriter.java:232) at com.itextpdf.kernel.pdf.PdfDocument.flushObject(PdfDocument.java:1257) at com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:147) at com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:124) at com.itextpdf.kernel.pdf.PdfObjectWrapper.flush(PdfObjectWrapper.java:97) at com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:410) at com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:367) at com.itextpdf.kernel.pdf.PdfDocument.close(PdfDocument.java:720) at com.itextpdf.layout.Document.close(Document.java:115)
我隔离了导致错误的代码,注释掉了 PdfFont 的所有用法,它工作正常。
我查了一个中文博客,好像这个错误是因为当你想再次打印这个PDF时没有释放一些文档对象(比如我的PdfFont)。 http://blog.csdn.net/fu250/article/details/52604900
如果有人能给出更详细的答案,我将不胜感激。
public final PdfFont regular; public final PdfFont bold;
public InvoiceRecieptServiceImpl() throws IOException { this.regular = PdfFontFactory.createFont(FontConstants.HELVETICA); this.bold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD); }