使用itextpdf提取pdf内容
package test; import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern; import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.util.PDFTextStripper; import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfTextExtractor; public class UploadUtils { private final static Pattern pattern = Pattern.compile("\\d+");
private final static int stateParaOverFlag = 800;
private final static int thankParaOverFlag = 800; /**
* 读取pdf参考文献内容
*
* @param s
* @return
*/
public String readPdf(String filePath) {
StringBuilder buffer = new StringBuilder();
FileInputStream fis = null;
PdfReader pdfReader = null;
COSDocument cosDocument = null;
String[] paragraphs = null;
PDFParser p;
boolean addBool = true;
boolean judgeState = false;
boolean judgeThank = false;
StringBuilder tempSb = new StringBuilder();
try {
fis = new FileInputStream(filePath);
p = new PDFParser(fis);
p.parse();
cosDocument = p.getDocument();
// 加密文档判断
if (cosDocument.isEncrypted()) {
StringBuilder tempContent = new StringBuilder();
pdfReader = new PdfReader(filePath);
int i = pdfReader.getNumberOfPages();
for (int j = 1; j <= i; j++) {
tempContent.append(PdfTextExtractor.getTextFromPage(pdfReader, j));
}
paragraphs = tempContent.toString().split("\n");
} else {
PDFTextStripper ts = new PDFTextStripper();
paragraphs = ts.getText(p.getPDDocument()).split("\n");
}
boolean mark = false;
List<Integer> errornum = new ArrayList<Integer>();
int flag = 0;
int endRange = paragraphs.length * 70 / 100;
int rangeFlag = 0;
for (String lineContent : paragraphs) {
if (judgeState) {
tempSb.append(lineContent);
if (tempSb.length() >= stateParaOverFlag) {
judgeState = false;
addBool = true;
tempSb.delete(0, tempSb.length() - 1);
}
}
if (judgeThank) {
tempSb.append(lineContent);
if (tempSb.length() >= thankParaOverFlag) {
judgeThank = false;
addBool = true;
tempSb.delete(0, tempSb.length() - 1);
}
}
if (addBool) {
buffer.append(lineContent);
}
if (mark && rangeFlag >= endRange) {
if (lineContent.length() < 5) {
errornum.add(++flag);
rangeFlag++;
continue;
}
if (pattern.matcher(lineContent.substring(0, 5)).find()) {
if (flag != 0) {
flag = 0;
errornum.clear();
}
} else {
errornum.add(++flag);
}
if (errornum.size() > 2) {
mark = false;
}
}
rangeFlag++;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
fis = null;
}
}
if (pdfReader != null) {
pdfReader.close();
}
if (cosDocument != null) {
try {
cosDocument.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
cosDocument = null;
}
}
}
return buffer.toString();
} public static boolean isBlank(CharSequence cs) {
int strLen;
if (cs == null || (strLen = cs.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if (Character.isWhitespace(cs.charAt(i)) == false) {
return false;
}
}
return true;
} public static void main(String[] args) {
// System.err.println(new UploadUtils()
// .readPdf("/opt/fileCache/2014/125/13/shuangping_D7037870CF4FC5C421A3E5359DCF8BBE.pdf"));
System.err.println(new UploadUtils().readPdf("E:\\MyWork\\guyezhai\\pdf提取\\路径依赖视角下高校新专业建设的策略创新(1).pdf")); } }
其中用到的jar包:
bcpkix-jdk15on-1.47.jar
bcprov-jdk15on-1.49.jar
commons-logging-1.1..jar
fontbox-1.8..jar
icu4j-4.0..jar
itextpdf-5.4..jar
jempbox-1.8..jar
pdfbox-1.8..jar
使用itextpdf提取pdf内容的更多相关文章
- 利用python第三方库提取PDF文件的表格内容
小爬最近接到一个棘手任务:需要提取手机话费电子发票PDF文件中的数据.接到这个任务的第一时间,小爬决定搜集各个地区各个时间段的电子发票文件,看看其中的差异点.粗略统计下来,PDF文件的表格框架是统一的 ...
- java 获取pdf内容
1. 说明 将pdf中的文字读取处理还有一些限制:1. 文档的安全属性不能过于严格 2. 不能存在图片. 2. 直接贴相关的源码 有两种读取方式,maven对应的pom文件 <dependenc ...
- Python使用Tabula提取PDF表格数据
今天遇到一个批量读取pdf文件中表格数据的需求,样式大体是以下这样: python读取PDF无非就是三种方式(我所了解的),pdfminer.pdf2htmlEX 和 Tabula.综合考虑后,选择了 ...
- LIMS系统仪器数据采集-使用xpdf解析pdf内容
不同语言解析PDF内容都有各自的库,比如Java的pdfbox,.net的itextsharp. c#解析PDF文本,关键代码可参考: http://www.cnblogs.com/mahongbia ...
- Java从URL获取PDF内容
Java直接URL获取PDF内容 题外话 网上很多Java通过pdf转 HTML,转文本的,可是通过URL直接获取PDF内容,缺没有,浪费时间,本人最近工作中刚好用到,花了时间整理下,分享出来,防止浪 ...
- Java之生成Pdf并对Pdf内容操作
虽说网上有很多可以在线导出Pdf或者word或者转成png等格式的工具,但是我觉得还是得了解知道是怎么实现的.一来,在线免费转换工具,是有容量限制的,达到一定的容量时,是不能成功导出的;二来,业务需求 ...
- Java文件操作系列[1]——PDFBox实现分页提取PDF文本
需求:用java分页提取PDF文本. PDFBox是一个很好的可以满足上述需求的开源工具. 1.PDF文档结构 要解析PDF文本,我们首先要了解PDF文件的结构. 关于PDF文档,最重要的几点: 一, ...
- Java 添加、提取PDF中的图片
Spire.Cloud.SDK for Java提供了PdfImagesApi接口可用于添加图片到PDF文档addImage().提取PDF中的图片extractImages(),具体操作步骤和Jav ...
- spring boot:用itextpdf处理pdf表格文件(spring boot 2.3.2)
一,什么是itextpdf? 1,itextpdf的用途 itextpdf是用来生成PDF文档的一个java类库, 通过iText可以生成PDF文档, 还可以把XML/Html文件转化为PDF文件 2 ...
随机推荐
- ACM ICPC 2016–2017, NEERC, Northern Subregional Contest Problem J. Java2016
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:2s 空间限制:256MB 题目大意: 给定一个数字c 用 " ...
- 【IdentityServer4文档】- 术语&演示服务器和测试
术语 你需要了解一下,规范.文档和对象模型使用的术语有哪些. IdentityServer IdentityServer 是一个 OpenID Connect 提供程序 - 它实现了 OpenID C ...
- 用vs调试项目的时候报HTTP 错误 403.14 - Forbidden
曾经遇到过这种诡异的问题,你一定想不到,这个可能是因为你用svn合并的时候,导致了你的dll文件出了问题. 竟然可以用主干的dll替换的方式,解决掉这个问题.
- PAT 甲级 1040 Longest Symmetric String
https://pintia.cn/problem-sets/994805342720868352/problems/994805446102073344 Given a string, you ar ...
- 小记IptabLes和IptabLex病毒清理过程
去年有台Linux服务器被黑了,看了500万行日志(现在觉得当时好厉害呀),反正当时的日志文件有700Mb以上大.前两天师兄告诉我,信息中心的老师给他说我们有台服务器应该是被人入侵了,当作内网的跳板, ...
- 使用python操作Memcache、Redis、RabbitMQ、
Memcache 简述: Memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要 ...
- 常用的Redis客户端的并发模型(转)
伪代码模型 # get lock : timestamp = current Unix time + lock = SETNX lock.foo timestamp or (now() > ...
- 第119天:移动端:CSS像素、屏幕像素和视口的关系
移动前端中常说的 viewport (视口)就是浏览器显示页面内容的屏幕区域.其中涉及几个重要概念是 dip ( device-independent pixel 设备逻辑像素 )和 CSS 像素之间 ...
- 【数据库】同一字段根据不同条件更新的sql语句的写法
语法: update test set 字段1=case when 条件1 then 值1 when 条件2 then 值2 end 示例: update PMS_ProjectInfo set Pr ...
- MethodHandle
JDK7为间接调用方法引入新的API,在java.lang.invoke包下,可以看作为反射的升级版,但它不像反射API那样显得冗长.繁重 主要的类 MethodHandle 方法句柄.对可直接执行的 ...