PoDoFo从PDF中提取文本和坐标

3

我一直在尝试使用PoDoFo C++库提取文本和线条(包括它们各自的坐标)。但是我无法做到这一点。

目前为止,我的代码如下:

#include <iostream>
#include <stdio.h>
#include <vector>
#include <podofo/podofo.h>
using namespace PoDoFo;
using namespace std;

int main( int argc, char* argv[] )
{
    const char* filename = "hello.pdf";
    PdfVecObjects *x = new PdfVecObjects();
    PdfParser parser(x, filename);
    parser.ParseFile("hello.pdf");

    for (TIVecObjects obj = x->begin(); obj != x->end(); obj++){
        PdfObject * a = x->RemoveObject(obj);
        // THIS IS MY PROBLEM VVVVVVVVVV
        cout << a->Reference().ToString() << endl;
    }

    return 0;
}

然而,这只提供了非常基本的信息(似乎是对象编号)。
DEBUG: Size=12
DEBUG: Reading numbers: 0 12
DEBUG: Reading XRef Section: 0 with 12 Objects.
DEBUG: Size=12
DEBUG: Reading numbers: 0 12
DEBUG: Reading XRef Section: 0 with 12 Objects.
1 0 R
2 0 R
3 0 R
4 0 R
5 0 R
6 0 R
7 0 R
8 0 R
9 0 R
10 0 R
11 0 R

我想打印出一个对象的坐标,如果是一条线或文本,则需要打印出文本内容。请问是否有比我更熟悉这个库的人知道我该如何解决这个问题?

2个回答

4

这个答案将向您展示如何提取文本。

要获取文本定位信息,您还需要处理以下命令:

TcTwTzTLT*TrTm

您绝对需要从Adobe下载PDF规范以获得所有细节。有一章专门讲解文本处理。打印出章节是值得的,因为您会经常参考它。你需要了解的一切都在里面,但不总是显而易见。

您还需要使用一些线性代数。不过并不太复杂。

由于有多种方法可以实现相同的结果,因此重要的是彻底实现所有命令,即使您将要处理的文档似乎不需要某些功能。例如:我遇到了一个将所有文本大小设置为1个点的文档,这使得我的计算全部失误,直到我意识到它正在使用文本缩放因子来设置实际字体大小。


我知道这篇帖子很旧了,但我对解决方案很感兴趣,如何获取文本位置?@Dara Javaherian - simon
哈哈,不好意思。我的真诚建议是放弃吧——这是一件非常混乱的事情。你最好甚至使用OCR来完成你需要的工作。 - Dara Java

1
使用PoDoFo工具中的"podofotxtextract",它会给出x,y坐标(PoDoFo软件包的工具文件夹)。从Pdf中提取文本。

请详细解释您的答案,以便易于理解。 - TheParam

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