2021-08-16
Pandoc, PDF, PDFtk, ShellScript
複数の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
はじめに
複数の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=12ptmarginを変える(左右上下すべてを0mmに設定する)pandoc input.txt -o output.pdf -V geometry:margin=0mmmarginを変える(左右上下を個別に設定する)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.pdfmerge all$ pdftk *.pdf output output.pdfstamp$ pdftk input.pdf stamp header.pdf output output.pdfbackground$ pdftk input.pdf background header.pdf output output.pdf
本題
ファイル名のヘッダーを付ける.
$ tree.└── pdf ├── ab9999_YamadaTaro.pdf ├── ef9990_山本三郎.pdf └── hg9980_SatoJiro.pdf
commands
mkdir txtmkdir txt_pdfmkdir output_pdfcd pdfls | sed 's/\./_/g' | awk -F'_| ' '{print "echo",$1"_"$2,">",$1".txt"}' | shls | grep .txt | awk '{print "mv",$0,"../txt"}' | shcd ../txtls | 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"}' | shls | grep .pdf | awk '{print "mv",$0,"../txt_pdf"}' | shcd ../pdfls | awk -F'_| ' '{print "pdftk",$0,"stamp ../txt_pdf/"$1".pdf","output ../output_pdf/"$1".pdf"}' | shcd ../output_pdfpdftk *.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

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