
chapter1.pdf
複数のPDFファイル(など)がありchapter2.pdf
、各ファイルは本の一枚です。今、私はそれらを1つのpdfにマージする方法を知っていますが(私はpdfunite
popplerのコマンドを使用します)、出力ファイルが大きいので、リストを書かないと章を見つけるのは難しいです。では、マージされた各章がアイテムである埋め込み目次をどのように生成しますか?
章リストとそのページ番号を含む出力ファイルにページを作成したくありません。これらの機能をサポートするすべてのPDFリーダー(または電子書籍デバイス)から検索できるPDFファイルのインデックス/カタログメタデータが必要です。
答え1
非破壊的@bu5hmanの回答バージョン:
#!/bin/bash
out_file="combined.pdf"
bookmarks_file="/tmp/bookmarks.txt"
bookmarks_fmt="BookmarkBegin
BookmarkTitle: %s
BookmarkLevel: 1
BookmarkPageNumber: %d
"
rm -f "$bookmarks_file" "$out_file"
declare -a files=(*.pdf)
page_counter=1
# Generate bookmarks file.
for f in "${files[@]}"; do
title="${f%.*}"
printf "$bookmarks_fmt" "$title" "$page_counter" >> "$bookmarks_file"
num_pages="$(pdftk "$f" dump_data | grep NumberOfPages | awk '{print $2}')"
page_counter=$((page_counter + num_pages))
done
# Combine PDFs and embed the generated bookmarks file.
pdftk "${files[@]}" cat output - | \
pdftk - update_info "$bookmarks_file" output "$out_file"
仕組みは次のとおりです。
- 生成する
bookmarks.txt
。 - PDFを
combined.pdf
。 combined.pdf
に更新されましたbookmarks.txt
。
答え2
私が使用した機能はまさにこれを行うことです。拡張子で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