You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Loader.loadPDF加载PDF/A转BufferedImage仅显示单个字符问题排查

问题原因及解决方案

核心问题出在pageConvertToImage方法里的文档提前关闭:
在try-with-resources块中,你创建PDFRenderer之后立刻调用了document.close(),但renderImageWithDPI方法需要依赖打开的文档资源才能完整渲染页面内容。文档关闭后,渲染器只能读取到部分残留资源,导致只显示单个字符。

修正后的代码

PDDocument document = Loader.loadPDF(pdfDokument);
for (int pageIndex = 0; pageIndex < document.getNumberOfPages(); ++pageIndex) {
    var bim = ConvertPdfToImageUtil.pageConvertToImage(document.getPage(pageIndex), 300, ImageType.RGB);
    // 按页码命名文件,避免后续页面覆盖之前的内容
    ImageIO.write(bim, "png", new File("test_" + pageIndex + ".png"));
}
document.close(); // 处理完所有页面后再关闭原文档

public static BufferedImage pageConvertToImage(PDPage page, int dpi, ImageType imageType) throws IOException {
    // try-with-resources会自动在代码块结束后关闭文档,无需手动调用close()
    try (PDDocument document = new PDDocument()) {
        document.addPage(page);
        PDFRenderer renderer = new PDFRenderer(document);
        // 移除提前关闭document的代码,确保渲染时文档资源可用
        return renderer.renderImageWithDPI(0, dpi, imageType);
    }
}

额外注意事项

  • 原循环中始终输出到test.png,会导致后续页面覆盖之前的生成结果,建议按页码区分文件名。
  • 加载的原PDF文档document要在所有页面处理完成后再关闭,避免资源泄漏。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:03:18