PDFの各ページを分割して組み直すスクリプト
目的
下のように、パワポのスライドが4枚印刷された資料が講義のレジュメとしてよく配られる。
-------- | 1 2 | | 3 4 | --------
これをスキャンして、スキャナ付属のソフト(Windows上)でPDFにしたのだが、Kindleでは読みにくいため下のように2つのPDFに分割したい。
----- ----- | 1 | | 3 | | 2 | | 4 | ----- -----
方法
縦に半分に分割するだけなら簡単なのだが、それでは順番がおかしくなってしまうのが厄介。
pyPdfを使ってPDFのmediaboxあたりを弄ってどうにかしようとしたが上手くいかず。
そこで一度PDFから画像を抜き出し、imagemagickで処理して、再びPDFに戻すことにする。
スクリプト
#!/bin/sh # # version 1 # Create a working directory src=$1 dest=out.pdf date=`date +%y%m%d%H%M%S` dir=/tmp/mypdf-$src-$date mkdir $dir # Split PDF to pbm images pdfimages $src $dir/image cd $dir # Force images turn portrait convert image* -rotate "-90<" rotated-%d.pbm # Split each images to 4 images for file in rotated-* do convert $file -crop 50%x50% cropped-%d.pbm # Append each 2 images convert cropped-0.pbm cropped-1.pbm -append merged-$file-0.pbm convert cropped-2.pbm cropped-3.pbm -append merged-$file-1.pbm rm -f cropped-* done # Compress and merge all images to a PDF convert merged-* -monochrome compressed-%d.png cd - > /dev/null convert $dir/compressed-* $dest # Remove temporary directory/files rm -rf $dir
結果
一応、目的のPDFは出来た。ビュアーで開いて見た限りでは画質の劣化はなし。ただし解像度は10倍近く大きい。
ファイルサイズも元のファイルの3倍くらいになってしまう。時間もかかるし、メモリも喰う。
これはPDFの画像がadobeの独自フォーマットになっているので、どうしようもないはず。Adobe Acrobatを買うか? バッチ処理とか出来るんだろうか。
PDFのメタデータを直接いじる方向ならあるいは…また気が向いたら調べるかも。