首页 > 编程语言 >java导入并解析提取PDf文件中内容

java导入并解析提取PDf文件中内容

时间:2024-06-16 16:00:36浏览次数:20  
标签:java String void extractDegreeGPA 导入 学分 PDF PDf fileChooser

1、下载pdfbox-app-2.0.31.jar并导入到项目结构中

下载地址:Apache Download Mirrors

2.重点:实现选择本地PDF文件代码
//选择PDF文件
    private void selectPdfFile() {
        JFileChooser fileChooser = new JFileChooser();
        int result = fileChooser.showOpenDialog(this);
        if (result == JFileChooser.APPROVE_OPTION) {
            File selectedFile = fileChooser.getSelectedFile();
            extractDegreeGPA(selectedFile.getAbsolutePath());
        }
    }

extractDegreeGPA是我具体实现的功能,在下边

3.这里是我实现的具体提取功能,这里的PDF内容是课程学分成绩等,具体涉及到提取表格的某行列信息。
private void extractDegreeGPA(String filePath) {
    try (PDDocument document = PDDocument.load(new File(filePath))) {
        PDFTextStripper pdfStripper = new PDFTextStripper();

        // 提取PDF中的文本
        String text = pdfStripper.getText(document);

        // 找到最后一页的学位课平均学分绩点
        String[] pages = text.split("\\f"); // 分隔符是换页符
        String lastPage = pages[pages.length - 1];

        // 定位到最后一行的学位课平均学分绩点
        String[] lines = lastPage.split("\n");
        for (int i = lines.length - 1; i >= 0; i--) {
            String line = lines[i].trim();
            if (line.startsWith("学位课")) {
                String[] parts = line.split("\\s+");
                String degreeGPA = parts[parts.length - 2];
                //System.out.println("学位课平均学分绩点: " + degreeGPA);
                result.setText(degreeGPA);
                break;
            }
        }
    } catch (IOException ex) {
        JOptionPane.showMessageDialog(this, "无法读取PDF文件:" + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
    }
4.测试代码

该方法一般在某按钮事件发生时调用,这里并没有在具体场景调用,只是简单说明意思

public static void main(String args[]) {
       selectPdfFile();
    }
5.运行结果

出现该窗口,选择所需PDF文件能实现所需功能即可。

标签:java,String,void,extractDegreeGPA,导入,学分,PDF,PDf,fileChooser
From: https://blog.csdn.net/J_R___/article/details/139720971

相关文章

  • JAVA多线程实现的三种方式
    1.继承Thread类classExtendThreadextendsThread{//继承自ThreadprivateStringname;publicExtendThread(Stringname){this.name=name;}@Overridepublicvoidrun(){//必须重写run方法,并......
  • 1832javaERP管理系统之车间计划管理Myeclipse开发mysql数据库servlet结构java编程计算
    一、源码特点 javaerp管理系统之车间计划管理是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助采用了serlvet设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。......
  • (pdf)图解java多线程设计模式.pdf (结城浩)
    书:pan.baidu.com/s/1tGbGhhQ3Ez1SIkqdEREsjQ?pwd=eqp0提取码:eqp0线程基础知识:介绍线程的概念、生命周期、状态转换等基本内容,为后续的多线程设计打下基础。Java线程API:详细讲解Java中线程的创建、启动、控制以及线程间的协作机制,如Thread类、Runnable接口等。线程同步与互斥:......
  • (pdf)Head First JavaScript程序设计 ([美]Eric T. Freeman,[美]Elisabeth Robson 著;袁国
    书:pan.baidu.com/s/199LHxxIlMixw3gYSY8tyPw?pwd=ywxg提取码:ywxg数据类型与变量:JavaScript支持多种数据类型,包括数字、字符串、布尔值、对象、数组等。变量用于存储这些类型的值。函数:函数是JavaScript中执行特定任务的可重用代码块。它们可以接受参数并返回结果。条件语句:使......
  • Android面试题之Java 泛型和Kotlin泛型
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点定义:JDK5引入的一种参数化类型特性继承和实现接口可以多个staticclassA{}staticinterfaceB{}staticinterfaceC{}//类必须在接口的前面staticclassD<......
  • (书和笔记)学习JavaScript数据结构与算法(第3版) ([巴西] 洛伊安妮 • 格罗纳)
    书:pan.baidu.com/s/199LHxxIlMixw3gYSY8tyPw?pwd=ywxg提取码:ywxg数据结构与算法基础:介绍了数据结构与算法的基本概念、重要性以及它们在JavaScript中的应用。数组:深入讲解了数组的定义、操作、常用方法及其在JavaScript中的应用,包括多维数组的构建与访问。栈:详细阐述了栈的概......
  • (书和笔记)学习JavaScript数据结构与算法第二版
    书:pan.baidu.com/s/199LHxxIlMixw3gYSY8tyPw?pwd=ywxg提取码:ywxgJavaScript与数据结构基础:介绍了JavaScript语言的基本特性和数据结构的定义,为后续内容打下基础。数组及其操作:讲解了数组的定义、特性以及常见的操作方法,如增删改查等。栈与队列:详细阐述了栈(后进先出)和队列(先进......
  • Java-集合类-Arrays.asList()和subList使用需要注意的大坑
    Arrays.asList和subList使用需要注意的大坑一、Java-集合类-Arrays.asList()大坑1、不可修改列表大小&&原始数组与列表共享数据2、对于基本类型数组的使用限制两个错误案例wrong1wrong2二、Java-集合类-list.subList注意事项大坑1、ConcurrentModificationException2......
  • Java中栈(Stack)和队列(Queue)有什么区别?如何实现栈和队列?
    在计算机科学中,栈(Stack)和队列(Queue)是两种基础且广泛使用的数据结构,它们在算法设计和系统开发中扮演着重要角色。本文将深入探讨这两种数据结构的基本概念、操作方式以及在Java中的实现。栈:后进先出(LIFO)栈是一种遵循后进先出(LastInFirstOut,LIFO)原则的数据结构。在栈中,最......
  • 解锁Java高效并发:newFixedThreadPool深度剖析与实战
    1.引言在Java的并发编程中,线程池是一个重要的概念。而newFixedThreadPool作为Java标准库java.util.concurrent中Executors类的一个静态方法,为开发者提供了一个固定大小的线程池实现。本文旨在深入剖析newFixedThreadPool的原理、源码实现以及最佳实践,更好地理解和应用它。......