Pocket

npm
https://www.npmjs.com/package/scanned-pdf-margin-cutter
github
https://github.com/ninton/scanned-pdf-margin-cutter

使い方

まず、本のカバーだけをカラーでスキャンして、pdfにします。
本体をカラーまたはグレースケールでスキャンして、pdfにします。

本体について、次の4つを定規で測ります。
1.上側から、切りつめたい長さ(ミリ)
2. 綴じていない側から、切りつめたい長さ(ミリ)
3. 残したい領域の幅(ミリ)
4. 残したい領域の高さ(ミリ)

左綴じで、幅160mm、高さ200mmの本とします。
上側から切りつめたい長さ=10mm
右側(綴じていない側)から、切りつめたい長さ=10mm
残したい領域の幅=130mm
残したい領域の高さ=170mm

整理すると、
左から、20mmカット、130mm残し、10mmカット、です。
上から、10mmカット、170mm残し、20mmカット、です。

すべてのページをこの数値で余白カットしていいでしょうか?
上下方向は問題ないのですが、左右方向は問題があります。

1ページ目は、
左から、20mmカット、130mm残し、10mmカット、です。
2ページ目は、左右を逆転して、
左から、10mmカット、130mm残し、20mmカット、です、
なぜなら、2ぺーじ目は、1ページ目の裏側に印刷されているからです。

つまり、左綴じの場合は、
奇数ページは、左から、20mmカット、130mm残し、10mmカット、です。
偶数ページは、左から、10mmカット、130mm残し、20mmカット、です。

このツールは、本体pdfは、左綴じ、右綴じ、奇数ページ、偶数ページを考慮して、左右余白を計算してカットします。

表紙pdfは、余白カットはせず、(残したい領域の幅)×(残したい領域の高さ)に縮小します。

最終的に、新規pdf(yyyy-mm-dd-HH-MM-SS.pdf)に結果を保存します。表紙pdfや本体pdfは変更しないので、余白の数値を変えながら、何回でも試すことができます。

重要な処理は、GhostScript、ImageMagick、PDFtkが処理しています。GhostScriptが、表紙pdfや本体pdfからページ画像を取り出します。ImageMagickが、ページ画像の余白カットや縮小をして、1画像ごとに1つのpdfに変換します。最後にPDFtkが、全ページpdfを1ファイルに結合します。