最常见的一种PDF文本抽取工具就是PDFBox了。PDFBox是一个开源的Java PDF库,这个库允许你访问PDF文件的各项信息。在接下来的例子中,将演示如何使用PDFBox提供的API,从一个PDF文件中提取出文本信息。
PDFBox下载:访问网址http://sourceforge.net/projects/pdfbox/,进入如图7-1所示的下载界面。读者可以在该网页下载其最新的版本。本书采用的是PDFBox-0.7.3版本。
1.创建PdfboxTest类。该类包含一个getText方法,用于从一个PDF中获取文本信息
public void geText(String file) throws Exception {
// 是否排序
boolean sort = false;
// pdf文件名
String pdfFile = file;
// 输入文本文件名称
String textFile = null;
// 编码方式
String encoding = "UTF-8";
// 开始提取页数
int startPage = 1;
// 结束提取页数
int endPage = Integer.MAX_VALUE;
// 文件输入流,生成文本文件
Writer output = null;
// 内存中存储的PDF Document
PDDocument document = null;
try {
try {
// 首先当作一个URL来装载文件,如果得到异常再从本地文件系统//去装载文件
URL url = new URL(pdfFile);
document = PDDocument.load(url);
// 获取PDF的文件名
String fileName = url.getFile();
// 以原来PDF的名称来命名新产生的txt文件
if (fileName.length() > 4) {
File outputFile = new File(fileName.substring(0, fileName.length() - 4) + ".txt");
textFile = outputFile.getName();
}
} catch (MalformedURLException e) {
// 如果作为URL装载得到异常则从文件系统装载
document = PDDocument.load(pdfFile);
if (pdfFile.length() > 4) {
textFile = pdfFile.substring(0, pdfFile.length() - 4) + ".txt";
}
}
// 文件输入流,写入文件倒textFile
output = new OutputStreamWriter(new FileOutputStream(textFile), encoding);
// PDFTextStripper来提取文本
PDFTextStripper stripper = null;
stripper = new PDFTextStripper();
// 设置是否排序
stripper.setSortByPosition(sort);
// 设置起始页
stripper.setStartPage(startPage);
// 设置结束页
stripper.setEndPage(endPage);
// 调用PDFTextStripper的writeText提取并输出文本
stripper.writeText(document, output);
} finally {
if (output != null) {
// 关闭输出流
output.close();
}
if (document != null) {
// 关闭PDF Document
document.close();
}
}
}
在上面的代码中,getText方法接收一个 String类型的参数,指定要提取的PDF文件路径。这个位置可以是一个URL或本地文件。然后函数调用PDFBox提供的 PDFTextStripper类,设置提取过程中的一些属性(如起始页、是否排序等)。最后将文本提取并写入文件。
2.运行
public static void main(String[] args) {
PdfboxTest test = new PdfboxTest();
try {
// 取得C盘下的index.pdf的内容
test.geText("C:\\index.pdf");
} catch (Exception e) {
e.printStackTrace();
}
}
3.与Lucene的集成
PDFBox还提供和Lucene的集成,它提供了一套简单的方法把PDF Documents加入到Lucene的索引中去,请看以下代码:
Document lucenedocument = LucenePDFDocument.getDocument(…);
其中,LucenePDFDocument是 PDFBox中提供的一个类,它的getDocument被重载为3个方法,分别接收一个File对象、InputStream对象或者URL对象作为参数,然后从该参数传递进来的PDF文件中,提取并生成Lucene的Document对象。
当通过PDFBox从一个PDF文档中得到一个 Lucene Document后,可以直接使用IndexWriter把它加到Lucene的index中。LucenePDFDocument自动从PDF文件中提 取各种元数据Field,并把它们加入到Document中。它提取的信息如
新建新建一个PdfLuceneTest类
public class PdfLuceneTest {
public static void main(String[] args) {
try {
// IndexWriter存放索引到d:\index下
IndexWriter writer = new IndexWriter("d:\\index",
new StandardAnalyzer(), true);
// LucenePDFDocument返回由PDF产生的Lucene Docuement
Document d = LucenePDFDocument
.getDocument(new File("C:\\index.pdf")); // 注:关键点
// 写入索引
writer.addDocument(d);
// 关闭索引文件流
writer.close();
// 读取d:\index下的索引文件建立IndexSearcher
IndexSearcher searcher = new IndexSearcher("d:\\index");
// 对索引的contents Field进行查找关键词poi
Term t = new Term("contents", "poi");
// 根据Term生成Query
Query q = new TermQuery(t);
// 搜索返回结果集
Hits hits = searcher.search(q);
// 打印结果集
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
函数利用LucenePDFDocument的 getDocument函数,从一个PDF文件直接返回一个Lucene的Document,其中包含有path、url、modified、 contents、summary等Field,把它们直接写入index,然后创建一个IndexSearcher,对contents字段经行检索, 查找关键词“poi”(注意必须是小写)
分享到:
相关推荐
我们可以使用PDFBox开发可以创建,转换和操作PDF文档的Java程序。PDFBox的主要功能: Extract Text – 使用PDFBox,您可以从PDF文件中提取Unicode文本。 Split & Merge – 使用PDFBox,您可以将单个PDF文件分成多个...
PDFBox是一个开源的可以操作PDF文档的Java PDF类库。它可以创建一个新PDF文档,操作现有PDF文档并提取文档中的内容。 它具有以下特性: 1.将一个PDF文档转换输出为一个文本文件。 2.可以从文本文件创建一个PDF文档。 ...
原生Java打印pdf时,不支持一些打印机,使用2.08版pdfbox打印PDF,包含代码,jar。
C#中使用PDFBox读取PDF的内容,转换成TXT文件保存。
在.Net中使用PDFBox需要引用: 1.PDFBox-0.7.3.dlll (8 MB) 2.IKVM.GNU.Classpath (7 MB) 3.IKVM.Runtime.dll (360 kB) 4.FontBox-0.1.0-dev.dll 使用方法: private static string parseUsingPDFBox(string ...
PDFBox 是一个开源的,可以操作PDF文档的PDF类库,可以创建一个新PDF文档,操作现有PDF文档并提取文档中的内容。
使用pdfbox将pdf转图片 jar包 pdfbox-2.0.0 fontbox-2.0.0 commons-logging-1.2
NULL 博文链接:https://snowdymy.iteye.com/blog/1114344
pdfbox 提取 pdf 中 文字和图片 并 可转 html 分2个文件,一个专门提取文本,内容可转为html,另一个文件专门用来提取图片,大家可自行整合为一个文件。使用pdfbox最新提取图片的方法。
使用pdfbox读取pdf文件的内容并转为高清图片存储至硬盘 pdfbox api,pdfbox-tools
用xpdf和pdfbox来处理中文PDF文档及其比较
本项目主要介绍Springboot项目通过使用PDFBox的PDFRenderer类将PDF文档转换为图像。同时会介绍在开发和使用过程中遇到的pdf转换问题和优化方案
pdfbox 提取 pdf 中图片文件以及读取pdf的文本信息,压缩包中包含必备jar包
有时候PDF中的文字无法复制,这可能是因为PDF文件加密了,不过使用PDFBox开源软件就可以把它读出来,下面是使用示例
基于apache pdfbox的开源技术,来操作pdf文件,本程序可供参考学习用,但对于一些高级应用还需要参考官方文档继续学习
。。。
pdfbox for .Net目前的最新版PDFBox-2.0.19 用法: 将压缩包内所有dll拷贝到项目编译目录, 在项目中引用 IKVM.OpenJDK.Core.dll IKVM.OpenJDK.SwingAWT.dll pdfbox-app-2.0.19.dll 在代码中引入命名空间using org....
pdfbox java解析pdf文档jar包+源代码+帮助文档+example
用于将pdf文件生成其缩略图以供显示时使用,很实用的类似于百度文库中的文档里列表的图片一样
利用itext读取PDF后使用pdfbox将PDF转为图片。压缩包内附有相应JAR文件