粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

WindowsコマンドラインからPDFをCrop

この手の記事は何度か書きましたが,
コマンドラインからCropするメモを残します。
(大体同じことを3回調べたらもう記事化するつもりでいます。)

大前提:PDFの余白について

matlabやPPTでpdfを作ったり,

texに付属するps2pdf.batを使って

ps2eps.bat hoge.eps hoge.pdf

でepsをpdfにしたりできます。

同様にepstopdf.plを動かすのも良いでしょう。(こちらはバージョンが1.5になる都合で時々困るんですが)

こいつらはとんでもない余白を持っているので,いつだかの記事で余白を切り取る手法を紹介しました。

ossyaritoori.hatenablog.com

bcpdfcrop

有名なpdfcropにpdfcfop.plがあります。
これはperlを入れていることが前提ですが,まとめて処理できてとても良いです。

Perl入れたくない!という方には以下のbcpdfcropやtcpdfcropのbatファイルが用意されています。
GitHub - aminophen/bcpdfcrop: Windows batch file for pdfcrop

githubからbatファイルをpathの通った所において,
とすることでcropしたPDFを作成可能です。

bcpdfcrop.bat hoge.pdf

batファイルの変更

但し,デフォルトではファイル名のうしろに-cropとつくので名前を指定するか
bcpdfcrop.batやbcpdfcrop_multi.batを開いて「-crop」を全て「_c」とかに変更します。(ハイフンをファイル名に使いたくない)

まとめて実行

まとめて実行するには,cropしたいフォルダに移動して

bcpdfcrop.bat *.pdf

とすれば全てのpdfをcropしてくれます。
できれば名前を変えずそのまま更新するには…どうすれば?

名前を変えずに全てのPDFをCropするbatを作成

2018年8月追記:製作者の方からコメントをいただきました。
「元のPDFを上書きしない」との理念があるようで,同じ名前を指定できないようになっているそうです。

コメントの通り,以下の手順を用いるなどの回避策をうちましょう。
(1) bcpdfcrop.bat を使って foo.pdf → foo_c.pdf でクロップする
(2) del foo.pdf で元のファイルを削除
(3) move foo_c.pdf foo.pdf(または ren コマンド)でファイル移動

bcpdfcrop.batに基づいてPDFをそのままの名前で再cropするbatを作成しました。
名前は「bcpdfcrop_all.bat」とします。

@echo off

for "usebackq delims==" %%i IN (`dir/*.pdf`) 
do bcpdfcrop.bat %%i %%i

あれ~なんかおかしい…
あとで考えよう…