WindowsでDjVuファイルをPDFファイルへ一括変換するプログラム(バッチファイル)

バッチファイルプログラミング
この記事は約5分で読めます。

DjVu(デジャヴ)」とは、画像圧縮形式の一つで、圧縮率が非常に高く、JPEGなどを大きく上回っている。

しかしながら、Adobe社のPDFに比べると普及率はかなり低い。

DjVuファイルの閲覧には、クミナス社の「DjVuブラウザプラグイン(無料)」を使用するのが一般的なようです。

今回は、WindowsでこのDjVuファイルをPDFファイルに変換するプログラム(バッチファイル)を組んでみました。

なお、今回のバージョンは以下です。

  • Windows 10 Home(64bit)
  • DjVuLibre 3.5.27(Windows(x86))

DjVuからPDFへの手動変換

DjVuからPDFへ手動で変換する場合は、以下のような方法が考えられます。

  • DjVuビューア系ソフトの印刷機能で、Adobe AcrobatなどでPDF出力する。
  • DjVuビューア系ソフトのエクスポート機能で、PDFとして抽出・保存する。

ちなみに、クミナス社のDjVuブラウザプラグインにはPDFへのエクスポート機能はありません。

DjVuからPDFへの自動変換

DjVuからPDFへの変換を自動で行う場合は、自分でプログラムを組むことになります。

とは言っても、さすがに変換のところを自作は難しいので、そこはDjVu作者らによって開発されたフリーウェアの「DjVuLibre」に同梱されている「ddjvu」を使用します。

「ddjvu」はコマンドラインのDjVuデコーダーです。

また、DjVuLibreには「djview4」というDjVuビューアも同梱していて、こちらはPDFへのエクスポート機能も含まれています。

DjVuからPDFへの自動変換プログラム

ddjvuの使い方は以下のように、変換元DjVuファイルパスと出力先PDFファイルパスを指定する。

ddjvu -format=pdf -quality=100 -verbose hoge.djvu hoge.pdf

主なオプション(「ddjvu -help」で表示)はこちら。

  • 「-verbose」…処理メッセージを表示
  • 「-format」…出力フォーマット。pdf、tiffなど。
  • 「-quality」…画質(圧縮率)。25~150の間で指定。
  • 「-mode=black」…モノクロ出力

ということで、一括変換したい場合はどこかフォルダを指定してその中にあるDjVuファイルをループさせ、このコマンドを実行していけばいいわけですね。

まずは、DjVuLibreをインストールし、ddjvuを使用できるように、インストールフォルダ(「C:\Program Files (x86)\DjVuLibre」など)を環境変数「PATH」へ追記する。

そして、以下のようなプログラム(バッチファイル)を作成した。

@echo off

rem 実行方法
rem C:\djvu2pdf.bat "C:\DjVu" "C:\PDF" 100

setlocal enabledelayedexpansion

rem 引数チェック
if "%~3" == "" (
  echo パラメータが3つではありませんので、処理を中断します。
  exit /b 1
) else if not "%~4" == "" (
  echo パラメータが3つではありませんので、処理を中断します。
  exit /b 1
)

rem 引数取得
set djvuPath=%~1
set pdfPath=%~2
set quality=%~3

rem 引数整数チェック
set /a wkNum=%quality%+0

if not %quality% == %wkNum% (
  echo 第3パラメータ(画質(圧縮率))が整数ではありませんので、処理を中断します。
  exit /b 1
) else if %quality% gtr 150 (
  echo 第3パラメータ(画質(圧縮率))が25~150の範囲ではありませんので、処理を中断します。
  exit /b 1
) else if %quality% lss 25 (
  echo 第3パラメータ(画質(圧縮率))が25~150の範囲ではありませんので、処理を中断します。
  exit /b 1
)

echo 第1パラメータ(DjVu格納元フォルダパス):%djvuPath%
echo 第2パラメータ(PDF格納先フォルダパス):%pdfPath%
echo 第3パラメータ(画質(圧縮率)):%quality%

rem ファイルループ
rem dirオプション(/d:ファイル列で並び替え、/b:ファイル名のみ表示、/s:指定ディレクトリおよびサブディレクトリ)
for /f %%i in ('dir /d /b /s %djvuPath%\*.djvu') do (
  set djvuFilePath=%%~fi
  set filePath=%%~ni
  set cmd="ddjvu -format=pdf -quality=!quality! -verbose !djvuFilePath! !pdfPath!\!filePath!.pdf"

  rem デバッグ用
  rem echo !cmd!
  "!cmd!"
)

rem 処理終了
echo 処理が正常終了しました。
exit /b 0

rem コマンドプロンプトを閉じない
cmd

これをコマンドラインから以下のように実行すれば、指定したフォルダ内のDjVuファイルを一括でPDFファイルへと変換する。

C:\djvu2pdf.bat "C:\DjVu" "C:\PDF" 100

ファイル容量とかにもよりますが、変換には結構時間がかかりました。

そして、画質(圧縮率)の指定ですが、DjVuファイルは圧縮率がかなり高いので、そのまま100%でPDFへと変換するとかなりファイル容量が大きくなります。

元ファイルと同じぐらいの容量にするならば、70%ぐらいで指定するのが良いかもしれません。

以上。

参考サイト

How do I convert a DjVu document to PDF in Linux using only command line tools? – Super User

プログラミング
えふめん

大阪在住、30代。
業務系SE・社内SEの仕事を通じて学んだこと、PCトラブルで困って調べたこと、手作業を効率化して改善したこと、WordPressのブログ運営などの記事を書いています。

えふめんをフォローする
\よかったらシェアしてね/
この記事が気に入ったら
いいね!しよう
最新情報をお届けします。
俺の開発研究所

コメント

タイトルとURLをコピーしました