LoginSignup
1
1

More than 5 years have passed since last update.

スキャンした両開きの雑誌を1ページごとに分割する

Posted at

文書はPCで閲覧・管理をしたいが,
最新版の日本ロボット学会誌などのように紙媒体でしか取得できないものもあるので,スキャンしてPCで見ることがよくある.

そのとき2ページ分が1つとなった両開きのスキャンとなるので,分割する必要がある.

pdfcroppdftkで解決したのでメモ.

input.pdfをスキャンしたばかりの数ページが1つにまとまったpdfとする.

TL;DR

まず最初に最終スクリプトにすると

#!/bin/bash -x

# parameter
INPUT_FILE=$1
OUTPUT_FILE=${2:-"output.pdf"}
TMP_DIR=`mktemp -d`
OUT_DIR=`mktemp -d`
bp_per_pts=0.99628

if [ ! $INPUT_FILE ]
then
    echo "You need to set an input pdf file"
    exit
fi

# STEP 1
pdftk $INPUT_FILE burst output $TMP_DIR/file_%04d.pdf

# STEP 2
ls $TMP_DIR/
width_pts=`pdfinfo $TMP_DIR/file_0001.pdf | grep "Page size" | cut -d " " -f 8`
width_bp=`echo "$width_pts * $bp_per_pts" | bc`
half_width_bp=`echo "$width_bp / 2" | bc`

# STEP 3
for i in $TMP_DIR/*.pdf
do
    pdfcrop --margins "0 0 -$half_width_bp 0" $i "$OUT_DIR/`basename $i`_1.pdf" &
    pdfcrop --margins "-$half_width_bp 0 0 0" $i "$OUT_DIR/`basename $i`_2.pdf" &
done
wait

# STEP 4
pdftk $OUT_DIR/*.pdf cat output $OUTPUT_FILE

STEP 1: 複数ページを1つのPDFへとばらばらにする

mkdir /tmp/build
pdftk input.pdf burst output /tmp/build/file_%02d.pdf

STEP 2: サイズを確かめる

pdfinfo /tmp/build/file_01.pdf | grep "Page size"

これはptsという単位で表現される.
大抵はA4(297mm x 210mm)なので,838.32pts x 590.16ptsと返ってくる.

STEP 3: 両開きの各PDFを1ページことに分割する

pdfcropを使うが単位がbpであり,
例えば838.32pts x 590.16ptsのA4の例だとすると,
419pts x 590.16ptsにすれば良い.

より,1pts = 0.99628bpなので,

419pts = 418bpなので,例えば

mkdir /tmp/output
cd /tmp/output
pdfcrop --margins "0 0 -418 0" /tmp/build/file_01.pdf file_01_page_01.pdf
pdfcrop --margins "-418 0 0 0" /tmp/build/file_01.pdf file_01_page_02.pdf

とすれば良い.

STEP 4: 1ファイルにまとめる

pdftk /tmp/output/*.pdf cat output /tmp/output.pdf
1
1
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
1
1