代码改变世界

使用PDFBox解析PDF文档

2008-05-19 01:28  晓风残月  阅读(8929)  评论(5编辑  收藏  举报

昨天认识Expresso——正则编写、测试、分析利器中提到近期一项目需要解析PDF,使用的就是流行的PDFBox组件。

PDFBox是Java实现的PDF文档协作类库,提供PDF文档的创建、处理以及文档内容提取功能,也包含了一些命令行实用工具。

主要特性包括:

  • 开源(BSD许可
  • 从PDF提取文本
  • 合并PDF文档
  • PDF文档加密与解密
  • Lucene搜索引擎的集成
  • 填充PDF/XFDF表单数据
  • 从文本文件创建PDF文档
  • 从PDF页面创建图片
  • 打印PDF文档

官方网址:http://www.pdfbox.org

下载地址:http://sourceforge.net/projects/pdfbox/

 

既然是Java库,要在.NET中使用,需要另一弓虽的开源组件——IKVM——转为.NET(包括Mono and the Microsoft .NET Framework)实现的JVM。

 

下载包中包含了多个.NET环境的DEMO,最新版本是 0.7.3。

 

基本上,在.NET中使用PDFBox从PDF解析文本需要下面4个组件:

IKVM.GNU.Classpath.dll

PDFBox-0.7.3.dll

FontBox-0.1.0-dev.dll

IKVM.Runtime.dll

当使用VS进行开发时,添加对前两个dll的引用,并将后两个dll置于运行目录。

只需要下面几行代码:

using org.pdfbox.pdmodel;
using org.pdfbox.util;

            string pdfPath = @"C:\my.pdf";
            PDDocument doc = PDDocument.load(pdfPath);
            PDFTextStripper stripper = new PDFTextStripper();
            string txt = stripper.getText(doc);
            Console.WriteLine(txt);

 

可针对某些页面提取文本,代码如下

            //...
            PDFTextStripper stripper = new PDFTextStripper();
            stripper.setStartPage(2);
            stripper.setEndPage(10);
            string txt = stripper.getText(doc);
            //...

还可通过stripper.setStartBookmark(...) 和  stripper.setEndBookmark(...)设置书签,

更多的文本提取功能见:http://www.pdfbox.org/userguide/text_extraction.html

 

其他PDF解析工具还有:

http://itextsharp.sourceforge.net/

http://www.codeproject.com/KB/cs/PDFToText.aspx