itext7 批量生成pdf遇到的异常及分析和处理

能正常生成第一个pdf文件,然后之后生成的pdf都会抛出以下异常:

com.itextpdf.kernel.PdfException: pdf.inderect.object.belong.to.other.pdf.document.Copy.object.to.current.pdf.document

我们定位到源码出现异常的位置:

 if (document != null && !indirectReference.getDocument().equals(document)) {
            throw new PdfException(PdfException.PdfInderectObjectBelongToOtherPdfDocument);
        }

由于当前的document的对象和indirectReference(间接引用)的document对象不一致,导致异常抛出,问题的源头找到了,现在需要找到是什么导致两个document不一致。
猜测:第一个document对象没有正常释放。
代码中什么会导致document的对象释放失败呢?看代码,我将字体写成了单例模式,当时想着是由于中文字体需要地方都需要用到,为了避免每次都new一个新的。可能是由于字体无法释放才导致的,做法是将单例模式取消,再运行代码就不会再出现以上的异常了。

public static PdfFont cnFont = null;

这个问题折磨我挺长时间,希望对大家使用itext7的过程中有所帮助。

你可能感兴趣的:(经验总结)