Java基于PDFbox实现读取处理PDF文件

网友投稿 1047 2022-08-29


Java基于PDFbox实现读取处理PDF文件

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

前言

嗨,大家好,2022年春节已经接近尾声,各地都陆陆续续开工了。近期有朋友做一个小项目正好使用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依赖。本次使用的依赖包如下:

org.apache.pdfbox

pdfbox

1.8.13

快速开始

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

class PdfTest {

public static void main(String[] args) throws Exception {

String filePath ="C:\\Users\\Admin\\Desktop\\cxy1.pdf";

List 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 getFiles(String path) {

List files = new ArrayList();

File file = new File(path);

File[] http://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();

} cxDnmrqDQatch (IOException e) {

e.printStackTrace();

}

}

if (document != null) {

try {

document.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

Map map = new HashMap();

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中继承相关概念介绍,感谢您的阅读,希望您喜欢,如有不足之处,欢迎评论指正。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python的字符串模板(Template)使用操作实例讲解
下一篇:Python原始字符串操作符和Unicode操作符操作实例讲解源码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~