web-dev-qa-db-ja.com

PDFにブックマークを追加および編集する

pdftkによるブックマークを含む一部のpdfファイルからメタデータを取得することにより、pdfメタデータのブックマークの形式を確認します。 pdftkを使用すると、pdfファイルのブックマークを追加および編集できると思います。

ここに私が従う3つのステップがあります:

  1. まず、pdftk in.pdf dump_data > in.infoを使用して、pdfファイルからテキストファイルにメタデータ(ブックマークがある場合はそれを含む)を取得します。
  2. 次に、メタデータテキストファイル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
    
  3. 次に、編集したメタデータを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ファイルのブックマークを追加および編集するにはどうすればよいですか?

25
Tim

バージョン1.45(2012-12-06)のように見えますが、pdftkではupdate_infoコマンドを使用してブックマークを変更できます。

Update_infoを使用してPDFのブックマークを追加または変更できるようになりました。

経由: http://www.pdflabs.com/docs/pdftk-version-history/

12
user37186

pdftkは間違いなく適切なツールです(適切な構文を使用)。

BookmarkBegin
BookmarkTitle: Chapter 1
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Paragraph 1.1
BookmarkLevel: 2
BookmarkPageNumber: 1
4
carlo

それでもそれらのUNIXスクリプトを使い続ける場合は、

  1. pdftkからダンプされたブックマークデータを抽出する
  2. ダンプしたブックマークデータをpdfmarks形式に変換するスクリプトを1つ追加します。このスクリプトは、ghostscriptコマンドgsを受け入れます。
  3. gsスクリプトを使用してそれらをpdfmarksとマージします

http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/ スクリプトをご覧くださいpdf-merge.pyあなた(または私)が望むことを正確に実行します。

pdf-merge.py --output=merged.pdf input1.pdf input2.pdf

彼のスクリプトでいくつかのマイナーな改善を行うことができました

  1. ユニコード処理
  2. ブックマークファイルを出力するので、人々もそれを調整できます

とにかく、それはうまくいくはずです

4
larrycai

jPDFtweak (Java、Unix/Linuxで実行)はブックマークを変更できますが、それでスクリプトを作成できるかどうかはわかりません。

スクリプトについては、ネイティブのUnix/Linuxの唯一のオプションは、pdfpagesパッケージを使用したpdflatexだと思います。しかし、まだLaTeXユーザーでない場合、これは学習曲線です。

編集:実際にはそれはghostscriptで可能かもしれません: ここを参照 または ここ または ここ

4
frabjous

pdftkブックマークの形式は少し面倒です。代わりに、bashsedpdftkおよび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)が自動的に作成されます。

4
Siddharth Pant

カレブ、

私が理解している限りでは、PDF仕様に従ってブックマークをpdftkのような診断ツールを介して挿入することはできません。章を参照するメタデータを更新し、ランディングアンカーをブックマークする存在しないと確実に機能しなくなります。PDFが不整合になったり、開けなくなったりすることもあります。

結局、Java + iTextライブラリを使用して このチュートリアル で提案されていることを実行しましたが、毎日何百ものPDFを扱っているため、自動化する必要がありました。 1回限りの場合は、Adobe Acrobatでこれを実行できます。

2
r00fus

このすべての良い答えを要約すると:

GitHubには bmconverterプロジェクト があり、さまざまなPDFブックマーク形式に変換できます。これは、pdftk出力をjpdftweak形式に変換できますが、jpdftweakを使用する場合は、 jpdftweak内からすべての作業を実行できるため、pdftk出力をcsvに変換します。

残念ながら、pdfmarksはプロジェクトでサポートされていませんが、幸運なことに、誰かがpdftk出力をpdfmarksに変換できるスクリプトを bmconverter issues に投稿しました。したがって、ghostscriptバッチオプションはオプションです

2
zetah

次のように、各ブックマークエントリの前にBookmarkBeginを追加するだけです

BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
    ⋮
1
tofleplof

手順1で使用したリダイレクトにより、update_infoが正しく機能しなくなります。代わりに、出力ファイルをpdftkに指定する必要があります。

pdftk in.pdf dump_data output in.info

同様の質問からこの回答を参照してください: https://stackoverflow.com/a/30308964/31589

リダイレクトを使用して作成したファイルのファイルサイズはわずかに大きく、update_infoコマンドを実行すると、pdftkが「警告:LoadDataFile();の予期しないケース1);続行」メッセージを発行します。

0
Bartimaeus