yk700101の日記: merge PDF documents and add page number
日記 by
yk700101
○概要
複数の PDF ファイル(A4(縦))を1つの PDF ファイルにまとめ、ページ番号を追加する。
○備考
1. pdftk, pdflatex を使用する。
2. PDF のバージョンが古いと、ページ番号を付けられない模様。
○環境
Debian GNU/Linux 4.0 (etch)(i386)
○操作例
#!/bin/sh
#作業ディレクトリ
DIR_TEMP=temp
#ページごとのファイルを作成する際の番号フォーマット
PAGE_NUM_FORMAT='%04d'
# 作業ディレクトリを作成する
mkdir ${DIR_TEMP}
# 対象の PDF ファイル群を1つのファイルにまとめる。
pdftk \
A.pdf \
B.pdf \
C.pdf \
D.pdf \
E.pdf \
output \
${DIR_TEMP}/all.pdf
# 作業ディレクトリに移動する
pushd ${DIR_TEMP}
# まとめた PDF ファイルを1ページごとのファイルに分割する。
pdftk all.pdf burst output all_${PAGE_NUM_FORMAT}.pdf
# 分割処理の出力結果から、まとめた PDF ファイルのページ数を得る
PAGE_COUNT=$( grep NumberOfPages doc_data.txt | cut -f 2 -d ' ' )
# ページ番号だけの PDF ファイルを作成する。
(
(
echo '\documentclass[a4paper]{article}'
echo '\textheight 24.6cm'
echo '\footskip 0cm'
echo '\begin{document}'
for (( page = 1 ; page <= ${PAGE_COUNT} ; page = page + 1 )) do
echo '\ \newpage'
done
echo '\end{document}'
) \
> page.tex
pdflatex page.tex
)
# ページ番号だけの PDF ファイルを1ページごとにファイル分割する。
pdftk page.pdf burst output page_${PAGE_NUM_FORMAT}.pdf
# 各ページごとに ページ番号を加えた(背景にした)ファイルを作成する。
for (( page = 1 ; page <= ${PAGE_COUNT} ; page = page + 1 )) do
fmt_page=$( printf ${PAGE_NUM_FORMAT} $page )
pdftk all_${fmt_page}.pdf output all_AddPageNum_${fmt_page}.pdf background page_${fmt_page}.pdf
done
# ページ番号を加えたファイルを1つのファイルにまとめる。
pdftk all_AddPageNum_*.pdf output all_AddPageNum.pdf
# 作成した PDF を作業ディレクトリから取得する
mv all_AddPageNum.pdf ..
# 元のディレクトリに戻る
popd
# 不要な作業ファイルを削除する。
rm -r ${DIR_TEMP}
○参考
・Debian User Forums :: View topic - HowTo Add Page Numbers to a PDF File
http://forums.debian.net/viewtopic.php?t=30598
○更新履歴
2008/12/15 作成
複数の PDF ファイル(A4(縦))を1つの PDF ファイルにまとめ、ページ番号を追加する。
○備考
1. pdftk, pdflatex を使用する。
2. PDF のバージョンが古いと、ページ番号を付けられない模様。
○環境
Debian GNU/Linux 4.0 (etch)(i386)
○操作例
#!/bin/sh
#作業ディレクトリ
DIR_TEMP=temp
#ページごとのファイルを作成する際の番号フォーマット
PAGE_NUM_FORMAT='%04d'
# 作業ディレクトリを作成する
mkdir ${DIR_TEMP}
# 対象の PDF ファイル群を1つのファイルにまとめる。
pdftk \
A.pdf \
B.pdf \
C.pdf \
D.pdf \
E.pdf \
output \
${DIR_TEMP}/all.pdf
# 作業ディレクトリに移動する
pushd ${DIR_TEMP}
# まとめた PDF ファイルを1ページごとのファイルに分割する。
pdftk all.pdf burst output all_${PAGE_NUM_FORMAT}.pdf
# 分割処理の出力結果から、まとめた PDF ファイルのページ数を得る
PAGE_COUNT=$( grep NumberOfPages doc_data.txt | cut -f 2 -d ' ' )
# ページ番号だけの PDF ファイルを作成する。
(
(
echo '\documentclass[a4paper]{article}'
echo '\textheight 24.6cm'
echo '\footskip 0cm'
echo '\begin{document}'
for (( page = 1 ; page <= ${PAGE_COUNT} ; page = page + 1 )) do
echo '\ \newpage'
done
echo '\end{document}'
) \
> page.tex
pdflatex page.tex
)
# ページ番号だけの PDF ファイルを1ページごとにファイル分割する。
pdftk page.pdf burst output page_${PAGE_NUM_FORMAT}.pdf
# 各ページごとに ページ番号を加えた(背景にした)ファイルを作成する。
for (( page = 1 ; page <= ${PAGE_COUNT} ; page = page + 1 )) do
fmt_page=$( printf ${PAGE_NUM_FORMAT} $page )
pdftk all_${fmt_page}.pdf output all_AddPageNum_${fmt_page}.pdf background page_${fmt_page}.pdf
done
# ページ番号を加えたファイルを1つのファイルにまとめる。
pdftk all_AddPageNum_*.pdf output all_AddPageNum.pdf
# 作成した PDF を作業ディレクトリから取得する
mv all_AddPageNum.pdf ..
# 元のディレクトリに戻る
popd
# 不要な作業ファイルを削除する。
rm -r ${DIR_TEMP}
○参考
・Debian User Forums :: View topic - HowTo Add Page Numbers to a PDF File
http://forums.debian.net/viewtopic.php?t=30598
○更新履歴
2008/12/15 作成