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

使用Java PDFBox读取PDF仅返回第一页,请求问题排查帮助

用PDFBox读取PDF仅能获取第一页的排查方案

问题情况

尝试用Java结合PDFBox读取PDF文件,但无论通过URL搭配BufferedInputStream加载,还是直接读取本地文件,控制台输出的页数始终为1,只能获取第一页内容。怀疑问题出在文件格式或安全软件限制上。

测试代码

第一种实现(URL加载):

public static PDDocument openPDFfile(String path) {

        PDDocument document = null;
        try {
            URL url = new URL(path);
            BufferedInputStream file = new BufferedInputStream(url.openStream());
            document = PDDocument.load(file);
            System.out.println(document.getNumberOfPages());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("The PDF file doesnt exist");
        }
        return document;
    }

第二种实现(本地文件加载):

public static PDDocument openPDFfile(String path) {

        PDDocument document = null;
        try {
            document = PDDocument.load(new File("pdf.pdf"));
            System.out.println(document.getNumberOfPages());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("The PDF file doesnt exist");
        }
        return document;
    }

排查与解决方法

  • 修正代码硬编码问题:第二种实现里没有使用方法参数path,而是硬写了"pdf.pdf",这可能导致测试时加载的不是目标文件,建议改成document = PDDocument.load(new File(path));。
  • 升级PDFBox版本:旧版本PDFBox存在线性化PDF(Web优化PDF)的页数解析bug,建议升级到最新稳定版(比如2.0.32),Maven依赖示例:
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.32</version>
</dependency>
  • 处理PDF加密/权限限制:如果PDF存在无密码加密,可能会限制页数读取,试试在加载后添加解密逻辑:
if (document != null && document.isEncrypted()) {
    document.decrypt("");
}
  • 重新保存PDF文件:用Adobe Acrobat或其他PDF工具打开目标PDF,选择“另存为”并取消“Web优化”选项,再用代码测试读取。
  • 验证PDF实际页数:先确认目标PDF确实包含多页,排除文件本身只有一页的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:27:22