首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在命令行上导出PDF页面标签

在命令行上导出PDF页面标签
EN

Stack Overflow用户
提问于 2012-10-16 21:56:00
回答 2查看 3K关注 0票数 12

为了便于解析,我想导出一些PDF文档中存储的页面标签。我知道我可以在将PDF文档与qpdf转换后深入研究它,但这似乎有点过火了。

是否没有命令行工具可以简单地打印每个页面的页面标签(或者与其他元数据一起)?我知道PDFSpy会输出标签,但是300美元不是一种选择,最好是免费的解决方案。

EN

回答 2

Stack Overflow用户

发布于 2012-10-16 23:56:44

简短回答:

我不知道有任何(免费)工具可以为每一页“打印”页面标签。

此外,您将无法避免扩展压缩对象和对象流,使用像qpdf这样的工具或具有同等功能的工具。

长答案:

没有这样的工具,因为当涉及到页面标签时,这些是您唯一可以安全依赖的东西。这些建议如下:

  1. 每个PDF文档必须包含一个根对象。
  2. 根对象必须为/Type /Catalog
  3. 文档的预告片将显示使用键/Root查找对象的位置,后面跟着间接的对象编号引用。
  4. 如果文档使用非标准的页面标签,那么文档根对象必须有一个名为/PageLabels的条目。

这里是它停止相对容易的地方。因为/PageLabels键引用的对象可能包含在压缩的对象流中。这意味着您必须扩展该对象流。

如果您真的成功地将页面标签描述为ASCII,您会发现它不是一个容易解析的平面列表(就像dictionary那样):它是一个数字树。

我将不讨论这些复杂性的细节,因为描述所有可能的变体需要一篇非常长的文章。您最好在正式ISO PDF-1.7规范中直接阅读它。

但是,我将在ASCII PDF代码中给出一个示例:

代码语言:javascript
复制
213 0 obj
  << /Type /Catalog
     /PageLabels 
        << 
           /Nums 
                 [ 
                   0 <<           % start labeling from page no. 1
                       /S /r      % label with lowercase roman numbers
                     >> 
                   7 <<           % start new labeling from page no. 8
                       /S /D      % label with standard decimal numbers
                     >> 
                   11 <<          % start labeling page no. 12
                       /S /D      % label with decimal numbers...
                       /P (ABCD-) %   ...but using label prefix 'ABCD-'...
                       /St 3      %   ...followed by '3' as the start decimal.
                     >>
                  ]
        >>
     %%...........................
     %%...more root object keys...
     %%........................... 
  >>
endobj

上面的例子将标注页码1,2,3,.(最后)像这样:

代码语言:javascript
复制
i
ii
iii
iv
v
vi
1
2
3
4
ABCD-3
ABCD-4
ABCD-5
ABCD-6
...and so on until last page...

正如您所看到的,PDF标记页面的方法(将页码映射到页面名称)是完全不直观的。您只能通过学习PDF规范来理解它。

票数 15
EN

Stack Overflow用户

发布于 2021-03-07 22:13:39

我编写了一个基于Poppler的小型命令行实用程序,它只执行以下任务:https://github.com/HeimMatthias/pdfpagelabels

免责声明:我是OP,并创建了一个不同的帐户下的原始帖子。多年来,我一直通过pdftk (在上面的注释中列出)成功地在我的实现中使用解决方案。然而,去年是从零开始重新实现我们的系统的时候了,我们已经有过很多情况,我们的实现无法解析pdf-tk输出。

新的命令行工具遵循只做一件事,但做得好的理念,只需打印pdf文件中所有或选定页面的页面标签。如果有人发现这是有用的,在这里偶然发现,那就更好了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12924073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档