pdftk
によるブックマークを含む一部のpdfファイルからメタデータを取得することにより、pdfメタデータのブックマークの形式を確認します。 pdftk
を使用すると、pdfファイルのブックマークを追加および編集できると思います。
ここに私が従う3つのステップがあります:
pdftk in.pdf dump_data > in.info
を使用して、pdfファイルからテキストファイルにメタデータ(ブックマークがある場合はそれを含む)を取得します。次に、メタデータテキストファイルin.info
にブックマークを追加し、
InfoKey: Creator
InfoValue: PScript5.dll Version 5.2
InfoKey: Title
InfoValue: SSReader Print.
InfoKey: Producer
InfoValue: Acrobat Distiller 7.0 (Windows)
InfoKey: Author
InfoValue: Administrator
InfoKey: ModDate
InfoValue: D:20050605073244+08'00'
InfoKey: CreationDate
InfoValue: D:20050605073244+08'00'
PdfID0: 591a87c91dc76881fdf2ccf3811e72a5
PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72
NumberOfPages: 400
PageLabelNewIndex: 1
PageLabelStart: 1
PageLabelNumStyle: DecimalArabicNumerals
に
InfoKey: Creator
InfoValue: PScript5.dll Version 5.2
InfoKey: Title
InfoValue: SSReader Print.
InfoKey: Producer
InfoValue: Acrobat Distiller 7.0 (Windows)
InfoKey: Author
InfoValue: Administrator
InfoKey: ModDate
InfoValue: D:20050605073244+08'00'
InfoKey: CreationDate
InfoValue: D:20050605073244+08'00'
PdfID0: 591a87c91dc76881fdf2ccf3811e72a5
PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72
NumberOfPages: 400
BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: About the Author
BookmarkLevel: 1
BookmarkPageNumber: 5
BookmarkBegin
BookmarkTitle: Title page
BookmarkLevel: 1
BookmarkPageNumber: 6
BookmarkBegin
BookmarkTitle: Copyright page
BookmarkLevel: 1
BookmarkPageNumber: 7
BookmarkBegin
BookmarkTitle: Foreword
BookmarkLevel: 1
PageLabelNewIndex: 1
PageLabelStart: 1
PageLabelNumStyle: DecimalArabicNumerals
pdftk in.pdf update_info in.info output out.pdf
でPDFファイルに戻します。しかし、新しいPDFファイルout.pdf
をevinceまたはAdobe Readerで開くと、新しいPDFファイルにブックマークがありません。
新しいpdfファイルout.pdf
からpdftk out.pdf dump_data > out.info
によってメタデータを取得した場合、out.info
にはブックマークがありません。ブックマークが正常に追加されなかったようです。
何か間違いはないかしら? pdftkでなくても、pdfファイルのブックマークを追加および編集するにはどうすればよいですか?
バージョン1.45(2012-12-06)のように見えますが、pdftkではupdate_infoコマンドを使用してブックマークを変更できます。
Update_infoを使用してPDFのブックマークを追加または変更できるようになりました。
pdftkは間違いなく適切なツールです(適切な構文を使用)。
BookmarkBegin
BookmarkTitle: Chapter 1
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Paragraph 1.1
BookmarkLevel: 2
BookmarkPageNumber: 1
それでもそれらのUNIXスクリプトを使い続ける場合は、
pdftk
からダンプされたブックマークデータを抽出するgs
を受け入れます。gs
スクリプトを使用してそれらをpdfmarksとマージしますhttp://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/ スクリプトをご覧くださいpdf-merge.py
あなた(または私)が望むことを正確に実行します。
pdf-merge.py --output=merged.pdf input1.pdf input2.pdf
彼のスクリプトでいくつかのマイナーな改善を行うことができました
とにかく、それはうまくいくはずです
pdftk
ブックマークの形式は少し面倒です。代わりに、bash
、sed
、pdftk
およびpython3
を使用して独自のスクリプトを作成しました。このリポジトリで確認してください: https://github.com/SiddharthPant/booky
これで、このようなテキストファイル(bkmrks.txt
)を作成できるようになりました。これは、1000ページのPDFでも、わずか5分で作成できます。
{
Title1, 1
Title2, 2
{
Subtitle1, 3
Subtitle2, 4
{
SubSubtitle1, 5
...
}
}
}
そして、私のスクリプトを使用します
./booky.sh pdf_file.pdf bkmrks.txt
これにより、ブックマークが含まれるpdf(pdf_file_new.pdf
)が自動的に作成されます。
カレブ、
私が理解している限りでは、PDF仕様に従ってブックマークをpdftk
のような診断ツールを介して挿入することはできません。章を参照するメタデータを更新し、ランディングアンカーをブックマークする存在しないと確実に機能しなくなります。PDFが不整合になったり、開けなくなったりすることもあります。
結局、Java + iTextライブラリを使用して このチュートリアル で提案されていることを実行しましたが、毎日何百ものPDFを扱っているため、自動化する必要がありました。 1回限りの場合は、Adobe Acrobatでこれを実行できます。
このすべての良い答えを要約すると:
GitHubには bmconverterプロジェクト があり、さまざまなPDFブックマーク形式に変換できます。これは、pdftk出力をjpdftweak形式に変換できますが、jpdftweakを使用する場合は、 jpdftweak内からすべての作業を実行できるため、pdftk出力をcsvに変換します。
残念ながら、pdfmarksはプロジェクトでサポートされていませんが、幸運なことに、誰かがpdftk出力をpdfmarksに変換できるスクリプトを bmconverter issues に投稿しました。したがって、ghostscriptバッチオプションはオプションです
次のように、各ブックマークエントリの前にBookmarkBegin
を追加するだけです
BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
⋮
手順1で使用したリダイレクトにより、update_infoが正しく機能しなくなります。代わりに、出力ファイルをpdftkに指定する必要があります。
pdftk in.pdf dump_data output in.info
同様の質問からこの回答を参照してください: https://stackoverflow.com/a/30308964/31589
リダイレクトを使用して作成したファイルのファイルサイズはわずかに大きく、update_infoコマンドを実行すると、pdftkが「警告:LoadDataFile();の予期しないケース1);続行」メッセージを発行します。