Java pdf转String 并修正格式

Posted Jacck

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java pdf转String 并修正格式相关的知识,希望对你有一定的参考价值。

在尝试pdf转成String的时候,首先用python的pdfminer和pdfminer3k去尝试转换,然后资料看不太懂,就尝试用了java,

以下是java的pdfbox写的pdf转String函数(main函数没有贴出来,直接用的一个全局函数)  需要加入的包有

百度搜一下pdfbox去官网下载一个放在lib里就行了

 

然后比较重要的突破是能把原来生成格式比较混乱的String处理成比较能看的String

效果如下:

没有转换前输出格式如下

转换后格式:

 

 

 代码如下:

import java.io.*;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

public static String  getText(String file) throws Exception {
// 是否排序
boolean sort = false;
// PDF的本地路径或者url
String pdfFile = file;
// 编码方式
String encoding = "UTF-8";
// 开始提取页数
int startPage = 1;
// 结束提取页数
int endPage = Integer.MAX_VALUE;
// 文件输入流,生成文本文件
Writer output = null;
// 内存中存储的PDF Document
PDDocument document = null;
try{

// 采用PDFTextStripper提取文本
PDFTextStripper stripper = new PDFTextStripper();
// 设置是否排序
stripper.setSortByPosition(sort);
// 设置起始页
stripper.setStartPage(startPage);
// 设置结束页
stripper.setEndPage(endPage);
String text = stripper.getText(document);

//尝试把前边或后边接有空白字符的换行符换成其他的文字,然后把换行符替换掉,之后再把其他文字换成换行符
       //原理是pdf转成String中间有过多的回车换行符\\r\\n这种,但是如果换行符前后都是有文字的(不为空),则这应该是一个被pdf强行换行出来的
text = text.replaceAll("\\\\r\\\\n\\\\s","Jacck"); //这里的Jacck最好换成一个更复杂的文本,作为中间替换物存在尽量在中间转化过程中和文档中没有任何匹配
text = text.replaceAll("\\\\s\\\\r\\\\n","Jacck");
text = text.replaceAll("\\\\n|\\\\r",""); //处理掉被强行加上来的回车换行符
text = text.replaceAll("Jacck","\\r\\n");

return text;
// stripper.writeText(document, output);
}catch(Exception e){
e.printStackTrace();
}finally{
if(document != null){
document.close();
}
}
return "";
}

 

 

之后再python中使用pdfminer也实现了同样的消除pdf大量换行问题,替换核心代码如下,不同的是python三方包在处理pdf后换行不是\\r\\n而是\\n

re是python中的正则表达式,transfered_str是pdf处理后的字符串,与上边java中用的思想一样。

transfered_str = re.sub(r\'\\n\\s\', \'Jacck\', transfered_str)
transfered_str = re.sub(r\'\\s\\n\', \'Jacck\', transfered_str)
transfered_str = re.sub(r\'\\n|\\r\', \'\', transfered_str)
transfered_str = re.sub(r\'\\s{4,}\', \'\\n\', transfered_str)
transfered_str = re.sub(r\'Jacck\',\'\\n\',transfered_str

  

以上是关于Java pdf转String 并修正格式的主要内容,如果未能解决你的问题,请参考以下文章

用Java可以把pdf转doc吗?

如何用纯java代码实现word转pdf?

如何用纯java代码实现word转pdf

java怎样将网页上面的数据以pdf的格式导出,求代码

pdf.js jspdf 和pdfobject 哪个好

用java 实现 word、jpg转PDF