我想导出存储在轻松解析某些PDF文档的页面的标签。 我知道有它转换与后我能挖成PDF文档qpdf
,但这似乎是大材小用。
有没有命令行工具,将简单(与其他元数据或共同)打印每个页面的页面标签? 我知道PDFSpy将出口的标签,但$ 300是不是一种选择,最好的解决应该是免费的。
我想导出存储在轻松解析某些PDF文档的页面的标签。 我知道有它转换与后我能挖成PDF文档qpdf
,但这似乎是大材小用。
有没有命令行工具,将简单(与其他元数据或共同)打印每个页面的页面标签? 我知道PDFSpy将出口的标签,但$ 300是不是一种选择,最好的解决应该是免费的。
简短的回答:
我不知道任何免费的工具,可以“简单地打印”的标签页每一页的。
此外,你无法逃避的膨胀所压缩的对象和对象数据流,使用类似的工具qpdf
或一个具有同等能力。
长一点的回答:
有没有这样的工具,因为这是唯一可以安全地依赖,当涉及到页面标签上的几件事情。 这些如下:
/Type /Catalog
。 /Root
,然后间接对象号引用。 /PageLabels
。 这里是它停止相对容易。 因为该对象的/PageLabels
键指的是可被包含在一个压缩对象流 。 这意味着,你不得不展开对象流。
如果你真的成功获得页面的标签为ASCII的描述,你会发现它不是一个容易解析的简单列表(如dictionary
是):它是一个数字的树 。
我不会进入这些复杂的细节,因为这将需要很长的文章来描述所有可能的变化。 你最好直接在阅读它的官方ISO的PDF 1.7规范 。
而是我给你在ASCII码PDF的例子:
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,...(最后):
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规范的理解。