我需要将一份PDF文件转换成普通文本(这是我们县选举主任的“选票报告”)。这些文件很大(大约有2000页),主要包含表格。一旦我将其转换为文本,就会使用我正在编写的程序对其进行解析,并将数据放入数据库中。
我已经尝试过Adobe Reader中的“另存为文本”功能,但它不如我想象的那样精确,特别是在将表格数据分隔成CSV时。
那么,有没有工具或Java库可以解决这个问题?
有两个选择:
iText - 似乎PdfTextExtractor类可以实现您想要的功能。
Apache PDFBox声称“PDF到文本提取”是其最重要的功能。它有一个ExtractText命令行工具,专门用于此目的(源代码),基于它的PDFTextStripper类。还有一个PDFBox文本提取指南!
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) {
...
}
}
PDFTextStream 是我们的Java+.NET库,用于从PDF文档中提取内容;你可以尝试一下。此外,它还提供了简单的表格数据提取工具,这些工具建立在PDFTextStream的表格检测功能之上。虽然它不是一个通用解决方案(尽管我们也在开发这样的解决方案!),但如果表格数据已经明确定义(例如由线条界定的行和列等),那么现有的解决方案可能会适合您。
我使用iText,一直非常满意。 我以前用过xmlpdf,但在我看来,iText要好得多。
不知道您的PDF页面布局是什么样子,很难说。
我建议您下载并尝试使用iText和PDFBox。它们的网站上都有文本提取示例 - 假设您熟悉Java,您应该可以在30分钟内运行提取器。
从PDFBox开始,因为它的文本提取能力比iText更好。
其他人已经提到了xpdf,这可能对您有用。它是一个带有一些命令行工具的C库。它有许多文本提取器,您可能可以轻松地格式化输出。同样,这真的取决于您的页面布局。