`

使用PDFBox处理PDF文档

阅读更多
最常见的一种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”(注意必须是小写)
分享到:
评论

相关推荐

    java使用pdfbox打印PDF

    在Java开发中,有时我们需要处理PDF文档,例如打印PDF文件。在这种情况下,原生的Java API可能不提供全面的支持,特别是在兼容各种打印机方面。为了解决这个问题,我们可以借助开源库如PDFBox。在这个场景中,我们...

    【Java】基于Pdfbox解析PDF文档中指定位置的文字和图片

    我们可以使用PDFBox开发可以创建,转换和操作PDF文档的Java程序。PDFBox的主要功能: Extract Text – 使用PDFBox,您可以从PDF文件中提取Unicode文本。 Split & Merge – 使用PDFBox,您可以将单个PDF文件分成多个...

    .Net c#使用PDFBox解析PDF文件

    在.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文件中的图片

    PDFBox是一个开源的可以操作PDF文档的Java PDF类库。它可以创建一个新PDF文档,操作现有PDF文档并提取文档中的内容。 它具有以下特性: 1.将一个PDF文档转换输出为一个文本文件。 2.可以从文本文件创建一个PDF文档。 ...

    C#使用PDFBox读取PDF

    PDFBox是一个开源的Java库,主要用于处理PDF文档,但也可以通过.NET平台的Java interop技术在C#中使用。本篇文章将详细介绍如何在C#环境中利用PDFBox库来读取PDF文件的内容,并将其转换为TXT格式进行保存。 首先,...

    Java 解析 PDF, pdfbox读取PDF内容

    Java作为一款跨平台的编程语言,提供了多种库来处理PDF文档,其中之一就是PDFBox。本文将深入探讨如何使用PDFBox库在Java中解析PDF并读取其内容。 PDFBox是Apache软件基金会的一个开源项目,它为Java开发者提供了一...

    PDFBox pdf 转换为word文档

    1. **初始化PDFBox**: 加载PDF文档,这可以通过`PDDocument.load()`方法实现,传入PDF文件的路径。 2. **提取文本**: 使用`PDFTextStripper`类,调用`processDocument()`方法来提取PDF中的所有文本。 3. **保存文本*...

    轻松使用apache pdfbox将pdf文件生成图片.pdf

    Apache PDFBox是一个强大的Java库,专门用于处理PDF文档。它提供了丰富的API,允许开发者读取、创建、修改和渲染PDF文档。在这个特定的场景中,PDFBox被用来将PDF文件转换为图片,这对于报表开发或者需要将PDF内容...

    PDFBox PDF处理类库 v3.0.0 alpha2.zip

    总的来说,PDFBox是Java开发人员处理PDF文档的强大工具,其v3.0.0 alpha2版本为开发者提供了更多探索和测试的新特性。无论你是要进行简单的PDF读取还是复杂的PDF编辑,PDFBox都能满足你的需求,同时源码的开放性也...

    pdfbox 解析pdf里的图片和文字

    PDFBox是Apache软件基金会的一个开源项目,专门用于处理PDF文档的Java库。它提供了一系列强大的API,使得开发者能够轻松地读取、创建、修改和显示PDF文档中的内容。在这个场景中,我们将关注如何使用PDFBox解析PDF...

    pdfbox和pdfrenderer所需包

    **PDFBox** 是Apache软件基金会的一个开源项目,它提供了对PDF文件的强大支持,包括读取、创建、编辑和转换PDF文档。PDFBox-2.0.11.jar是这个库的二进制版本,包含了处理PDF所需的所有类和方法。使用PDFBox,你可以...

    使用pdfbox将pdf转图片 jar包

    PDFBox是Apache软件基金会的一个开源项目,专门用于处理PDF文档。这个工具库提供了一系列API,使得开发者能够方便地读取、创建、修改PDF文件。在本案例中,我们关注的是如何利用PDFBox将PDF文档转换为图片。这个过程...

    pdfbox读取pdf文档转为高清图片的例子

    PDFBox是Apache软件基金会开发的一个开源Java库,用于处理PDF文档。这个库提供了丰富的API,可以用来读取、创建、编辑PDF文档。在本例中,我们将关注如何使用PDFBox将PDF文档的内容转换为高清图片。 首先,我们需要...

    C# 使用PdfBox进行合并pdf

    `C#`是一种广泛使用的编程语言,而`PdfBox`则是一个强大的Java库,用于处理PDF文档。尽管`PdfBox`是用Java编写的,但通过使用Java的.NET版本(如 IKVM 或 Jni4Net),可以在C#项目中调用它的功能。本篇将详细介绍...

    pdfbox java解析pdf文档jar包+源代码+帮助文档+example

    6. **PDF元数据处理**:你可以使用PDFBox读取或修改PDF文档的元数据,如Title、Author、Subject等,这有助于管理和组织PDF文档。 7. **安全与权限管理**:PDFBox允许设置用户访问权限,例如禁止复制、打印或编辑...

    pdfbox,生成pdf文件的缩略图

    PDFBox是Apache软件基金会开发的一个开源Java库,主要用于处理PDF文档。这个库提供了广泛的API,可以用来创建、编辑和读取PDF文档。在本场景中,我们关注的是PDFBox的一个特定功能:生成PDF文件的缩略图。这有助于在...

    基于pdfbox操作pdf文件的测试

    在“基于pdfbox操作pdf文件的测试”项目中,我们将深入探讨如何使用PDFBox进行PDF文件的操作。 首先,要使用PDFBox,你需要在你的项目中引入Apache PDFBox的依赖。如果你使用的是Maven,可以在pom.xml文件中添加...

    java用poi转ppt为图片和用pdfbox转pdf为图片的demo

    另一方面,Apache PDFBox是另一个强大的Java库,专用于处理PDF文档。"java用pdfbox转pdf为图片"的过程与POI类似,但涉及到的是PDF文档。PDFBox提供了丰富的API来读取和操作PDF文件。 1. 引入PDFBox库:在项目中引入...

    pdfbox 提取 pdf 中 文字和图片 并 可转 html

    pdfbox 提取 pdf 中 文字和图片 并 可转 html 分2个文件,一个专门提取文本,内容可转为html,另一个文件专门用来提取图片,大家可自行整合为一个文件。使用pdfbox最新提取图片的方法。

    使用PDFBox提取PDF中文本信息

    PDFBox是Apache软件基金会的一个开源项目,主要用于处理PDF文档,包括读取、写入、编辑以及提取PDF中的信息。在C#环境下,虽然PDFBox原生是Java库,但通过 IKVM.NET 这样的工具可以将Java库转换为.NET Framework兼容...

Global site tag (gtag.js) - Google Analytics