1、使用PDFBox处理PDF文档
PDF全称Portable Document Format,是Adobe公司开发的电子文件格式。这种文件格式与操作系统平台无关,可以在Windows、Unix或Mac OS等操作系统上通用。
PDF文件格式将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。如果要抽取其中的文本信息,需要根据它的文件格式来进行解析。幸好目前已经有不少工具能帮助我们做这些事情,其中就有PDFBOX
PDFBox是Java实现的PDF文档API库,提供PDF文档的一系列操作。例如创建、处理以及文档内容提取等功能,也包含了一些命令行实用工具。
主要有以下特性:
- PDF格式的文本抽取
- 合并PDF文档
- PDF文档的加密与解密
- Lucene搜索引擎集成
- 填充表单数据
- 创建一个文本文件的PDF
- 创建PDF页面图象
- 打印PDF文档
2、PDFBox的下载
最常见的一种PDF文本抽取工具就是PDFBox了,访问网址http://sourceforge.net/projects/pdfbox/。读者可以在该网页下载其最新的版本。本书采用的是PDFBox-0.7.3版本。PDFBox是一个开源的Java PDF库,这个库允许你访问PDF文件的各项信息。
3、在Eclipse中配置
以下是在Eclipse中创建工程,并导入pdf工具类的过程
(1)在Eclipse的workspace中创建一个普通的Java工程:pdfprj
(2)把下载的PDFBox-0.7.3.zip解压。
(3)进入external目录下,可以看到,这里包括了PDFBox所有用到的外部包。复制下面的Jar包到工程pdfprj的lib目录下(如还未建立lib目录,则先创建一个)。
-
bcmail-jdk14-132.jar
-
bcprov-jdk14-132.jar
-
checkstyle-all-4.2.jar
-
FontBox-0.1.0-dev.jar
-
lucene-core-2.0.0.jar
然后再从PDFBox的lib目录下,复制PDFBox-0.7.3.jar到工程的lib目录下。
(4)在工程上单击右键,在弹出的快捷菜单中选择“Build Path->Config Build Path->Add Jars”命令,把工程lib目录下面的包都加入工程的Build Path。
4.使用PDFBox解析PDF内容
抽取pdf文本内容
private PDDocument document = null;
public static void main(String[] args) throws IOException {
String file = "d:\\pdf\\pdf-type.pdf";
PDFBOX parse = new PDFBOX();
parse.openPDFFile(file);
}
public void openPDFFile(String file) throws IOException {
InputStream is = null;
File f = new File(file);
is = new FileInputStream(f);
this.document = this.parseDocument(is);
//获取页数
List pages = this.document.getDocumentCatalog().getAllPages();
int pageSize = pages.size();
System.out.println("pdf页数:"+pageSize);
this.getPdfText();
}
public PDDocument parseDocument(InputStream input) throws IOException {
PDDocument document = PDDocument.load(input);
if (document.isEncrypted()) {
try {
document.decrypt("");
} catch (CryptographyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidPasswordException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return document;
}
/*
* 抽取pdf文本内容
*/
public void getPdfText() throws IOException {
PDFTextStripper stripper = new PDFTextStripper();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
"d:\\pdf-type.txt"));
BufferedWriter bw = new BufferedWriter(osw);
stripper.setShouldSeparateByBeads(true);
stripper.writeText(document, bw);
bw.close();
document.close();
}
抽取pdf文档信息:
public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* 解析pdf文档信息
* @param pdfPath pdf文档路径
* @throws Exception
*/
public static void pdfParse( String pdfPath, String imgSavePath ) throws Exception
{
InputStream input = null;
File pdfFile = new File( pdfPath );
PDDocument document = null;
try{
input = new FileInputStream( pdfFile );
//加载 pdf 文档
document = PDDocument.load( input );
/** 文档属性信息 **/
PDDocumentInformation info = document.getDocumentInformation();
System.out.println( "标题:" + info.getTitle() );
System.out.println( "主题:" + info.getSubject() );
System.out.println( "作者:" + info.getAuthor() );
System.out.println( "关键字:" + info.getKeywords() );
System.out.println( "应用程序:" + info.getCreator() );
System.out.println( "pdf 制作程序:" + info.getProducer() );
System.out.println( "作者:" + info.getTrapped() );
System.out.println( "创建时间:" + dateFormat( info.getCreationDate() ));
System.out.println( "修改时间:" + dateFormat( info.getModificationDate()));
/** 文档页面信息 **/
PDDocumentCatalog cata = document.getDocumentCatalog();
List pages = cata.getAllPages();
int count = 1;
for( int i = 0; i < pages.size(); i++ )
{
PDPage page = ( PDPage ) pages.get( i );
if( null != page )
{
PDResources res = page.findResources();
//获取页面图片信息
Map imgs = res.getImages();
if( null != imgs )
{
Set keySet = imgs.keySet();
Iterator it = keySet.iterator();
while( it.hasNext() )
{
Object obj = it.next();
PDXObjectImage img = ( PDXObjectImage ) imgs.get( obj );
img.write2file( imgSavePath + count );
count++;
}
}
}
}
}catch( Exception e)
{
throw e;
}finally{
if( null != input )
input.close();
if( null != document )
document.close();
}
}
/**
* 获取格式化后的时间信息
* @param dar 时间信息
* @return
* @throws Exception
*/
public static String dateFormat( Calendar calendar ) throws Exception
{
if( null == calendar )
return null;
String date = null;
try{
String pattern = DATE_FORMAT;
SimpleDateFormat format = new SimpleDateFormat( pattern );
date = format.format( calendar.getTime() );
}catch( Exception e )
{
throw e;
}
return date == null ? "" : date;
}
分享到:
相关推荐
在这个场景中,我们将关注如何使用PDFBox解析PDF文档中的图片和文字。 首先,提取PDF中的图片是一项关键任务。PDFBox提供了`PDDocument`类,它是处理整个PDF文档的主要入口点。通过`PDDocument.load()`方法,我们...
Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。 我们可以使用PDFBox开发可以创建,转换和操作PDF文档的Java程序。PDFBox的主要功能: Extract Text – 使用PDFBox,您可以从PDF文件中提取Unicode文本。 ...
在.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-0.7.3.jar fontbox-2.0.7.jar commons-logging-1.2.jar pdfbox-0.7.3.jar fontbox-2.0.7.jar commons-logging-1.2.jar
在C#中使用PDFBox解析PDF是一项技术含量较高的任务,涉及到对PDF格式的理解以及对PDFBox API的熟练运用。由于PDFBox是用Java开发的,所以.NET版本的实现可能与原版有些许差异,遇到问题时,可以参考Java版本的PDFBox...
本文将深入探讨如何使用PDFBox库在Java中解析PDF并读取其内容。 PDFBox是Apache软件基金会的一个开源项目,它为Java开发者提供了一系列API来操作PDF文档,包括读取、创建、编辑以及签署PDF等任务。在本示例中,我们...
本资源包含PDFBox的Java解析PDF文档所需的jar包,源代码,帮助文档以及示例(example),对于学习和使用PDFBox进行PDF操作具有极大的帮助。 首先,让我们深入了解一下PDFBox的主要功能: 1. **读取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 for .Net目前的最新版PDFBox-2.0.12 用法: 首先在引用中将下载的dll添加到项目中,同时在cs文件中引入命名空间using org.apache.pdfbox.text; 然后可以按如下代码编写demo PDDocument doc = PDDocument.load...
3. 使用PDFBox解析PDF 要解析PDF文档,首先需要加载文档: ```java PDDocument document = PDDocument.load(new File("123.pdf")); ``` 然后可以使用PDFTextStripper来提取文本: ```java PDFTextStripper ...
1.解析pdf,ofd,扫描图片电子发票数据,选择发票目录批量自动解析,生成解析统计excel文件 2.编辑解析的电子发票内容数据 3.导出打包电子发票数据,发票文件名可以选择多种命名方式 4.pdf相关工具:pdf转图片,ofd转...
首先,Java解析PDF文件通常需要依赖特定的库,例如Apache PDFBox。在这个压缩包中,我们找到了PDFBox-0.6.6.jar,这是Apache PDFBox的一个旧版本,它提供了读取、写入和操作PDF文件的功能。PDFBox库包含了一系列的...
pdfbox 提取 pdf 中 文字和图片 并 可转 html 分2个文件,一个专门提取文本,内容可转为html,另一个文件专门用来提取图片,大家可自行整合为一个文件。使用pdfbox最新提取图片的方法。
java中pdfbox 2.0.8 解析pdf获得文本内容
在IT行业中,处理PDF文件的任务时常涉及转换、渲染和解析等操作。在这个压缩包中,包含了两个主要的Java库,用于将PDF文件转换为图像:PDFBox和PDFRenderer。 **PDFBox** 是Apache软件基金会的一个开源项目,它提供...
PDFBox是由Apache软件基金会开发的Java库,其主要功能包括PDF文档的解析、生成、修改和显示。在PDFBox 2.0.8版本中,包含了对PDF文档处理的多种优化和增强,使得开发者能够更高效地处理PDF任务。 要使用PDFBox打印...
使用PDFBox解析PDF文件的基本步骤如下: 1. **初始化PDF文档**:首先,我们需要创建一个`PDDocument`对象,加载待处理的PDF文件。例如: ```java PDDocument document = PDDocument.load(new File("path_to_your_...
PDFBox是Apache软件基金会的一个开源项目,专门用于处理PDF(Portable Document Format)文档的Java类库。这个压缩包“PDFBox PDF处理类库 v3.0.0 alpha2.zip”包含的是PDFBox的最新预发布版本,即v3.0.0的alpha2...
总结,这个实例展示了如何利用jsoup抓取网页上的PDF资源,并通过PDFBox解析PDF内容。尽管这不是jsoup的主要用途,但通过巧妙结合,可以实现从网页上获取并处理PDF文档的完整流程。在实际应用中,这样的组合可以用于...