PDF到XML表格数据提取

时间:2013-09-02 13:24:50

标签: xml pdf

我想从PDF文件中提取表格数据, 我正在使用Itext但我不明白如何搜索dablur数据,(分裂) 任何人都可以提供与搜索表格内容相关的想法。这些数据是无序格式,如何将数据转换为可理解的格式。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

获取页面内容并扫描MoveTo(x,y)(tm)和文本(tj)命令。 另外,字体更改(tf)(如标记粗体字)可能会拆分文本。

        final String NUM = "\\d*\\.?\\d+";
        Pattern tj = Pattern.compile(".*\\((.*)\\) Tj");
        Pattern tm = Pattern.compile("\\d+ \\d+ \\d+ \\d+ ("
            + NUM + ") (" + NUM + ") Tm");
        Pattern tf = Pattern.compile("/(F\\d+) (" + NUM + ") Tf");

        byte[] pageContent = pdfReader.getPageContent(pageno);
        String pc = new String(pageContent, "Cp1252");
        try (BufferedReader pin = new BufferedReader(new StringReader(pc))) {
            for (;;) {
                String cline = pin.readLine();
                if (cline == null) {
                    break;
                }
                Matcher m = tm.matcher(cline);
                if (m.matches()) {

请注意,可能不会出现一小部分(.123),因此简单的Double.parseDouble(m.group(1))是不够的。


如何运作

在“页面匹配”的上方,您可以获得创建页面的PostScript命令行: 选择一种字体,移动到(x,y),打印一些字符。

暂且不说:这些命令采用所谓的后缀表示法:100.0 200.0 Tm(移动到x:100,y:200)。第一个参数,然后是命令。对于堆栈机器处理全部。因此名称为“PostScript。”

如果你得到两个相同y的移动命令,那么你就在同一条线上。 选择另一种字体,例如单词变为粗体,或者您在表格中。

你可以想象,分析PDF是一项有趣的编程工作。我已经羡慕你了。


Java 7:

    try (BufferedReader pin = new BufferedReader(new StringReader(pc))) {
        ...
    }

Java 6:

    BufferedReader pin = new BufferedReader(new StringReader(pc));
    try {
        ...
    } finally {
       pin.close();
    }