PDFBox - PDFBox 加载 PDF 异常清单(数据为 null、数据为空、数据异常、文件为 null、文件不存在、文件异常)

一、数据为 null

java 复制代码
private static byte[] getData() {
    return null;
}
java 复制代码
byte[] data = getData();

try (PDDocument document = PDDocument.load(data)) {

} catch (IOException e) {
    e.printStackTrace();
}
  • 异常未被捕获,目标捕获的异常是 IOException,实际的异常是 NullPointerException,输出结果如下

    Exception in thread "main" java.lang.NullPointerException: Cannot read the array length because "input" is null


二、数据为空

java 复制代码
private static byte[] getData() {
    return new byte[0];
}
java 复制代码
byte[] data = getData();

try (PDDocument document = PDDocument.load(data)) {

} catch (IOException e) {
    e.printStackTrace();
}
  • 异常被捕获,输出结果如下

    java.io.IOException: Error: End-of-File, expected line at offset 0


三、数据异常(PDF 文件损坏)

java 复制代码
private static byte[] getData() {
    try {
        File pdfFile = new File("pdf/example.pdf");

        InputStream pdfInputStream = new FileInputStream(pdfFile);

        ByteArrayOutputStream pdfBuffer = new ByteArrayOutputStream();
        int nRead;
        byte[] data = new byte[1024];
        while ((nRead = pdfInputStream.read(data, 0, data.length)) != -1) {
            pdfBuffer.write(data, 0, nRead);
        }

        byte[] bytes = pdfBuffer.toByteArray();

        for (int i = 0; i < 100; i++) {
            bytes[i] = (byte) (bytes[i] + 1);
        }

        return bytes;
    } catch (IOException e) {
        e.printStackTrace();
    }

    return null;
}
java 复制代码
byte[] data = getData();

try (PDDocument document = PDDocument.load(data)) {

} catch (IOException e) {
    e.printStackTrace();
}
  • 异常被捕获,输出结果如下

    java.io.IOException: Error: Header doesn't contain versioninfo


四、数据异常(非 PDF 文件)

java 复制代码
private static byte[] getData() {
    try {
        File pdfFile = new File("image/test.jpeg");

        InputStream pdfInputStream = new FileInputStream(pdfFile);

        ByteArrayOutputStream pdfBuffer = new ByteArrayOutputStream();
        int nRead;
        byte[] data = new byte[1024];
        while ((nRead = pdfInputStream.read(data, 0, data.length)) != -1) {
            pdfBuffer.write(data, 0, nRead);
        }

        byte[] bytes = pdfBuffer.toByteArray();

        for (int i = 0; i < 100; i++) {
            bytes[i] = (byte) (bytes[i] + 1);
        }

        return bytes;
    } catch (IOException e) {
        e.printStackTrace();
    }

    return null;
}
java 复制代码
byte[] data = getData();

try (PDDocument document = PDDocument.load(data)) {

} catch (IOException e) {
    e.printStackTrace();
}
复制代码
java.io.IOException: Error: Header doesn't contain versioninfo

五、文件为 null

java 复制代码
private static File getFile() {
    return null;
}
java 复制代码
File file = getFile();

try (PDDocument document = PDDocument.load(file)) {

} catch (IOException e) {
    e.printStackTrace();
}

System.out.println("next");
  • 异常未被捕获,目标捕获的异常是 IOException,实际的异常是 NullPointerException,输出结果如下

    Exception in thread "main" java.lang.NullPointerException


六、文件不存在

java 复制代码
private static File getFile() {
    return new File("pdf/test123.pdf");
}
java 复制代码
File file = getFile();

try (PDDocument document = PDDocument.load(file)) {

} catch (IOException e) {
    e.printStackTrace();
}

System.out.println("next");
  • 异常被捕获,输出结果如下

    java.io.FileNotFoundException: pdf\test123.pdf (系统找不到指定的文件。)


七、文件异常(非 PDF 文件)

java 复制代码
private static File getFile() {
    return new File("image/test.jpeg");
}
java 复制代码
File file = getFile();

try (PDDocument document = PDDocument.load(file)) {

} catch (IOException e) {
    e.printStackTrace();
}

System.out.println("next");
  • 异常被捕获,输出结果如下

    java.io.IOException: Error: Header doesn't contain versioninfo

相关推荐
带刺的坐椅2 小时前
(对标 Spring IA 和 LangChain4j)Solon AI & MCP v3.7.0, v3.6.4, v3.5.8 发布(支持 LTS)
java·spring·ai·solon·mcp·langchain4j
林太白2 小时前
rust18-通知管理模块
后端·rust
7澄12 小时前
深入解析 LeetCode 1572:矩阵对角线元素的和 —— 从问题本质到高效实现
java·算法·leetcode·矩阵·intellij-idea
诗9趁年华2 小时前
缓存三大问题深度解析:穿透、击穿与雪崩
java·spring·缓存
阳光明媚sunny2 小时前
分糖果算法题
java·算法
whltaoin2 小时前
【JAVA全栈项目】弧图图-智能图床SpringBoot+MySQL API接口结合Redis+Caffeine多级缓存实践解析
java·redis·spring·缓存·caffeine·多级缓存
坚持就完事了2 小时前
003-HTML之表单
服务器·前端·html
一 乐2 小时前
医疗管理|医院医疗管理系统|基于springboot+vue医疗管理系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·医疗管理系统
华仔啊2 小时前
SpringBoot 2.x 和 3.x 的核心区别,这些变化你必须知道
java·spring boot·后端