PDF到文本工具或Java库?

时间:2009-02-24 21:07:36

标签: java pdf

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

7 个答案:

答案 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库。它有许多文本提示符,您可以轻松地格式化输出。同样,它实际上取决于您的页面布局。