2016-09-24 251 views
1

我使用java和iText 7来生成PDF。iText 7 itextpdf.kernel.PdfException

我创建了一个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) 
+0

我正在使用的iText 7版本:7.0.0 – VincentGeng

+0

最可能使用itext的代码不正确。 – mkl

+1

向我们显示您的代码。 –

回答

0

我孤立的代码导致了错误,注释掉了所有使用PdfFont,它工作正常。

我查了一个中文博客,好像这个错误是由于没有发布一些文档对象(比如PdfFont在我的情况下),当你想再次打印这个PDF时。 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); }

+1

你还没有显示你的代码。我不懂中文,谷歌翻译没有帮助。你是否可以为不同的目标文档使用相同的'PdfFont'实例。我会反对这个建议。 – mkl