java提取pdf对应的目录及页码实践

 更新时间:2025年09月30日 08:52:25   作者:万能的小帅  
这篇文章主要介绍了java提取pdf对应的目录及页码实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

java提取pdf对应目录及页码

添加依赖

 <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.24</version>
        </dependency>

代码

public static void main(String[] args) throws IOException {
//        File file = new File("E:\\navicat.pdf");
        File file = new File("C:\\Users\\msi\\Desktop\\max.pdf");
        PDDocument document = PDDocument.load(file);


        // 获取PDF文件的结构树根对象
//        PDStructureTreeRoot structureTree = document.getDocumentCatalog().getStructureTreeRoot();

        // 获取PDF文件的文档目录对象
        PDDocumentOutline documentOutline = document.getDocumentCatalog().getDocumentOutline();

        // 输出目录内容
        if (documentOutline != null) {

            printOutline(documentOutline, "",0);
        }


        // 创建PDFTextStripper对象,用于提取文本
//        PDFTextStripper pdfStripper = new PDFTextStripper();
//        // 提取文本
//        String text = pdfStripper.getText(document);
//        // 输出文本内容
//        System.out.println(text);

        // 关闭PDDocument对象
        document.close();

    }

    // 递归输出目录内容
    private static void printOutline(PDOutlineNode documentOutline, String indent,int i) throws IOException {
        PDOutlineItem item = documentOutline.getFirstChild();
        i++;
        indent = indent + "    ";
        while (item != null){
            //        PDPageDestination destination = (PDPageDestination) item.getDestination();
//        int pageNumber = destination.retrievePageNumber();

            int pages = 0;
            if(item.getDestination() instanceof PDPageDestination){
                PDPageDestination pd = (PDPageDestination) item.getDestination();
                pages = pd.retrievePageNumber() + 1;
            }
            if (item.getAction()  instanceof PDActionGoTo) {
                PDActionGoTo gta = (PDActionGoTo) item.getAction();
                if (gta.getDestination() instanceof PDPageDestination) {
                    PDPageDestination pd = (PDPageDestination) gta.getDestination();
                    pages = pd.retrievePageNumber() + 1;
                }
            }
            System.out.println("------" +indent + item.getTitle() + "----"+pages+"   层级:"+i );
            // 递归处理子项
            printOutline(item, indent ,i);
//        获取同级
            item= item.getNextSibling();
        }

    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java Map.Entry的使用方法解析

    Java Map.Entry的使用方法解析

    这篇文章主要介绍了Java Map.Entry的使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

    Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

    SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-web简化Web开发流程,自动配置核心功能,提升开发效率与兼容性,下面通过本文介绍Springboot项目构建时各种依赖详细介绍与依赖关系说明,感兴趣的朋友一起看看吧
    2025-08-08
  • Java Swing组件JFileChooser用法实例分析

    Java Swing组件JFileChooser用法实例分析

    这篇文章主要介绍了Java Swing组件JFileChooser用法,结合实例形式分析了java Swing组件JFileChooser文件选择器的功能、使用方法及相关注意事项,需要的朋友可以参考下
    2017-11-11
  • ShardingSphere如何进行sql重写示例详解

    ShardingSphere如何进行sql重写示例详解

    这篇文章主要为大家介绍了ShardingSphere如何进行sql重写示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 举例分析Python中设计模式之外观模式的运用

    举例分析Python中设计模式之外观模式的运用

    这篇文章主要介绍了Python中设计模式之外观模式的运用,外观模式主张以分多模块进行代码管理而减少耦合,需要的朋友可以参考下
    2016-03-03
  • SpringAOP中的Advisor详解

    SpringAOP中的Advisor详解

    这篇文章主要介绍了SpringAOP中的Advisor详解,平时我们项目中涉及到 AOP,基本上就是声明式配置一下就行了,无论是基于 XML 的配置还是基于 Java 代码的配置,都是简单配置即可使用,今天就来看一下声明式配置的使用,需要的朋友可以参考下
    2023-08-08
  • Spring导入properties配置文件代码示例

    Spring导入properties配置文件代码示例

    这篇文章主要介绍了Spring导入properties配置文件代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Ajax 验证用户输入的验证码是否与随机生成的一致

    Ajax 验证用户输入的验证码是否与随机生成的一致

    本文主要介绍了后台验证用户输入的验证码是否与随机生成的验证码一致的方法,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 超简洁java实现双色球若干注随机号码生成(实例代码)

    超简洁java实现双色球若干注随机号码生成(实例代码)

    这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • java学习之junit单元测试案例(经典版)

    java学习之junit单元测试案例(经典版)

    这篇文章主要介绍了java学习之junit单元测试的相关资料,文中讲解了JUnit单元测试的基本概念、作用、使用assert进行验证、覆盖率分析、BeforeEach和AfterAll的使用、通过反射和注解实现测试,需要的朋友可以参考下
    2024-12-12

最新评论