Scan Tailor Universalを使って見開き2ページのPDFを1ページずつに分割されたPDFにする作業を自動化するバッチファイル*1を書きました。
引数に与えられたPDFを画像(JPG)に変換して、Scan Tailorの6工程をデフォルト設定でぶん回して得られた画像(TIF)からPDFを出力します。
引数には、目的のPDFファイルを指定(ドラッグ&ドロップでよい)してください。
複数のPDFファイルをドラッグ&ドロップしても機能します。
自動化、といってもそれなりに時間がかかる(学術書1冊20分くらい)ので小さいファイルから試してみてください。
何やってるかわかる方だけ、自己責任で使ってください。
OCR? 自分でかけてください。
以下の3バージョンを作りました。あとは改変などご自由に。
- Scan Tailorで左右分割するバージョン
- 強制的に真ん中で左右分割してからScan Tailorにかけるバージョン
- (参考)Scan Tailorをつかわず、真ん中で左右分割したPDFを作るだけのバージョン
動作のために必要なものは、以下の3つです。
- Scan Tailor Universal(Visual C++ 2013 および Visual C++ 再頒布可能パッケージ パッケージの更新プログラムのインストールが必要になるかも。)
- Ghostscript 10.0.0 for Windows (64 bit)
- ImageMagick-7.1.0-52-Q16-HDRI-x64-dll.exe
既知の不具合
- ファイル名に特殊記号が入っていると動作しません。その場合はエラーメッセージが出ます。
Scan Tailorで左右分割するバージョン
@echo off rem 必要なもの1 Scan Tailor Universal (cli.exeが使えれば他のバージョンでも可、物によっては「Visual C++ 2013 および Visual C++ 再頒布可能パッケージ パッケージの更新プログラム」のインストールが必要です。) rem 必要なもの2 Ghostscript(Ghostscript 10.0.0 for Windows (64 bit)で動作確認) rem 必要なもの3 ImageMagick(ImageMagick-7.1.0-52-Q16-HDRI-x64-dll.exeで動作確認) rem DPIを設定(標準は300。600にすると重いです) set DPI=300 rem 作業フォルダ名を準備(複数ファイルについて並列動作を可能にするため) set year=%date:~0,4% set month=%date:~5,2% set day=%date:~8,2% set date2=%year%%month%%day% set time2=%time: =0% set hour=%time2:~0,2% set minute=%time2:~3,2% set second=%time2:~6,2% set time3=%hour%%minute%%second% set WORKDIR=%TEMP%\stauto%date2%-%time3%\ rem 作業フォルダを作成 If not exist %WORKDIR% mkdir %WORKDIR% If not exist %WORKDIR%lr\ mkdir %WORKDIR%lr\ If not exist %WORKDIR%out\ mkdir %WORKDIR%out\ del %WORKDIR%*.* /q del %WORKDIR%lr\*.* /q del %WORKDIR%out\*.* /q rem 全角スペース、コンマ、セミコロンを含むファイル名の処理(エスケープ文字に置換) set ARGS=%* set ARGS=%ARGS:,=$comma$% set ARGS=%ARGS:;=$semicolon$% set ARGS=%ARGS: =$fullwidthsp$% call :main %ARGS% exit /b rem ここからメインの処理 :main :loop if "%~1"=="" goto :end rem 全角スペース、コンマ、セミコロンを含むファイル名の処理(エスケープ文字を元に戻す) set ARG1=%~1 set ARG1=%ARG1:$comma$=,% set ARG1=%ARG1:$semicolon$=;% set ARG1=%ARG1:$fullwidthsp$= % rem ファイルの存在を確認 if exist "%ARG1%" ( echo %ARG1% の処理を開始します。このウィンドウは閉じないでください。 ) else ( echo %ARG1% が存在しないか、ファイル名に処理できない記号等が含まれており、変換できません。何かキーを押してください。 pause shift goto loop ) rem PDFファイルかどうかを確認 if not %~x1==.pdf ( echo %ARG1% はPDFファイルではありません。何かキーを押してください。 pause shift goto loop ) rem 変換開始 echo %ARG1% をJPGファイルに変換します。 rem Ghostscriptでの処理。インストール先にあわせてパスは書き換えること。 "C:\Program Files\gs\gs10.00.0\bin\gswin64c.exe" -q -dNOPAUSE -dBATCH -sDEVICE=jpeg -r%DPI%x%DPI% -sOutputFile=%WORKDIR%page-%%04d.jpg "%ARG1%" if %errorlevel% neq 0 ( echo エラー;Ghostscriptのインストール先を確認してください。 exit /b ) echo %ARG1% をScan Tailorで処理します。 rem Scan Tailor Universalのインストール先にあわせてパスは書き換える rem 横書き文書の場合は、layout-direction=lrにする "C:\Program Files\Scan Tailor Universal\scantailor-universal-cli.exe" -v --layout-direction=rl --margins-left=10 --margins-right=10 --margins-top=5 --margins-bottom=5 --layout=0 --deskew=auto --content-detection=normal --white-margins=false --color-mode=color_grayscale --dpi=%DPI% --output-dpi=%DPI% --alignment-vertical=original --alignment-horizontal=original --despeckle=cautious --tiff-compression=none --tiff-force-grayscale --start-filter=1 --end-filter=6 %WORKDIR% %WORKDIR%out\ if %errorlevel% neq 0 ( echo エラー;Scan Tailorのインストール先を確認してください。 exit /b ) echo %ARG1% から得られた処理済みのTIFファイルをPDFに変換します。 rem ImageMagickのインストール先にあわせてパスは書き換える "C:\Program Files\ImageMagick-7.1.0-Q16-HDRI\magick.exe" -compress jpeg %WORKDIR%out\*.tif "%ARG1%.pdf" if %errorlevel% neq 0 ( echo エラー;ImageMagickのインストール先を確認してください。 exit /b ) del %WORKDIR%*.* /q del %WORKDIR%out\*.* /q shift goto loop rem 終了処理 :end echo 終了処理中です。 If exist %WORKDIR%out\ rmdir %WORKDIR%out\ /q If exist %WORKDIR%lr\ rmdir %WORKDIR%lr\ /q If exist %WORKDIR% rmdir %WORKDIR% /q
強制的に真ん中で左右分割してからScan Tailorにかけるバージョン
スキャンの具合によってはScan Tailorの左右分割が微妙なので、ImageMagickで強制的に真ん中で左右分割してから処理するバージョンが↓。
@echo off rem 必要なもの1 Scan Tailor Universal (cli.exeが使えれば他のバージョンでも可、物によっては「Visual C++ 2013 および Visual C++ 再頒布可能パッケージ パッケージの更新プログラム」のインストールが必要です。) rem 必要なもの2 Ghostscript(Ghostscript 10.0.0 for Windows (64 bit)で動作確認) rem 必要なもの3 ImageMagick(ImageMagick-7.1.0-52-Q16-HDRI-x64-dll.exeで動作確認) rem DPIを設定(標準は300。600にすると重いです) set DPI=300 rem 作業フォルダ名を準備(複数ファイルについて並列動作を可能にするため) set year=%date:~0,4% set month=%date:~5,2% set day=%date:~8,2% set date2=%year%%month%%day% set time2=%time: =0% set hour=%time2:~0,2% set minute=%time2:~3,2% set second=%time2:~6,2% set time3=%hour%%minute%%second% set WORKDIR=%TEMP%\stauto%date2%-%time3%\ rem 作業フォルダを作成 If not exist %WORKDIR% mkdir %WORKDIR% If not exist %WORKDIR%lr\ mkdir %WORKDIR%lr\ If not exist %WORKDIR%out\ mkdir %WORKDIR%out\ del %WORKDIR%*.* /q del %WORKDIR%lr\*.* /q del %WORKDIR%out\*.* /q rem 全角スペース、コンマ、セミコロンを含むファイル名の処理(エスケープ文字に置換) set ARGS=%* set ARGS=%ARGS:,=$comma$% set ARGS=%ARGS:;=$semicolon$% set ARGS=%ARGS: =$fullwidthsp$% call :main %ARGS% exit /b rem ここからメインの処理 :main :loop if "%~1"=="" goto :end rem 全角スペース、コンマ、セミコロンを含むファイル名の処理(エスケープ文字を元に戻す) set ARG1=%~1 set ARG1=%ARG1:$comma$=,% set ARG1=%ARG1:$semicolon$=;% set ARG1=%ARG1:$fullwidthsp$= % rem ファイルの存在を確認 if exist "%ARG1%" ( echo %ARG1% の処理を開始します。このウィンドウは閉じないでください。 ) else ( echo %ARG1% が存在しないか、ファイル名に処理できない記号等が含まれており、変換できません。何かキーを押してください。 pause shift goto loop ) rem PDFファイルかどうかを確認 if not %~x1==.pdf ( echo %ARG1% はPDFファイルではありません。何かキーを押してください。 pause shift goto loop ) rem 変換開始 echo %ARG1% をJPGファイルに変換します。 rem Ghostscriptでの処理。インストール先にあわせてパスは書き換えること。 "C:\Program Files\gs\gs10.00.0\bin\gswin64c.exe" -q -dNOPAUSE -dBATCH -sDEVICE=jpeg -r%DPI%x%DPI% -sOutputFile=%WORKDIR%page-%%04d.jpg "%ARG1%" if %errorlevel% neq 0 ( echo エラー;Ghostscriptのインストール先を確認してください。 exit /b ) rem 左右分割 echo %ARG1% から得られたJPGファイルを左右分割します。 setlocal ENABLEDELAYEDEXPANSION set numero=0 for %%f in (%WORKDIR%*.jpg) do ( rem ImageMagickのインストール先にあわせてパスは書き換えること。 "C:\Program Files\ImageMagick-7.1.0-Q16-HDRI\magick.exe" %%f -crop 50%%x100%% %WORKDIR%lr\cropped-%%d.jpg if !errorlevel! neq 0 ( echo エラー;ImageMagickのインストール先を確認してください。 exit /b ) set pagen=000!numero! set pagen=!pagen:~-4,4! rem 横書き文書の場合は、下記の-1を-0にする rename %WORKDIR%lr\cropped-1.jpg !pagen!.jpg set /a numero=numero+1 set pagen=000!numero! set pagen=!pagen:~-4,4! rem 横書き文書の場合は、下記の-0を-1にする rename %WORKDIR%lr\cropped-0.jpg !pagen!.jpg set /a numero=numero+1 ) endlocal rem Scan Tailorで処理 echo 左右分割したJPGファイルをScan Tailorで処理します。 rem Scan Tailor Universalのインストール先にあわせてパスは書き換えること "C:\Program Files\Scan Tailor Universal\scantailor-universal-cli.exe" -v --margins-left=10 --margins-right=10 --margins-top=5 --margins-bottom=5 --layout=1 --deskew=auto --content-detection=normal --white-margins=false --color-mode=color_grayscale --dpi=%DPI% --output-dpi=%DPI% --alignment-vertical=original --alignment-horizontal=original --despeckle=cautious --tiff-compression=none --tiff-force-grayscale --start-filter=1 --end-filter=6 %WORKDIR%lr\ %WORKDIR%out\ if %errorlevel% neq 0 ( echo エラー;Scan Tailorのインストール先を確認してください。 exit /b ) rem 処理ずみのPDFを作成 echo %ARG1% から得られた処理済みのTIFファイルをPDFに変換します。 rem ImageMagickのインストール先にあわせてパスは書き換える "C:\Program Files\ImageMagick-7.1.0-Q16-HDRI\magick.exe" -compress jpeg %WORKDIR%out\*.tif "%ARG1%.pdf" if %errorlevel% neq 0 ( echo エラー;ImageMagickのインストール先を確認してください。 exit /b ) del %WORKDIR%*.* /q del %WORKDIR%lr\*.* /q del %WORKDIR%out\*.* /q shift goto loop rem 終了処理 :end echo 終了処理中です。 If exist %WORKDIR%out\ rmdir %WORKDIR%out\ /q If exist %WORKDIR%lr\ rmdir %WORKDIR%lr\ /q If exist %WORKDIR% rmdir %WORKDIR% /q
(参考)Scan Tailorをつかわず、真ん中で左右分割したPDFを作るだけのバージョン
Scan Tailorを使わず、ImageMagickで強制的に左右分割してから結合するバージョンが↓。抜群に速いですが、Scan Tailorをかけてないのでページのふちが残ります。
@echo off rem 必要なもの1 Scan Tailor Universal (cli.exeが使えれば他のバージョンでも可、物によっては「Visual C++ 2013 および Visual C++ 再頒布可能パッケージ パッケージの更新プログラム」のインストールが必要です。) rem 必要なもの2 Ghostscript(Ghostscript 10.0.0 for Windows (64 bit)で動作確認) rem 必要なもの3 ImageMagick(ImageMagick-7.1.0-52-Q16-HDRI-x64-dll.exeで動作確認) rem DPIを設定(標準は300。600にすると重いです) set DPI=300 rem 作業フォルダ名を準備(複数ファイルについて並列動作を可能にするため) set year=%date:~0,4% set month=%date:~5,2% set day=%date:~8,2% set date2=%year%%month%%day% set time2=%time: =0% set hour=%time2:~0,2% set minute=%time2:~3,2% set second=%time2:~6,2% set time3=%hour%%minute%%second% set WORKDIR=%TEMP%\stauto%date2%-%time3%\ rem 作業フォルダを作成 If not exist %WORKDIR% mkdir %WORKDIR% If not exist %WORKDIR%lr\ mkdir %WORKDIR%lr\ If not exist %WORKDIR%out\ mkdir %WORKDIR%out\ del %WORKDIR%*.* /q del %WORKDIR%lr\*.* /q del %WORKDIR%out\*.* /q rem 全角スペース、コンマ、セミコロンを含むファイル名の処理(エスケープ文字に置換) set ARGS=%* set ARGS=%ARGS:,=$comma$% set ARGS=%ARGS:;=$semicolon$% set ARGS=%ARGS: =$fullwidthsp$% call :main %ARGS% exit /b rem ここからメインの処理 :main :loop if "%~1"=="" goto :end rem 全角スペース、コンマ、セミコロンを含むファイル名の処理(エスケープ文字を元に戻す) set ARG1=%~1 set ARG1=%ARG1:$comma$=,% set ARG1=%ARG1:$semicolon$=;% set ARG1=%ARG1:$fullwidthsp$= % rem ファイルの存在を確認 if exist "%ARG1%" ( echo %ARG1% の処理を開始します。このウィンドウは閉じないでください。 ) else ( echo %ARG1% が存在しないか、ファイル名に処理できない記号等が含まれており、変換できません。何かキーを押してください。 pause shift goto loop ) rem PDFファイルかどうかを確認 if not %~x1==.pdf ( echo %ARG1% はPDFファイルではありません。何かキーを押してください。 pause shift goto loop ) rem 変換開始 echo %ARG1% をJPGファイルに変換します。 rem Ghostscriptでの処理。インストール先にあわせてパスは書き換えること。 "C:\Program Files\gs\gs10.00.0\bin\gswin64c.exe" -q -dNOPAUSE -dBATCH -sDEVICE=jpeg -r%DPI%x%DPI% -sOutputFile=%WORKDIR%page-%%04d.jpg "%ARG1%" if %errorlevel% neq 0 ( echo エラー;Ghostscriptのインストール先を確認してください。 exit /b ) rem 左右分割 echo %ARG1% から得られたJPGファイルを左右分割します。 setlocal ENABLEDELAYEDEXPANSION set numero=0 for %%f in (%WORKDIR%*.jpg) do ( rem ImageMagickのインストール先にあわせてパスは書き換えること。 "C:\Program Files\ImageMagick-7.1.0-Q16-HDRI\magick.exe" %%f -crop 50%%x100%% %WORKDIR%lr\cropped-%%d.jpg if !errorlevel! neq 0 ( echo エラー;ImageMagickのインストール先を確認してください。 exit /b ) set pagen=000!numero! set pagen=!pagen:~-4,4! rem 横書き文書の場合は、下記の-1を-0にする rename %WORKDIR%lr\cropped-1.jpg !pagen!.jpg set /a numero=numero+1 set pagen=000!numero! set pagen=!pagen:~-4,4! rem 横書き文書の場合は、下記の-0を-1にする rename %WORKDIR%lr\cropped-0.jpg !pagen!.jpg set /a numero=numero+1 ) endlocal echo 左右分割したJPGファイルをPDFに変換します。 rem ImageMagickのインストール先にあわせてパスは書き換える "C:\Program Files\ImageMagick-7.1.0-Q16-HDRI\magick.exe" -compress jpeg %WORKDIR%lr\*.jpg "%ARG1%.pdf" if %errorlevel% neq 0 ( echo エラー;ImageMagickのインストール先を確認してください。 exit /b ) del %WORKDIR%*.* /q del %WORKDIR%lr\*.* /q shift goto loop rem 終了処理 :end echo 終了処理中です。 If exist %WORKDIR%out\ rmdir %WORKDIR%out\ /q If exist %WORKDIR%lr\ rmdir %WORKDIR%lr\ /q If exist %WORKDIR% rmdir %WORKDIR% /q