web-dev-qa-db-ja.com

PDFファイルをマージし、各ファイルをエントリとして目次を自動的に作成します

いくつかのPDFファイルがあります(chapter1.pdfchapter2.pdfなど)、それぞれが本の章です。次に、それらを単一のpdfにマージする方法(popplerからのコマンドpdfuniteを使用します)ですが、出力ファイルが大きいため、目次でインデックスを付けないで章を見つけるのは困難です。それでは、マージされた各チャプターがエントリである埋め込み目次を作成する方法は?

チャプターとそれぞれのページ番号のリストを含むページを出力ファイルに作成したくないことに注意してください。このような機能をサポートする任意のPDFリーダー(または電子ブックデバイス)で閲覧できる、PDFファイルのコンテンツメタデータのインデックス/テーブルが必要です。

9
Seninha

これを正確に行うためにいつも使用する関数。 PDFが展開で順番に正しくソートされることを確認してください。

tp="/tmp/tmp.pdf"
td="/tmp/data"
for i in *.pdf; do
    echo "Bookmarking $i"
    printf "BookmarkBegin\nBookmarkTitle: %s\nBookmarkLevel: 1\nBookmarkPageNumber: 1\n" "${i%.*}"> "$td"
    pdftk "$i" update_info "$td" output "$tp"
    mv "$tp" "$i"
done
pdftk *.pdf cat output myBook.pdf
2
bu5hman

@ bu5hmanの回答の非破壊バージョン:

#!/bin/bash

out_file="combined.pdf"
tmp_dir="/tmp/pdftk_unite"
bookmarks_file="$tmp_dir/bookmarks.txt"
bookmarks_fmt="BookmarkBegin
BookmarkTitle: %s
BookmarkLevel: 1
BookmarkPageNumber: 1
"

rm -rf "$tmp_dir"
mkdir -p "$tmp_dir"

for f in *.pdf; do
    echo "Bookmarking $f..."
    title="${f%.*}"
    printf "$bookmarks_fmt" "$title" > "$bookmarks_file"
    pdftk "$f" update_info "$bookmarks_file" output "$tmp_dir/$f"
done

pdftk "$tmp_dir"/*.pdf cat output "$out_file"
1
Mateen Ulhaq