当前位置: 首页 > 知识库问答 >
问题:

PDFBox:“你没有在打印后立即关闭PDFDocument”

阮炯
2023-03-14

我使用以下Java代码打印PDF文档:

PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintService(printer);
File file = new File(fileName);
PDDocument doc = PDDocument.load(file);
PDFPageable pageable = new PDFPageable(doc);
job.setPageable(pageable);
System.out.println("-- before printing --");
job.print();
System.out.println("-- after printing --");
doc.close();

控制台上的输出是:

-- before printing --
Aug 03, 2018 12:05:09 PM org.apache.pdfbox.cos.COSDocument finalize
WARNUNG: Warning: You did not close a PDF Document
-- after printing --

为什么我会收到这个警告?

共有2个答案

太叔天宇
2023-03-14

您正在加载PDI文档,但没有关闭它。我想你需要做:

String yourText;
PDDocument yourDocument = PDDocument.load("yourDocument");
try {
    yourText = pdfs.getText(yourDocument);
} finally {
    yourDocument.close();
}

当pdf文档完成且尚未关闭时,会发出此警告。

有关警告信息,请参阅此处:

/**
 * Warn the user in the finalizer if he didn't close the PDF document. The method also
 * closes the document just in case, to avoid abandoned temporary files. It's still a good
 * idea for the user to close the PDF document at the earliest possible to conserve resources.
 * @throws IOException if an error occurs while closing the temporary files
 */
protected void finalize() throws IOException
{
    if (!closed) {
        if (warnMissingClose) {
            log.warn( "Warning: You did not close a PDF Document" );
        }
        close();
    }
}
孔乐邦
2023-03-14

正如在评论中所讨论的,通过更新到最新的jdk版本,问题得以解决:从jdk 1.8.0_131到1.8.0_181。我只能怀疑旧的jdk有一个bug,即对象被过早地标记为“未使用”,因此被最终确定。

 类似资料:
  • 问题内容: 建立与服务器的连接,并显示连接打开的警报!但是之后,连接立即关闭。服务器没有调用close,并且控制台中似乎没有其他错误。chrome和firefox中都在发生这种情况。 我在网上看了一堆不同的类似示例,但都无济于事。 问题答案: 解决它! 我要做的就是在websocket连接关闭之前阻止处理程序返回

  • 我正在尝试加载PDF文档并打印它。整个过程都正常,但我收到了以下警告“警告:您没有关闭PDF文档”,我不明白为什么在我关闭文档后会出现这种情况。它出现在第11行(job.print();)。因为它是在打印时发生的,所以我无法调试它。

  • 我的目标是让我的容器数据库进入挂载模式,以执行系统更改语句来启用闪回功能。 为闪回事务配置数据库 环境:OS Win 8.1 64位,Oracle 12c(12.1.0.2.0)64位 我验证了我的侦听器和db服务都在运行。 Listener.log 9月08 13:31:42 2015日星期二系统参数文件为C:\OracleServer\Products\12.1.0\dbhome_1\Netw

  • 注意:绝对路径指向此“/data/user/0/com.package.name/pdffolder/sample.pdf”

  • 我使用JarSplice创建了一个胖jar文件,但是当我启动它时,我得到一个窗口(大小可以),它在半秒后关闭。。。 在“addjars”部分中,我添加了从Eclipse导出的jar文件,以及我正在使用的所有库jar。在本机部分,我只为lwjgl添加Windows本机。我想我写了正确的主类。 我做错了什么?我怎样才能解决这个问题? 注意:我使用的是最新版本的eclipse和jdk。

  • 场景是:您在窗口(a)中,单击按钮/链接启动打印过程,然后打开一个新窗口(B),其中包含要打印的内容,打印对话立即显示,如果您单击窗口(B)的取消按钮,那么您应该可以再次打印,但当您单击窗口(B)的打印按钮打印时,您可以打印,但窗口(a)的按钮不能再次继续打印。给我一些解决方案…!!!在chrome,Firefox和internet explorer上工作