Java:获取PDF文件的总页数

引入依赖

xml 复制代码
<!--pdf-->
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.24</version>
</dependency>

代码工具类

java 复制代码
package com.example.util;

import org.apache.pdfbox.pdmodel.PDDocument;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * PDF工具类
 */
public class PdfUtil {
    /**
     * 获取PDF文件的总页数
     *
     * @param pdfUrl
     * @return
     */
    public static int getPdfTotalPage(String pdfUrl) {

        if (pdfUrl == null || "".equals(pdfUrl)) {
            return 0;
        }

        int pages = 0;

        URL url = null;
        InputStream inputStream = null;
        PDDocument pdDocument = null;

        // 尝试打开文件流
        try {
            url = new URL(pdfUrl);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        if (url != null) {
            try {
                inputStream = url.openStream();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // 读取pdf的页数
        if (inputStream != null) {
            try {
                pdDocument = PDDocument.load(inputStream);
                pages = pdDocument.getNumberOfPages();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // 善后工作
        if (pdDocument != null) {
            try {
                pdDocument.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return pages;
    }
}

测试类

java 复制代码
package com.example.util;

import org.junit.jupiter.api.Test;

import java.io.IOException;

public class PdfUtilTest {
    @Test
    public void getPdfTotalPage() throws IOException {
        String pdfUrl = "https://pdf.dfcfw.com/pdf/H3_AP202402231623204056_1.pdf?1708699798000.pdf";
        int pdfTotalPage = PdfUtil.getPdfTotalPage(pdfUrl);
        System.out.println(pdfTotalPage); // 17
    }
}

参考文章

相关推荐
FQNmxDG4S4 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
前端老石人5 小时前
HTML 字符引用完全指南
开发语言·前端·html
matlab_xiaowang5 小时前
Redux 入门:JavaScript 可预测状态管理库
开发语言·javascript·其他·ecmascript
虹科网络安全5 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje6 小时前
Java语法进阶
java·开发语言·jvm
rKWP8gKv76 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫6 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287926 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本6 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
止语Lab6 小时前
从手动到框架:Go DI 演进的三个拐点
开发语言·后端·golang