パスワードを忘れた? アカウント作成
402487 journal

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 作成
typodupeerror

吾輩はリファレンスである。名前はまだ無い -- perlの中の人

読み込み中...