PDF转文本工具或Java库?

3
我需要将一份PDF文件转换成普通文本(这是我们县选举主任的“选票报告”)。这些文件很大(大约有2000页),主要包含表格。一旦我将其转换为文本,就会使用我正在编写的程序对其进行解析,并将数据放入数据库中。 我已经尝试过Adobe Reader中的“另存为文本”功能,但它不如我想象的那样精确,特别是在将表格数据分隔成CSV时。 那么,有没有工具或Java库可以解决这个问题?

2
我有一种感觉,表格数据可能会让你头疼... - Knobloch
是的。表头和页面标题也要翻译。虽然在一个文档中保持一致,但在不同的文档之间并不一致。每次选举一个文档,而且似乎每次选举都会改变格式。 - Gary Kephart
7个回答

6

iText可以进行一些阅读,但是可能有更好的工具(如您提到的PDFBox)来实现这一点... - Knobloch
好的,我刚试了一下。它在表格数据上运行得非常好,但是列标题混乱了,可能是因为它们是垂直对齐的文本。 - Gary Kephart
PDFBox的参考资料,虽然现在链接已经变了,但今晚对我仍然非常有用! :-) - Arjan

4
给定问题的标题: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) {
        ...
    }
}

2

PDFTextStream 是我们的Java+.NET库,用于从PDF文档中提取内容;你可以尝试一下。此外,它还提供了简单的表格数据提取工具,这些工具建立在PDFTextStream的表格检测功能之上。虽然它不是一个通用解决方案(尽管我们也在开发这样的解决方案!),但如果表格数据已经明确定义(例如由线条界定的行和列等),那么现有的解决方案可能会适合您。


2
我一直觉得xpdf 工具非常有用。
我们成功地使用了将 PDF 业务文档转换为文本的功能,以在 EDI 中使用。保留布局选项能很好地保持排版良好,适合在程序中解析。

1
这对我很有效。-layout标志有助于在文本文件中保持表格的可用格式。 - Tim Perry

0
使用文本(行)打印机将内容打印到文件中。

0

我使用iText,一直非常满意。 我以前用过xmlpdf,但在我看来,iText要好得多。


0

不知道您的PDF页面布局是什么样子,很难说。

我建议您下载并尝试使用iText和PDFBox。它们的网站上都有文本提取示例 - 假设您熟悉Java,您应该可以在30分钟内运行提取器。

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

其他人已经提到了xpdf,这可能对您有用。它是一个带有一些命令行工具的C库。它有许多文本提取器,您可能可以轻松地格式化输出。同样,这真的取决于您的页面布局。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接