Java 解析PDF内容
最近遇到一个老师有点小需求,需要读取一些pdf的内容到数据库里面进行检索,因为一直都在合作所以找到了我。 百度了一下发现在java下解决pdf内容解析的办法也有不少,我选了apache的pdfbox来做pdf的内容解析工作,pdfbox官网 开发环境
spring boot
先看pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pdf</groupId>
<artifactId>pdf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>pdf</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
<version>2.0.8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我做测试的是偶pdfbox最新版本为2.0.4现在可能有更新的版本,自己按照需要进行修改吧。 我这里做的测试是从pdf解析出文本数据,然后再将解析出来的文本数据保存到一个txt文本,贴代码
@Test
public void pdfTest() {
try {
// 是否排序
boolean sort = false;
// 开始提取页数
int startPage = 1;
// 结束提取页数
int endPage = Integer.MAX_VALUE;
String content = null;
PrintWriter writer = null;
//pdf文本路径
String path = "/home/jacky/upload-dir/test.pdf";
//输出txt文本路径
String target="/home/jacky/upload-dir/test.txt";
PDDocument document = PDDocument.load(new File(path));
PDFTextStripper pts = new PDFTextStripper();
endPage = document.getNumberOfPages();
System.out.println("Total Page: " + endPage);
pts.setStartPage(startPage);
pts.setEndPage(endPage);
try {
//content就是从pdf中解析出来的文本
content = pts.getText(document);
writer = new PrintWriter(new FileOutputStream(target));
writer.write(content);// 写入文件内容
writer.flush();
writer.close();
} catch (Exception e) {
throw e;
}finally {
if (null != document)
document.close();
}
System.out.println("Get PDF Content ...");
} catch (Exception e) {
e.printStackTrace();
}
}
这样我们就完成了一个简单的解析pdf文本的测试,但是请注意我这里示例的pdf保存的是文本类型的内容而不是图片形式的文本内容。我这里只是简单的介绍了一下pdfbox读取文本格式的内容,官方的svn代码提供了很多的demo,所以可以checkout一下官方的示例代码
svn checkout http://svn.apache.org/repos/asf/pdfbox/trunk/examples