我需要将PDF转换为普通文本(这是我们县注册商的“投票声明”)。文件很大(大约2000页),大多包含表格。一旦我把它写入文本,那么我将使用我正在编写的程序来解析它并将数据放入数据库中。 我在Adobe Reader中尝试过“另存为文本”功能,但它并不像我想的那样精确,特别是在将表格数据划分为CSV时。 那么,对工具或Java库有什么建议可以解决这个问题吗?
答案 0 :(得分:6)
嗯,有iText。我对它只有有限的经验,但it seems它可以做你想要的。
Apache PDFBox肯定可以做到。它的网站提到“PDF to text extraction”作为其主要功能。根据其ExtractText command line tool,有一个source code专门为此(PDFTextStripper class)。而且还有一个PDFBox Text Extraction Guide!
答案 1 :(得分:5)
鉴于问题的标题:Apache Tika非常适合我从PDF中提取纯文本。我没有用它来从表中获取文本。
对于PDF,它实际上使用的是PDFBox。但除PDF之外,它对其他格式(如Microsoft Word(doc和docx),Excel和PowerPoint,OpenOffice.org / LibreOffice ODT,HTML,XML和many more也是如此)。它的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) {
...
}
}
答案 2 :(得分:2)
我总是发现xpdf工具非常有用。
我们成功使用pdf进行文本转换,以转换PDF商业文档,以便在EDI中使用。保留布局的选项可以很好地保持定位,以便在程序中进行解析。
答案 3 :(得分:1)
PDFTextStream是我们的Java + .NET库,用于从PDF文档中提取内容;你可以试一试。此外,它确实提供了一些基本的table data extraction utilities,它们位于PDFTextStream的表检测功能之上。这绝不是一个通用的解决方案(尽管我们也正在研究其中一个!),但如果表格数据是明确定义的(例如行和列以线条等为界),那么你可能会发现现在有什么适当的解决方案。
答案 4 :(得分:0)
使用文本(行)打印机打印到文件。
答案 5 :(得分:0)
我使用iText,我对它非常满意。 我之前使用的是xmlpdf,而iText在我看来远非优越。
答案 6 :(得分:0)
在不知道PDF格式的页面布局的情况下,很难说。
我建议下载并尝试iText和PDBox。你会在他们的网站上找到两个文本提取示例 - 你应该在< 30分钟,假设您了解Java的方式。
从PDFBox开始,因为它的文本提取能力优于iText。
其他人提到了xpdf,这可能对您有用。它是一个带有一些命令行工具的C库。它有许多文本提示符,您可以轻松地格式化输出。同样,它实际上取决于您的页面布局。