首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PDF转XML表格数据提取

PDF转XML表格数据提取
EN

Stack Overflow用户
提问于 2013-09-02 21:24:50
回答 1查看 137关注 0票数 0

我想从PDF文件中提取表格数据,我正在使用Itext,但我不知道如何搜索dablur数据,(拆分)谁能给出相关的想法搜索表content.Here数据是无序的格式,如何将这些数据转换为可理解的格式。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-09-02 21:40:37

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

代码语言:javascript
运行
复制
        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 (move-to x: 100,y: 200)。首先是参数,然后是命令。对于堆栈-机器处理所有的。因此取名为“PostScript”。

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

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

Java 7:

代码语言:javascript
运行
复制
    try (BufferedReader pin = new BufferedReader(new StringReader(pc))) {
        ...
    }

Java 6:

代码语言:javascript
运行
复制
    BufferedReader pin = new BufferedReader(new StringReader(pc));
    try {
        ...
    } finally {
       pin.close();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18574398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档