目录
  • 前言
  • pdfbox介绍
    • 开发环境
    • PDFbox依赖
    • 快速开始
  • 结语

    前言

    嗨,大家好,2025年春节已经接近尾声,各地都陆陆续续开工了。近期有朋友做一个小项目正好使用Java读取PDF文件信息。因此记录一下相关过程。

    pdfbox介绍

    PDFbox是一个开源的、基于Java的、支持PDF文档生成的工具库,它可以用于创建新的PDF文档,修改现有的PDF文档,还可以从PDF文档中提取所需的内容。Apache PDFBox还包含了数个命令行工具。

    PDF文件的数据时一系列基本对象的集合:数组,布尔型,字典,数字,字符串和二进制流。

    开发环境

    本次Java基于PDFbox读取处理PDF文件的版本信息如下:

    JDK1.8

    SpringBoot 2.3.0.RELEASE

    PDFbox 1.8.13

    PDFbox依赖

    在初次使用PDFbox的时候需要引入PDFbox依赖。本次使用的依赖包如下:

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

    快速开始

    本示例是将指定目录下的PDF文件中的信息读取出来,存储到新的指定路径的txt文本文件当中。

    class PdfTest {
    
        public static void main(String[] args) throws Exception {
           String filePath ="C:\\Users\\Admin\\Desktop\\cxy1.pdf";
       
            List<String> list = getFiles(basePath);
            for (String filePath : list) {
                long ltime = System.currentTimeMillis();
                String substring = filePath.substring(filePath.lastIndexOf("\\") + 1, filePath.lastIndexOf("."));
                String project = "(juejin.cn)";
                String textFromPdf = getTextFromPdf(filePath);
                String s = writterTxt(textFromPdf, substring + "--", ltime, basePath);
                StringBuffer stringBuffer = readerText(s, project);
                writterTxt(stringBuffer.toString(), substring + "-", ltime, basePath);
            }
            System.out.println("******************** end ************************");
        }
    
        public static List<String> getFiles(String path) {
            List<String> files = new ArrayList<String>();
            File file = new File(path);
            File[] tempList = file.listFiles();
    
            for (int i = 0; i < tempList.length; i++) {
                if (tempList[i].isFile()) {
                    if (tempList[i].toString().contains(".pdf") || tempList[i].toString().contains(".PDF")) {
                        files.add(tempList[i].toString());
                    }
                    //文件名,不包含路径
                    //String fileName = tempList[i].getName();
                }
                if (tempList[i].isDirectory()) {
                    //这里就不递归了,
                }
            }
            return files;
        }
    
        public static String getTextFromPdf(String filePath) throws Exception {
            String result = null;
            FileInputStream is = null;
            PDDocument document = null;
            try {
                is = new FileInputStream(filePath);
                PDFParser parser = new PDFParser(is);
                parser.parse();
                document = parser.getPDDocument();
                PDFTextStripper stripper = new PDFTextStripper();
                result = stripper.getText(document);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (document != null) {
                    try {
                        document.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            Map<String, String> map = new HashMap<String, String>();
            return result;
        }
    
    
        public static String writterTxt(String data, String text, long l, String basePath) {
            String fileName = null;
            try {
                if (text == null) {
                    fileName = basePath + "javaio-" + l + ".txt";
                } else {
                    fileName = basePath + text + l + ".txt";
                }
    
                File file = new File(fileName);
                //if file doesnt exists, then create it
                if (!file.exists()) {
                    file.createNewFile();
                }
                //true = append file
                OutputStream outputStream = new FileOutputStream(file);
    //            FileWriter fileWritter = new FileWriter(file.getName(), true);
    //            fileWritter.write(data);
    //            fileWritter.close();
                OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
                outputStreamWriter.write(data);
                outputStreamWriter.close();
                outputStream.close();
                System.out.println("Done");
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            return fileName;
        }
    
        public static StringBuffer readerText(String name, String project) {
            // 使用ArrayList来存储每行读取到的字符串
            StringBuffer stringBuffer = new StringBuffer();
            try {
                FileReader fr = new FileReader(name);
                BufferedReader bf = new BufferedReader(fr);
                String str;
                // 按行读取字符串
                while ((str = bf.readLine()) != null) {
                    str = replaceAll(str);
                    if (str.contains("D、") || str.contains("D.")) {
                        stringBuffer.append(str);
                        stringBuffer.append("\n");
                        stringBuffer.append("参考: \n");
                        stringBuffer.append("参考: \n");
                        stringBuffer.append("\n\n\n\n");
                    } else if (str.contains("A、") || str.contains("A.")) {
                        stringBuffer.deleteCharAt(stringBuffer.length() - 1);
                        stringBuffer.append("。" + project + "\n");
                        stringBuffer.append(str + "\n");
                    } else if (str.contains("B、") || str.contains("C、") || str.contains("B.") || str.contains("C.")) {
                        stringBuffer.append(str + "\n");
                    } else {
                        stringBuffer.append(str);
                    }
    
                }
                bf.close();
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return stringBuffer;
        }
    
        public static String replaceAll(String str) {
            return str.replaceAll("网", "");
        }
    }

    结语

    好了,以上就是Java中继承相关概念介绍,感谢您的阅读,希望您喜欢,如有不足之处,欢迎评论指正。