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

发布于 2025-01-06 21:54:16 字数 92 浏览 2 评论 0原文

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

提前致谢!!

I am using libpoppler to parse PDF file to plain text,and I want to output page header,page footer and content separately,how can I do this??
Is there any structure or class that hold them?

Thanks in advance!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

兰花执着 2025-01-13 21:54:16

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

在 Debian 不稳定 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;
}

You can get text in a page with poppler_page_get_text(). Can you parse pure text afterwards? Here is a sample code. It's not a C++ but hope you can see the idea.

Tested on a 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;
}
最初的梦 2025-01-13 21:54:16

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

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

Disclaimer: This might not be a good answer

Last time I checked libpoppler was just a good renderer that could see a pdf page as a sequence of vector drawing operations. In that sense, it should be possible for it to intercept text-drawing operations, and thus report the text somehow. But I don't think that text in the header/footer of a page be anything special from the vector point of view. Plus, I have seen a loot of very expensive pdf-to-text converter programs to fail miserably at that.

时光匆匆的小流年 2025-01-13 21:54:16

并不真地。 PDF 没有页眉、页脚和正文的概念(除非您创建带标签的 PDF)。

Not really. PDF has no concept of header, footer and body (unless you create tagged PDF).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文