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
相关产品推荐
相关产品推荐

