LoginSignup
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-05-22

環境

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

はじめに

複数の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.
$ 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の処理が遅いですが, 一応実行できます.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3