[バッチ] 特定フォルダ配下にあるTIFFをPDFに変換する (ImageMagick)
はじめに
事務所の複合機に、スキャンしたデータをPDFに変換してNASへ転送してくれる機能があるので重宝していた。
しかし、ある日設定が変わってしまい、PDFではなくTIFFで保存されるようになってしまった
複合機の設定を変更することでデータ形式をPDFに戻すことはできたが、それまでの間にスキャンした膨大な数のTIFFをどうしよう問題が発生した。
手法の検討
ファイルのコンバート
どのようにTIFFをPDFにするか、ソフトウェアの選定を行った。
1. オンライン変換ツール
オンラインでPDF化できるサイトは山ほどヒットしたが、社内文書を得体の知れないWebサービスへ投げるのはあり得ないので却下。
アップロードしたデータがどのように扱われるか分かったもんではない。たとえ個人用途でも避けた方がよいだろう。
2. 変換ソフトウェア
フリーソフトで何とかできるものはないかググったところ、数は少ないもののヒットした。
しかしフリーと謳っているものでも実際は無料で変換できるページ数に限りがあったりと、無償で出来ることに限りがあった。
3. ImageMagick
いろいろお世話になっている画像変換ソフト。ライセンスも比較的緩く、割と自由に使えるうえ、かなり高性能。
見たところPDFへの変換も可能なようだったので、最終的にImageMagickを使うことにした。
ファイルの抽出
NASの特定フォルダの配下にPDFファイルとTIFFファイルが混在しており、かつサブフォルダにも振り分けられている状況だった。
さらにサブフォルダの数や階層が結構な数あり、手動で潜るのは非現実的であった。
加えて、可能な限り作業端末を汚さないことを考えたとき、枯れた技術であるバッチファイルを採用することとした。
実例
バッチファイルで*.tif
ファイルを探し出し、順番にImageMagickへ渡すコードを書いた。
@ECHO OFF
setlocal enabledelayedexpansion
REM ターゲットフォルダの指定
SET TARGETDIR="\\server\fax"
ECHO ―――――――――――――――――――――――――――――――――
ECHO.
ECHO ImageMagick TIFF→PDF一括変換
ECHO.
ECHO ―――――――――――――――――――――――――――――――――
ECHO.
ECHO ImageMagickを使ってTIFFファイルをPDFファイルへ変換します
ECHO サブフォルダも走査します
ECHO.
ECHO 対象ディレクトリ: %TARGETDIR%
ECHO.
PAUSE
REM ImageMagickバイナリが存在するか確認
magick -version 1>nul: 2>nul:
IF NOT %errorlevel%==0 GOTO NoMagick:
REM ターゲットディレクトリ以下の*.tifファイルを走査
FOR /F "usebackq" %%a IN (`DIR /A-D /S /B "%TARGETDIR%\*.tif"`) DO (
ECHO %%a 変換中...
REM 出力先のファイル名の決定(拡張子を.pdfに変更)
SET OUTFILE=%%~pa%%~na.pdf
REM PDF変換(600dpi)
magick -density 600 -compress zip %%a !OUTFILE!
REM 元のTIFFファイルを消すなら以下のREMを外す
REM DEL %%a
)
ECHO.
ECHO 変換を完了しました。
ECHO.
GOTO :EOF
:NoMagick
ECHO.
ECHO ImageMagickが見つかりません。
ECHO 先にImageMagick(magikコマンド)を導入してください。
ECHO.
:EOF
PAUSE
動きとしてはごくシンプルで、冒頭で指定したターゲットフォルダ以下を走査して拡張子.tif
のファイルを探し
順番にImageMagickに渡してPDF化している。
解像度は原稿に合わせて適当に設定する。
変換後に元のTIFFファイルを消してもいいかなとも思ったが、
ImageMagickの成功失敗の戻り値がよくわからず、万一失敗したときに元データまで消失してしまうと取り返しがつかないことから、実環境では元ファイルも残すことにした。
おわりに
結局、これも作ったものの使わなかったのでここで供養
Discussion