【问题标题】:PoDoFo Extract text + coords from a pdfPoDoFo 从pdf中提取文本+坐标
【发布时间】:2012-07-12 15:19:01
【问题描述】:

我一直在尝试使用 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

我想打印出一个对象的坐标,以及它是一行还是文本。如果是文本,我也希望能够打印出文本。有没有比我更了解这个库的人知道我可以做些什么来解决这个问题?

【问题讨论】:

    标签: c++ pdf coordinates podofo


    【解决方案1】:

    此answer 将向您展示如何提取文本。

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

    Tc、Tw、Tz、TL、T*、Tr 和 Tm。

    您肯定需要从 Adob​​e 下载 PDF spec 以获取所有详细信息。有一章专门介绍文本处理。值得您花时间打印出该章节,因为您将多次提及它。很多。您需要知道的一切都在其中,但并不总是显而易见的。

    您还需要使用一点线性代数。不过没什么太复杂的。

    由于有许多方法可以达到相同的结果,因此彻底实施所有命令非常重要,即使您要处理的文档似乎不需要某些功能。例如:我遇到了一个文档,该文档将所有文本大小设置为一个点,这导致我所有的计算都失败了,直到我意识到它使用文本缩放因子来设置实际字体大小。

    【讨论】:

    • 我知道这篇文章很旧,但我对解决方案感兴趣,如何获取文本位置? @Dara Javaherian
    • 哈哈没有人,对不起。我诚实的建议是放弃——这真的很麻烦。最好还是使用 OCR 来做您需要的事情。
    【解决方案2】:

    使用 PoDoFo 工具“podofotxtextract”它为您提供 x,y 坐标(PoDoFo 包的工具文件夹)。从 Pdf 中提取文本。

    【讨论】:

    • 请详细解释你的答案,以便于理解
    猜你喜欢
    • 2017-01-07
    • 2011-09-05
    • 2011-11-16
    • 2014-05-18
    • 2023-03-11
    • 2022-10-15
    • 2021-01-07
    • 2011-06-02
    • 2011-04-26
    相关资源
    最近更新 更多