一段时间以来,我一直在尝试使用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我想打印出一个物体的坐标,如果它是一条线或文本。如果它是文本,我也希望能够打印出文本。有比我更了解这个库的人知道我可以做些什么来修复这个问题吗?
发布于 2013-11-28 21:42:53
此answer将向您展示如何提取文本。
要获取文本定位信息,还必须处理以下命令:
Tc、Tw、Tz、TL、T*、Tr和Tm。
你肯定需要从Adobe下载PDF spec来获取所有的详细信息。有一章完全是关于文本处理的。这是非常值得你花时间打印出来的章节,因为你将会经常参考它。你需要知道的一切都在那里,但并不总是显而易见的。
你还需要使用一点线性代数。不过,并不是太复杂。
由于有许多方法可以实现相同的结果,因此完全实现所有命令非常重要,即使您要处理的文档可能不需要某些功能。例如:我遇到一个文档,它将所有的文本大小设置为一个点,这打乱了我所有的计算,直到我意识到它是使用文本缩放因子来设置实际的字体大小。
发布于 2019-02-13 10:39:02
使用PoDoFo工具"podofotxtextract“它会给你x,y坐标( PoDoFo包的工具文件夹)。从Pdf中提取文本。
https://stackoverflow.com/questions/11455081
复制相似问题