🔄

[バッチ] 特定フォルダ配下にあるTIFFをPDFに変換する (ImageMagick)

2024/06/14に公開

はじめに

事務所の複合機に、スキャンしたデータをPDFに変換してNASへ転送してくれる機能があるので重宝していた。
しかし、ある日設定が変わってしまい、PDFではなくTIFFで保存されるようになってしまった
複合機の設定を変更することでデータ形式をPDFに戻すことはできたが、それまでの間にスキャンした膨大な数のTIFFをどうしよう問題が発生した。

手法の検討

ファイルのコンバート

どのようにTIFFをPDFにするか、ソフトウェアの選定を行った。

1. オンライン変換ツール
オンラインでPDF化できるサイトは山ほどヒットしたが、社内文書を得体の知れないWebサービスへ投げるのはあり得ないので却下。
アップロードしたデータがどのように扱われるか分かったもんではない。たとえ個人用途でも避けた方がよいだろう。

2. 変換ソフトウェア
フリーソフトで何とかできるものはないかググったところ、数は少ないもののヒットした。
しかしフリーと謳っているものでも実際は無料で変換できるページ数に限りがあったりと、無償で出来ることに限りがあった。

3. ImageMagick
いろいろお世話になっている画像変換ソフト。ライセンスも比較的緩く、割と自由に使えるうえ、かなり高性能。
見たところPDFへの変換も可能なようだったので、最終的にImageMagickを使うことにした。

ファイルの抽出

NASの特定フォルダの配下にPDFファイルとTIFFファイルが混在しており、かつサブフォルダにも振り分けられている状況だった。
さらにサブフォルダの数や階層が結構な数あり、手動で潜るのは非現実的であった。

加えて、可能な限り作業端末を汚さないことを考えたとき、枯れた技術であるバッチファイルを採用することとした。

実例

バッチファイルで*.tifファイルを探し出し、順番にImageMagickへ渡すコードを書いた。

pdfconvert.bat
@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