我一直试图使用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
我想打印出一个对象的坐标,如果它是一条线或文本。如果是文本,我也希望能够打印出文本。有谁知道这个库比我知道我能做些什么来解决这个问题?
答案 0 :(得分:3)
此answer将向您展示如何提取文字。
要获取文本定位信息,您还必须处理以下命令:
Tc
,Tw
,Tz
,TL
,T*
,Tr
和Tm
。
您肯定需要从Adobe下载PDF spec以获取所有详细信息。有一章专门讨论文本处理。打印出那一章是非常值得的,因为你会指的是 lot 。你需要知道的一切都在那里,但并不总是很明显。
您还需要使用一些线性代数。但是,没有什么太复杂了。
由于有很多方法可以实现相同的结果,因此即使您要处理的文档似乎不需要某些功能,也必须彻底实施所有命令。例如:我遇到了一个文档,它将所有文本大小设置为一个点,这会丢弃所有计算,直到我意识到它使用文本缩放因子来设置实际的字体大小。
答案 1 :(得分:1)
使用PoDoFo工具“ podofotxtextract”,它会为您提供x,y坐标(PoDoFo软件包的工具文件夹)。从Pdf中提取文本。