簡単に解析できるように、一部の PDF ドキュメントに保存されているページ ラベルをエクスポートしたいと考えています。PDF 文書を で変換した後に掘り下げることができることはわかっていますqpdf
が、これはやり過ぎのようです。
各ページのページ ラベルを (または他のメタデータと一緒に) 単純に印刷するコマンドライン ツールはありませんか? PDFSpy がラベルをエクスポートすることは知っていますが、300 ドルはオプションではありません。ソリューションは無料であることが望ましいです。
簡単に解析できるように、一部の PDF ドキュメントに保存されているページ ラベルをエクスポートしたいと考えています。PDF 文書を で変換した後に掘り下げることができることはわかっていますqpdf
が、これはやり過ぎのようです。
各ページのページ ラベルを (または他のメタデータと一緒に) 単純に印刷するコマンドライン ツールはありませんか? PDFSpy がラベルをエクスポートすることは知っていますが、300 ドルはオプションではありません。ソリューションは無料であることが望ましいです。
簡単な答え:
各ページのページラベルを「単に印刷」できる(無料の)ツールを私は知りません。
qpdf
また、または同等の機能を備えたツールを使用して、拡張圧縮オブジェクトおよびオブジェクトストリームを回避することはできません。
長い答え:
ページラベルに関して安全に信頼できるのはこれらのツールだけなので、そのようなツールはありません。これらは次のとおりです。
/Type /Catalog
ます。/Root
ドキュメントのトレーラーには、キーとそれに続く間接的なオブジェクト番号の参照を使用して、オブジェクトを見つける場所が示されます。/PageLabels
です。ここで、比較的簡単になりません。キーが参照するオブジェクトは、圧縮されたオブジェクトストリーム/PageLabels
に含まれている可能性があるためです。これは、そのオブジェクトストリームを展開する必要があることを意味します。
ページラベルの説明をASCIIとして取得することに本当に成功した場合は、それが簡単に解析できるフラットリストではないことに気付くでしょう(isのようにdictionary
)。これは数値ツリーです。
これらの複雑さの詳細については説明しません。考えられるすべてのバリエーションを説明するには非常に長い記事が必要になるためです。公式のISOPDF-1.7仕様で直接お読みください。
しかし、代わりに、ASCIIPDFコードの例を示します。
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仕様を勉強することによってのみそれを理解することができます。