java - 从 PDF 中提取数据的最简单方法是什么?

标签 java pdf

我需要从一些 PDF 文档中提取数据(使用 Java)。我需要知道最简单的方法是什么。

我试过 iText。这对我的需要来说相当复杂。此外,我猜它不是免费用于商业项目的。所以这不是一个选择。我还尝试了 PDFBox,遇到了各种 NoClassDefFoundError 错误。

我用谷歌搜索并找到了其他几个选项,例如 PDF Clown、jPod,但我没有时间试验所有这些库。我依靠社区通过 Java 阅读 PDF 的经验。

请注意,我不需要创建或操作 PDF 文档。我只需要从布局复杂度适中的 PDF 文档中提取文本数据。

请建议从 PDF 文档中提取文本的最快和最简单的方法。谢谢。

最佳答案

我建议尝试 Apache Tika。 Apache Tika 基本上是一个工具包,可以从多种类型的文档(包括 PDF)中提取数据。

Tika 的好处(除了免费之外)是它曾经是 Apache Lucene 的一个子项目,它是一个非常强大的开源搜索引擎。 Tika 包含一个内置的 PDF 解析器,它使用 SAX 内容处理器将 PDF 数据传递给您的应用程序。它还可以从加密的 PDF 中提取数据,并允许您创建或子类化现有解析器以自定义行为。

代码很简单。要从 PDF 中提取数据,您需要做的就是创建一个实现 Parser 接口(interface)的 Parser 类并定义一个 parse() 方法:

public void parse(
   InputStream stream, ContentHandler handler,
   Metadata metadata, ParseContext context)
   throws IOException, SAXException, TikaException {

   metadata.set(Metadata.CONTENT_TYPE, HELLO_MIME_TYPE);
   metadata.set("Hello", "World");

   XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata);
   xhtml.startDocument();
   xhtml.endDocument();
}

然后,要运行解析器,您可以这样做:

InputStream input = new FileInputStream(new File(resourceLocation));
ContentHandler textHandler = new BodyContentHandler();
Metadata metadata = new Metadata();
PDFParser parser = new PDFParser();
parser.parse(input, textHandler, metadata);
input.close();
out.println("Title: " + metadata.get("title"));
out.println("Author: " + metadata.get("Author"));
out.println("content: " + textHandler.toString());

关于java - 从 PDF 中提取数据的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6831765/

相关文章:

java - 如何在 Eclipse 中打印没有文件名和页码?

Java 反射和线程安全

java - 如何在地址为46.XX.XX.XX :8008/的页面中下载java小程序类文件

php - 如何使用 fpdf 创建 pdf 示例

javascript - 有没有办法在 pdf.js 中合并 PDF?

java - 通过Java代码运行MS Word宏

java - AWS Textract : Exception in thread "main" java. lang.NoSuchMethodError

java - 如何在Docx4J中转换时指定PDF文件名

pdf - 如何使用PDFBox在pdf中查找表格边框线?

ios - MonoTouch : How to download pdf incrementally as indicated in the Apple slides "Building Newsstand Apps", session 504?