java 字符串转pdf_Java pdf转String 并修正格式

本文介绍如何使用Java的PDFBox库将PDF转换为String,并处理转换后的文本格式,使其更易读。通过替换多余的换行符和空白字符,提高了文本的可读性。同时,对比了Python中使用pdfminer进行相同操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

be3b4baf0e985cbb37d38e8b6a89e870.png

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

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

效果如下:

没有转换前输出格式如下

21bb862ca80ade8db53b02f55382eb68.png

转换后格式:

7e12d9b314e63d9c67b2f5ced6baa1b3.png

代码如下:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值