CatHand Blog

アプリ開発やMac弄り

PX-M6010F

A3プリンター複合機を買いました。

A3スキャンができる複合機だとほぼこれしか選択肢がありません。久しぶりにプリンターを買ったんですが最近の機種はすごいですね。両面印刷や両面スキャンできるし、スキャンしたものはそのままGoogle Driveとかに保存できたりすごい便利です。

設定忘れてスキャン後のpdfが別の方向向いてたりすることがたまにあるんですが、そういう場合にプレビューで開いて回転させるのはめんどいので、Automaterのワークフローを作りました。

pdfを回転させるのは pdftk コマンドでできます。pdftk はhomebrew等でインストールしてください。

例えば、全てのページを左回転させるのは以下のスクリプトでできます。pdftkコマンドでは上書きができないっぽいので一度テンポラリファイルに書き出してからmvしています。

#!/bin/zsh

PDFTK="/opt/homebrew/bin/pdftk"

INPUT=$@

FILENAME=${INPUT##*/}
FILENAME_WITHOUT_EXT=${FILENAME%.*}
DIRNAME=${INPUT%/*}
OUTFILE="${DIRNAME}/${FILENAME_WITHOUT_EXT}.tmp.pdf"

$PDFTK $INPUT cat 1-endleft output $OUTFILE
mv $OUTFILE $INPUT

右回転の場合は 1-endleft1-endright に変えればOKです。

で、これをAutomaterのワークフローとして保存します。

保存した.workflowファイルを ~/Library/Services/ に保存するとFinderのコンテキストメニューの「クイックアクション」から上記スクリプトを呼び出せるようになるんですが、複数ファイルを選択して実行したときに1つのファイルしか処理してくれません。

複数ファイルを処理するために、上記ワークフローを呼び出すワークフローを作成します。

この.workflowファイルを ~/Library/Services/ に保存することで、Finderのコンテキストメニューから複数pdfの回転処理ができるようになります。

ついでに、画像のpdfファイルを文字認識して検索可能にするスクリプトも置いておきます。文字認識には tesseract を使っていて、こちらもhomebrewでインストールできます。

#!/bin/zsh

tesseract="/opt/homebrew/bin/tesseract"
pdftk="/opt/homebrew/bin/pdftk"

target="$@"
targetwithoutext="${@%.pdf}"

# pdftoppm
mkdir "${targetwithoutext}.d"
# - png
$pdftoppm -png "${target}" "${targetwithoutext}.d/page"

# tesseract
# - png
find "${targetwithoutext}.d" -type f -name "*.png" | sed 's/\.png$//' | xargs -P8 -n1 -I% $tesseract %.png % -l eng+jpn pdf

# Merge to one pdf file
$pdftk "${targetwithoutext}.d"/*.pdf cat output "${targetwithoutext}-ocr.pdf"

# Clear
rm -r "${targetwithoutext}.d"

これもワークフローにすればFinderのコンテキストメニューから使うことができます。