PDF到文本工具或Java库?

我需要将PDF转换为普通文本(这是我们县注册商的“投票声明”)。 文件很大(大约2000页),大多包含表格。 一旦我把它变成文本,那么我将使用我正在编写的程序来解析它并将数据放入数据库中。 我在Adobe Reader中尝试过“另存为文本”function,但它并不像我想的那样精确,特别是在将表格数据划分为CSV时。 那么,对工具或Java库的任何建议都可以解决这个问题吗?

好吧,有iText 。 我只有有限的经验,但它似乎可以做你想要的。

Apache PDFBox肯定可以做到。 它的网站提到“PDF to text extraction”作为其主要function。 有一个ExtractText命令行工具,专门针对此( 源代码 ),基于其PDFTextStripper类 。 还有一个PDFBox 文本提取指南 !

鉴于问题的标题: Apache Tika非常适合我从PDF中提取纯文本。 我没有用它来从表中获取文本。

对于PDF,它实际上使用PDFBox 。 但除PDF之外,它对其他格式(如Microsoft Word(doc和docx),Excel和PowerPoint,OpenOffice.org / LibreOffice ODT,HTML,XML等)也是如此。 它的AutoDetectParser可以轻松地从任何输入中提取文本。

如果需要处理生成的文本(例如将其传递给Mahout进行分类),可以使用ParsingReader将结果导入Reader,同时后台进程将其提取出来。 最后,在提取内容时,它还会填充它找到的元数据:

public Reader getPlainTextReader(final InputStream is) { try { Detector detector = new DefaultDetector(); Parser parser = new AutoDetectParser(detector); ParseContext context = new ParseContext(); context.set(Parser.class, parser); Metadata metadata = new Metadata(); Reader reader = new ParsingReader(parser, is, metadata, context); for (String name : metadata.names()) { for (String value : metadata.getValues(name)) { logger.debug("Document {}: {}", name, value); } } return reader; } catch (IOException e) { ... } } 

我总是发现xpdf工具非常有用。

我们成功使用pdf进行文本转换,以转换PDF业务文档,以便在EDI中使用。 保留布局的选项可以很好地保持定位以便在程序中进行解析。

PDFTextStream是我们的Java + .NET库,用于从PDF文档中提取内容; 你可以试一试。 此外,它确实提供了一些基本的表数据提取实用程序 ,它们位于PDFTextStream的表检测function之上。 它绝不是一个通用的解决方案(尽管我们也正在研究其中一个!),但如果表格数据是明确定义的(例如行和列以线条等为界),那么你可能会发现现在有什么了妥善解决。

使用文本(行)打印机打印到文件。

我使用iText并且我对它非常满意。之前我使用过xmlpdf而iText在我看来远远优于它。

如果不知道PDF中页面的布局,很难说。

我建议下载并尝试iText和PDBox。 你会在他们的网站上找到文本提取示例 – 你应该在<30分钟内运行,假设你已经了解了Java的方法。

从PDFBox开始,因为它的文本提取能力比iText更好。

其他人提到了xpdf,这可能对你有用。 它是一个C库,带有一些围绕它构建的命令行工具。 它有许多文本提示符,您可以轻松地格式化输出。 同样,它实际上取决于您的页面布局。