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代码解析String字符串(json格式的)
java解析String字符串(json格式) 需要jar包:json-lib-2.4-jdk15.jar 一. String str = "{\"name\":\&qu ...
- JAVA Asponse.Word Office 操作神器,借助 word 模板生成 word 文档,并转化为 pdf,png 等多种格式的文件
一,由于该 jar 包不是免费的, maven 仓库一般不会有,需要我们去官网下载并安装到本地 maven 仓库 1,用地址 https://www-evget-com/product/564 ...
- Java string和各种格式互转 string转int int转string
Java string和各种格式互转 string转int int转string 简单收集记录下 其他类型转String String s = String.valueOf( value); // 其 ...
- 深入理解Java中的String
一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class String implements java.io.Ser ...
- JAVA字符串格式化String.format()的使用
JAVA字符串格式化-String.format()的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprin ...
- Java高级特性-String、StringBuffer和StringBuilder
Java高级特性-String.StringBuffer和StringBuilder String Java语言中的字符串值都属于String类,虽然有其他方法表示字符串(如字符串数组),但Java一 ...
- java Data、String、Long三种日期类型之间的相互转换
java Data.String.Long三种日期类型之间的相互转换 // date类型转换为String类型 // formatType格式为yyyy-MM-dd HH:mm:ss// ...
- java PDF添加图层,支持多页图层添加
java PDF添加图层,支持多页图层添加 代码: import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...
- JAVA字符串格式化-String.format()的使用 【生成随机数补0操作】
转: JAVA字符串格式化-String.format()的使用 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的s ...
随机推荐
- 从hs_strcpy谈安全——缓冲区溢出
对于大多数的博友来说,hs_strcpy一定会很陌生,因为这个hs_strcpy这个关键字和我的工作有挂钩.本来目前就职于恒生电子,hs_strcpy是中间件中公司定义的字符串拷贝方法,在工作业余之余 ...
- golang安装开发环境配置
本机系统:fedora28 step 1 百度搜索 golang 到 go 语言中文网,下载 golang 包,如果是 linux 系统可以直接点击此连接,也可去 go 语言中文网, https:// ...
- 织梦调用多个栏目typeid="1,2,3"不支持的解决方法
织梦arclist调用副栏目不显示的解决办法: 打开/include/taglib/arclist.lib.php,代码约位于295-296行,查找以下两行代码: if($CrossID=='') $ ...
- 【神经网络】自编码聚类算法--DEC (Deep Embedded Clustering)
1.算法描述 最近在做AutoEncoder的一些探索,看到2016年的一篇论文,虽然不是最新的,但是思路和方法值得学习.论文原文链接 http://proceedings.mlr.press/v48 ...
- getField()与getDeclaredField()的区别
Java的反射机制中,用Class的getField(String name)或getDelaredField(String name)可以得到目标类的指定属性,返回类型是Field. 但这两个是有区 ...
- SQL-Server collation, what is it and how to change db/column collation
The thing about collations is that although database have it's own collation, every table, and every ...
- LINUX开发使用的3个远程工具
1,SecureCRT 2,SSH Secure Shell Client 3,VNC Viewer 如果想VNC Server启动时加载vncserver服务 需要修改/etc/rc.d/rc.lo ...
- 深入 JSX
从本质上讲,JSX 只是为 React.createElement(component, props, ...children) 函数提供的语法糖.JSX代码: 1 2 3 <MyButton ...
- MathExam作业
作业 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 50 40 • Estimate • ...
- pycharm 2017注册码
1.在浏览器的地址栏输入:http://idea.lanyus.com/,该网址,无需修改用户名,点击获取注册码.复制该注册码,粘贴在注册界面的Activation code的输入框中,点击 ok 该 ...