複数のpdfにheaderをつける. txt等からpdfを作成する. pandoc, pdftk, shellscrpit

環境

mac osx 10.11 el capitan
pandoc 1.17.0.3 < Compiled with texmath 0.8.6.3, highlighting-kate 0.6.2.
pdftk2.02

git

https://github.com/KeitaSumiya/shellscript/tree/master/add_filename_header_pdf

はじめに

複数のpdfにheaderをつけます. terminalで全部やります.
大まかな手順は

  • (pdf以外であれば目的のファイルをpdf化する)
  • header用のpdfを作成する
  • 目的pdfの上にheader-pdfをstampする
  • stampしたpdf達をmergeする

です.
shellscriptで実行します.

事前にinstallする必要があるのは

  • pandoc (header-pdfの作成) > brew install pandoc
  • tex (header-pdfの作成, pandoc内で使用) > tex live
  • pdftk > brewとか

です.

pandoc

参考

install
http://pandoc.org/installing.html
manual
http://pandoc.org/MANUAL.html
demos
http://pandoc.org/demos.html
日本語 使い方 参考
http://qiita.com/sky_y/items/80bcd0f353ef5b8980ee
docx, md
http://www.mscharhag.com/software-development/pandoc-markdown-to-pdf

commands

txt2pdfの例だけど, md2pdfとかでもたぶん大体同じ.

基本
pandoc input.txt -o output.pdf

日本語文書
pandoc input.txt -o output.pdf -V documentclass=ltjarticle --latex-engine=lualatex

フォントを変える(ヒラギノとかの指定方法はわからなかったけど, fontbookの中の英語フォントは大体いけた)
pandoc input.txt -o output.pdf -V mainfont="Phosphate"

フォントサイズを変える(12pt以外うまくいかなかったけど, たぶんそれはtex側の問題)
pandoc input.txt -o output.pdf -V fontsize=12pt

複数の設定を実行する
pandoc input.txt -o output.pdf -V mainfont="Phosphate" -V fontsize=12pt

marginを変える(左右上下すべてを0mmに設定する)
pandoc input.txt -o output.pdf -V geometry:margin=0mm

marginを変える(左右上下を個別に設定する)
pandoc input.txt -o output.pdf margin-left=0mm -V margin-top=-2mm -V margin-bottom=0mm

用紙のサイズを変える
pandoc input.txt -o output.pdf -V papersize:a4
以下のようにlatexのengineを変更しないと反映されないかも?
pandoc input.txt -o output.pdf --latex-engine=lualatex -V papersize:a4

pdftk

参考

以前の自分の記事:

pdftk on OSX10.11(El capitan)
http://qiita.com/keitasumiya/items/83756caf2865291707fb
moodleからフッター付のまとめpdfを作成
http://qiita.com/keitasumiya/items/7975b068f22ddb7ddb82

pandoc

commands

merge
$ pdftk input1.pdf input2.pdf output output.pdf

merge all
$ pdftk *.pdf output output.pdf

stamp
$ pdftk input.pdf stamp header.pdf output output.pdf

background
$ pdftk input.pdf background header.pdf output output.pdf

本題

ファイル名のヘッダーを付ける.

$ tree
.
└── pdf
    ├── ab9999_YamadaTaro.pdf
    ├── ef9990_山本三郎.pdf
    └── hg9980_SatoJiro.pdf

commands

mkdir txt
mkdir txt_pdf
mkdir output_pdf

cd pdf
ls | sed 's/\./_/g' | awk -F'_| ' '{print "echo",$1"_"$2,">",$1".txt"}' | sh
ls | grep .txt | awk '{print "mv",$0,"../txt"}' | sh

cd ../txt
ls | sed 's/\./_/g' | awk -F'_| ' '{print "pandoc",$1".txt -o",$1".pdf -V documentclass=ltjarticle --latex-engine=lualatex -V geometry:margin=0mm -V fontsize=12pt -V papersize:a4"}' | sh
ls | grep .pdf | awk '{print "mv",$0,"../txt_pdf"}' | sh

cd ../pdf
ls | awk -F'_| ' '{print "pdftk",$0,"stamp ../txt_pdf/"$1".pdf","output ../output_pdf/"$1".pdf"}' | sh

cd ../output_pdf
pdftk *.pdf output ../output.pdf

results

$ tree
.
├── output.pdf
├── output_pdf
│   ├── ab9999.pdf
│   ├── ef9990.pdf
│   └── hg9980.pdf
├── pdf
│   ├── ab9999_YamadaTaro.pdf
│   ├── ef9990_山本三郎.pdf
│   └── hg9980_SatoJiro.pdf
├── txt
│   ├── ab9999.txt
│   ├── ef9990.txt
│   └── hg9980.txt
└── txt_pdf
    ├── ab9999.pdf
    ├── ef9990.pdf
    └── hg9980.pdf
スクリーンショット 2017-05-22 13.11.06.png
スクリーンショット 2017-05-22 13.11.17.png

pandocの処理が遅いですが, 一応実行できます.