有没有办法使用libpoppler分别访问页眉,页脚和页面内容?

时间:2012-02-20 11:53:21

标签: c++ linux pdf poppler

我使用libpoppler将PDF文件解析为纯文本,我想分别输出页眉,页脚和内容,我该怎么做? 是否有任何结构或类别可以容纳它们?

提前致谢!!

3 个答案:

答案 0 :(得分:0)

免责声明:这可能不是一个好的答案

上次我检查过libpoppler只是一个很好的渲染器,它可以将pdf页面视为一系列矢量绘图操作。从这个意义上讲,它应该可以拦截文本绘制操作,从而以某种方式报告文本。但是我不认为页面页眉/页脚中的文本从矢量的角度来看是特殊的。另外,我已经看到一堆非常昂贵的pdf-to-text转换器程序在这方面惨遭失败。

答案 1 :(得分:0)

不是真的。 PDF没有页眉,页脚和正文的概念(除非您创建标记的PDF)。

答案 2 :(得分:0)

您可以使用poppler_page_get_text()在页面中获取文字。之后你能解析纯文本吗?这是一个示例代码。它不是C ++,但希望你能看到这个想法。

在Debian Unstable amd64上测试,libpoppler-glib-dev 0.18.4-3,gcc 4.7.1-7

$ gcc -Wall -g -Wextra get-text.c $(pkg-config --cflags --libs poppler-glib)

#include <poppler.h>
#include <glib.h>

int main(int argc, char *argv[])
{
    GError *error = NULL;
    PopplerDocument *d;
    PopplerPage *p;
    gchar *f;
    gchar *u;

    g_type_init();

    if (argc < 2)
            g_error("oops: no file name given");

    if (g_path_is_absolute(argv[1]))
            f = argv[1];
    else
            f = g_build_filename(g_get_current_dir(), argv[1], NULL);

    u = g_filename_to_uri(f, NULL, &error);
    if (!u)
            g_error("oops: %s", error->message);

    d = poppler_document_new_from_file(u, NULL, &error);
    if (!d)
            return -1;

    p = poppler_document_get_page(d, 1);
    g_print("%s\n", poppler_page_get_text(p));

    return 0;
}