【问题标题】:How to get author of a pdf document with mupdf如何使用 mupdf 获取 pdf 文档的作者
【发布时间】:2014-11-17 13:57:40
【问题描述】:

如何使用 mupdf 库获取 pdf 文档的元数据(例如标题、作者、创建日期等)?没有足够的文档来找出这个功能。评论也不够。最有可能的是,有一个用于此目的的功能,但在这种情况下很难找到。以下代码是我目前所拥有的。

char info[64];
globals *glo = get_globals(env, thiz);

fz_meta(glo->doc, FZ_META_INFO, info, sizeof(info));

我使用了FZ_META_INFO 标签,但它不起作用。我没有得到任何信息,只是空的。我检查过它是否有元数据。任何帮助表示赞赏。

编辑:

目标 Android sdk:20

最小 Android sdk:15

Mupdf 版本:1.6

ndk: r10c

开发操作系统:Ubuntu 12.04

【问题讨论】:

    标签: pdf mupdf


    【解决方案1】:

    在什么意义上“不起作用”?引发错误?崩溃?您确定您使用的 PDF 文件有任何“信息”元数据吗?

    MuPDF 的版本是多少?你用的是什么平台?

    您需要在传递给 fz_meta 的缓冲区中设置相关键在调用 fz_mets 之前,我注意到您没有这样做。

    请参阅第 487 行附近的 win_main.c,在您通过宏后解析为

    char info[256]
    
    sprintf(info, "Title");
    fz_meta(doc, FZ_META_INFO, info, 256);
    

    返回时,'info' 将包含与字典中的 Title 键关联的元数据。

    如有疑问,请构建示例应用程序并在调试器中跟踪它......

    【讨论】:

    • 从您的回答中,我了解到,sprintf(info, "Title"); 在缓冲区中设置了密钥。我试过了,但没有任何改变。仍然返回空字符串。我查看了 win_main.c,但没有找到任何与我的案例相关的行。即使我使用 Android Studio,我也会使用 Eclipse 进行更深入的调试,但感谢您提供有关此问题的更多信息。
    • 在使用 FZ_META_INFO 枚举时,您发送到 fz_meta 的缓冲区必须使用与您要从输入 PDF 中的 Info 字典中检索的数据关联的键进行初始化。我认为您知道 PDF 结构吗?所以您知道 Info 字典可能包含某些用于检索特定元数据的键?也许如果您与我共享您正在测试的 PDF 文件,我可能会更具体。我不明白为什么你在 win_main.c 中找不到相关代码,有一个名为 SETUTF8 的宏使用 fz_meta 检索信息。
    • +1 为这个很好的答案。但是这里有一个问题。在文件pdf-xref.c 的函数pdf_meta 下,如果FZ_META_INFOinfo = pdf_dict_gets(info, *(char **)ptr); 在我传递info 数组时会导致致命问题。进入fz_meta 函数(Fatal signal 11 (SIGSEGV), code 1, fault addr 0x6c746954 in tid 29833)。我已经用info = pdf_dict_gets(info, (char *)ptr); 更改了线路并且它有效。如果这是一个错误,则应填写错误报告。
    • @KenS 我正在使用 mupdf 1.7,但它没有 FZ_META_INFO。我该怎么办..?
    • 界面变了。要么阅读更改日志,要么遵循我提出的建议;构建示例应用程序并按照它在调试器中的操作。
    【解决方案2】:

    如果正确的转换允许发送密钥, 这个转换是不正确的,不能接收一个 char*。

    示例; 正确投射以发送请求

    char buff[2048];
    strcpy(buff,"CreationDate")
    if (fz_meta(ctx,doc,FZ_META_INFO,&buff,2048)) {
        buff[0] = 0;
    }
    

    将: 找到问题的关键, 转换 utf8 然后在copyback结果时会崩溃

    正确转换以接收请求

    char buff[2048];
    strcpy(buff,"CreationDate")
    if (fz_meta(ctx,doc,FZ_META_INFO,buff,2048)) {
        buff[0] = 0;
    }
    

    在字典扫描期间会崩溃。 看起来真的像个虫子! 我确认修改原始来源

    info = pdf_dict_gets(ctx, info, (char *)ptr);
    

    是要走的路。 (虽然奇怪的是在写代码的时候没人发现它,因为 Meta 是经常使用的有用特性

    【讨论】:

      猜你喜欢
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 2014-04-28
      • 2016-08-06
      相关资源
      最近更新 更多