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

相关推荐
橘颂TA3 分钟前
【Linux】死锁四条件的底层逻辑:从锁冲突到 STL 组件的线程安全实践(Ⅵ)
linux·运维·服务器·c++·死锁
毕设源码-郭学长4 分钟前
【开题答辩全过程】以 基于SSM的高校运动会管理系统的设计与实现为例,包含答辩的问题和答案
java·eclipse
qq_5470261796 分钟前
Maven 使用指南
java·maven
xiaolyuh12314 分钟前
Arthas修改类(如加日志)的实现原理
java
栗子叶18 分钟前
Java对象创建的过程
java·开发语言·jvm
勇哥java实战分享23 分钟前
短信平台 Pro 版本 ,比开源版本更强大
后端
学历真的很重要28 分钟前
LangChain V1.0 Context Engineering(上下文工程)详细指南
人工智能·后端·学习·语言模型·面试·职场和发展·langchain
有一个好名字28 分钟前
力扣-从字符串中移除星号
java·算法·leetcode
计算机毕设VX:Fegn089531 分钟前
计算机毕业设计|基于springboot + vue二手家电管理系统(源码+数据库+文档)
vue.js·spring boot·后端·课程设计
zfj32137 分钟前
CyclicBarrier、CountDownLatch、Semaphore 各自的作用和用法区别
java·开发语言·countdownlatch·semaphore·cyclicbarrier