PDFBox 2.0.3:PDDocument 临时文件已经关闭

PDFBox 2.0.3: PDDocument Scratch File Already Closed

我正在 Java 中使用这样的代码生成 PDDocument...

HashMap<Integer, PDPageContentStream> mPageContentStreamMap = new HashMap<>();
PDDocument doc = new PDDocument();
for (int i = 1; i <= mNumPages; i++) {
        PDPage page = new PDPage(PDRectangle.A4);
        page.setRotation(90);
        PDPageContentStream pageContentStream = new PDPageContentStream(doc, page);
        contentStreamMap.put(i, pageContentStream);
        doc.addPage(page);
    }
}

然后像这样保存并关闭文档...

for (int i : mPageContentStreamMap.keySet()) {
    mPageContentStreamMap.get(i).close();
}

doc.save("test-filename");
doc.close();

这在第一个 运行 上工作正常;然而,当我多次 运行 我的程序时,我得到以下错误

java.io.IOException: Scratch file already closed
at org.apache.pdfbox.io.ScratchFile.checkClosed(ScratchFile.java:390)
at org.apache.pdfbox.io.ScratchFileBuffer.<init>(ScratchFileBuffer.java:78)
at org.apache.pdfbox.io.ScratchFile.createBuffer(ScratchFile.java:403)
at org.apache.pdfbox.cos.COSStream.createOutputStream(COSStream.java:208)
at org.apache.pdfbox.pdmodel.common.PDStream.createOutputStream(PDStream.java:224)
at org.apache.pdfbox.pdmodel.PDPageContentStream.<init>(PDPageContentStream.java:259)
at org.apache.pdfbox.pdmodel.PDPageContentStream.<init>(PDPageContentStream.java:121)

如果我在没有 "doc.close();" 行的情况下重新 运行 我的程序,这个错误就会消失,但是 PDF 的输出是重复的(即生成一个新的 PDF,但内容来自上一个 PDF 和当前 PDF 的内容)。

有没有办法关闭流并创建多个 PDF 而不会 运行进入暂存文件错误?

我为我的绘图逻辑创建了一个单例对象,意思是在第一个 运行 之后,相同的对象在不应该的时候被重用,因为输入(正在绘制的内容)已经改变.