3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

見開き2ページずつになっているPDFを1ページずつに分解する

Last updated at Posted at 2018-08-23

MakerBotのマニュアルを中綴じ冊子印刷しようと思ったら、こんなPDFだったので頭を抱えてしまった。
スクリーンショット 2018-08-24 3.57.35.png

表紙(1ページ)と裏表紙(46ページ)は1ページで独立していて、中間の2〜45ページが見開きで繋がっている。
2~45ページを真ん中でばさっと切って個々のページに別れたPDFに変換したい。

PopplerというツールでPDFの操作ができるらしいので使ってみた。

macOSだとbrewでインストールできる。

popplerのインストール
brew update
brew install poppler

Popplerは複数のコマンドから成る。
今回使うのは、pdfinfo, pdfseparate, pdftocairo, pdfunite の4つ。

まず、pdfinfoで見開きになっているページの縦横のサイズを調べる。

2ページのメタデータを見るコマンド
pdfinfo -f 2 -l 2 Replicator+Manual.pdf
実行結果(例)
Creator:        Adobe InDesign CC (Windows)
Producer:       Adobe PDF Library 10.0.1
CreationDate:   Wed Oct  5 18:46:46 2016 JST
ModDate:        Wed Oct  5 18:47:03 2016 JST
Tagged:         yes
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          24
Encrypted:      no
Page    2 size: 986.4 x 658.8 pts
Page    2 rot:  0
File size:      3004940 bytes
Optimized:      yes
PDF version:    1.4

986.4 x 658.8 pts ということがわかった。

続いて、(元のPDFでいうところの)2〜24ページを、pdfseparateでページごとに分解して、pdftocairoの描画範囲指定オプションを使って見開きの左右を切り出す。
表紙と裏表紙は単に名前だけ変更してコピーする。
最後に、pdfuniteでひとつのPDFにまとめる。

以下のようなスクリプトになった。
ptの値はさきほど調べた986.4 x 658.8のように実数の値もとり得るようだが、-x -y -W -H には整数しか渡せないようなので、結果を見ながら近い整数の値を指定した。

convert.sh
#!/bin/sh

input="Replicator+Manual.pdf"
output="manual.pdf"

find ./split | grep -v '^./split$' | xargs rm
find ./cropped | grep -v '^./cropped$' | xargs rm

pdfseparate -f 1 ${input} split/%d.pdf

#         i = {2, 3, 4}
# i * 2 - 2 = {2, 4, 6}
# i * 2 - 1 = {3, 5, 7}

cp ./split/1.pdf ./cropped/1.pdf
for i in `seq 2 23`; do
  # 見開きの左半分を切り取る
  pdftocairo -pdf split/${i}.pdf -x 0 -y 0 -W 493 -H 659 -paperw 659 -paperh 493 ./cropped/`echo "${i} * 2 - 2" | bc`.pdf
  # 見開きの右半分を切り取る
  pdftocairo -pdf split/${i}.pdf -x 493 -y 0 -W 493 -H 659 -paperw 659 -paperh 493 ./cropped/`echo "${i} * 2 - 1" | bc`.pdf
done
cp ./split/24.pdf ./cropped/46.pdf

pdfunite `ls ./cropped | sort -n | xargs printf './cropped/%s\n'` ${output}

ほしかったPDFができた。
スクリーンショット 2018-08-24 4.30.07.png

これでプリンタの中綴じ印刷機能を使えば中綴じ印刷ができるし、中綴じ印刷機能が無いプリンタでも、pdfuniteの引数に渡す順番を変更すれば中綴じ印刷用のPDFを生成できる(かもしれない)(試してない)。

3
4
0

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
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?