【連載】

Windows 10で始めるBash

19 PDFファイルを画像ファイル化する

19/37

第1回 フォルダー内のJPEGファイルを連番でリネームする

第2回 他の画像形式をJPEG形式に変更する

第3回 ピクセルサイズに応じて画像ファイルをリサイズする

第4回 実行先のフォルダーを引数で指定する

第5回 case文でスクリプト内容を整理する

第6回Webページの情報をシェルスクリプトで取得する 第7回取得結果をCSVファイルやテキストファイルに出力する 第8回インターネットショートカットファイルを作成する 第9回散らかったデスクトップを片付ける 第10回時間軸でデスクトップを片付ける
第11回BashからExcelブックにアクセスする

第12回フォルダーの中のエクセル請求書ファイルを合計する

第13回フォルダの中のファイルを一括でPDFにするには

第14回整理整頓!空のフォルダを一括でデスクトップに移送する

第15回ファイル名ではなく内容判断で重複ファイルを削除するには?

第16回文章をMarkdown記法で整える

第17回複数PDFファイルから一括テキスト抽出

第18回PDFファイルから一括で大量の画像を抽出

Windows 10 Anniversary UpdateからサポートしたWindows Subsystem for Linux(WSL)。その結果としてWindows 10上でもBashを始めとするLinuxコマンドが利用可能になった。本連載ではWSLに関する情報や、Bashから実行するシェルスクリプトを紹介する。

環境変数PATHの設定を変更する

ようやく筆者の環境にもWindows 10 Insider Preview ビルド14955が配信されたため、Bash上からWin32コマンドを実行する動作を検証してみたが、確かにMicrosoftの説明どおりだ。Bashから各種コマンドが実行可能になり、BUW(Bash on Ubuntu on Windows)独自のシェルスクリプトを記述できそうである。

BUW利用者であれば、常にBash上からWin32コマンドを実行可能にするため、Bashの設定用シェルスクリプトである.bashrcで環境変数PATHの設定を変更しておくべきだ。基本的には.bashrcに「export PATH=$PATH:/mnt/c/Windows/System32」の記述を追加すればよい。その際は末尾に記述した方がシェルスクリプトの動作を妨げることがないので安全だ。

まずは環境変数PATHの現状を確認。「set | grep ^PATH」と実行すれば、環境変数PATHの内容が示される。この状態ではWin32コマンドは実行できない

「vim ~/.bashrc」などお好みテキストエディタで.bashrcを開き、末尾などに「export PATH=$PATH:/mnt/c/Windows/System32」を追加する

なお、Win32コマンドの実行はコマンドプロンプトと異なり、拡張子まで指定しなければならない。コマンドプロンプトと同じ感覚で「findstr」と実行してもエラーになり、「findstr.exe」と入力することで正しく入力できる。また、Bashの補完機能も有効になるため、[Tab]キーを押せばWin32コマンドの補完も可能だ。

.bashrcの内容を再読み込みするため、「source ~/.bashrc」を実行。先ほどの確認方法を使えば、環境変数PATHの末尾に記述した内容が加わったことを確認できる。この状態になればWin32コマンドは実行可能だ

PDFファイルを画像ファイル化する

さて、前回前々回とPDFファイルからテキストや画像を抽出するシェルスクリプトを紹介してきたが、PDF描画ライブラリ「Poppler」のパッケージには、「pdftocairo」というコマンドが用意されている。

読者諸氏としては、"cairoではなくgraphicでは?"と思われるかもしれないが、pdftocairoは2DライブラリであるCairo Graphics Libraryをバックエンドで利用しているため、この名称が用いられたようだ。

pdftocairoはPDFファイルをPNG(Portable Network Graphics)やJPEG(JPEG Interchange Format)、TIFF(Tagged Image File Format)、PostScript、EPS(Encapsulated PostScript)、SVG(Scalable Vector Graphics)といった画像形式に変換できる。さらにPDFファイルの出力やWindowsのプリンターにも対応しているが、今回はこのあたりの機能は不要だろう。

オプション内容を確認すると、変換した画像ファイルのPPI(Pixel Per Inch)を指定する「-r」など数多く存在するが、すべてを書き連ねると本稿がそれだけで終わってしまうため、「man pdftocairo」で内容を確認してほしい。

PDFファイルの活用方法はビジネスの種類によって異なるが、筆者の場合は発表会で使用されたスライドをPDFファイルで頂き、記事に用いることが多い。以前はAdobe Acrobatから出力していたが、pdftocairoを使えば面倒なメニュー操作も必要なく、コマンド一発で実行できる。いつもと同じくお使いの環境に合わせて変数の値を変更し、シェルスクリプトに実行権限を与えてからお試し頂きたい。

 #!/bin/bash

 IFS=$'\n'
 BaseDir=/mnt/c/Users/kaz/Desktop
 InputDir=$BaseDir/Input
 Format=-jpeg

 cd $InputDir
 for File in *; do
    case ${File##*.} in
        pdf|PDF )
            echo "Extracting PDF:" ${File}
            if [ ! -d ${File%.*} ]; then
                mkdir ${File%.*}
            fi
            pushd ${File%.*} >/dev/null 2>&1
                pdftocairo $Format -q ../${File} ${File%.*}
            popd >/dev/null 2>&1
            ;;
        *) ;;
    esac
 done

今回も前回紹介したシェルスクリプトを数行書き換えたに過ぎない。6行目に変数Formatを新たに追加し、17行目の実行内容を書き換えている。まず変数Formatは、そのままpdftocairoのオプションを記述している。PNG形式ならば「-png」、TIFF形式なら「-tiff」に変更すればよい。なお、TIFFの場合は圧縮形式をオプション「-tiffcompression」で指定できる。無圧縮の場合は「-tiffcompression none」、LZW圧縮の場合は「-tiffcompression lzw」と指定すればよい。この他にも「packbits」「jpeg」「deflate」が指定可能だ。

シェルスクリプトを実行すると、PDFファイルと同じフォルダーを作成し、そこに変換した画像ファイルを保存している

17行目のpdftocairoの実行も基本的には前回と同じ。メッセージの出力を抑止するオプション「-q」を指定したに過ぎない。前述のとおり、PDFファイルを画像ファイルに変換する必要性は場面に応じて異なるので、今回紹介したシェルスクリプトをベースに自分の仕事向けにカスタマイズしてほしい。

こちらは変換した画像ファイルの一覧。PDFファイルのページ数に応じて所要時間などは変化する

阿久津良和(Cactus)

<お知らせ>
ITソリューション検討Information

マイナビニュースのIT Search+では、ITソリューションの検討に役立つ情報を掲載しています。
ここでは、IT Search+の人気記事ベスト3をご紹介。ぜひ、ビジネスにお役立てください。

19/37

インデックス

連載目次
第37回 HTMLコードの出力シェルスクリプトをRowspan属性に対応させる
第36回 HTMLのTableタグ出力シェルスクリプトをColspanに対応させる
第35回 BashでHTMLのTableタグを楽に
第34回 ファイル名の大/小文字一括変更シェルスクリプトをオプションで制御する
第33回 規則に応じたファイル名の大/小文字化
第32回 拡張子を一括で小文字に統一するスクリプト
第31回 Googleカレンダーから情報を抜き出す
第30回 ドライブを占有するフォルダー容量をExcelで可視化する
第29回 ドライブを占有するフォルダー容量を「R」で可視化する
第28回 ドライブを占有するフォルダー容量をSparkで可視化する
第27回 ドライブを占有する容量をフォルダーごとに簡単確認
第26回 オプションを加え汎用性を高めたレジストリーキー比較スクリプト
第25回 Reg.exeの出力結果をカラフルにして見やすくする
第24回 Reg.exeの出力結果を比較する
第23回 getoptsを活用してイベントソース可視化を大幅に拡張する
第22回 BashからPowerShellを利用する
第21回 Windowsのイベントソースを可視化してオプションで表示を分ける
第20回 Windowsのイベントログを「Cut」で切り出し可視化する
第19回 PDFファイルを画像ファイル化する
第18回 PDFファイルから一括で大量の画像を抽出
第17回 複数PDFファイルから一括テキスト抽出
第16回 文章をMarkdown記法で整える
第15回 ファイル名ではなく内容判断で重複ファイルを削除するには?
第14回 整理整頓!空のフォルダを一括でデスクトップに移送する
第13回 フォルダの中のファイルを一括でPDFにするには
第12回 フォルダーの中のエクセル請求書ファイルを合計する
第11回 BashからExcelブックにアクセスする
第10回 時間軸でデスクトップを片付ける
第9回 散らかったデスクトップを片付ける
第8回 インターネットショートカットファイルを作成する
第7回 取得結果をCSVファイルやテキストファイルに出力する
第6回 Webページの情報をシェルスクリプトで取得する
第5回 case文でスクリプト内容を整理する
第4回 実行先のフォルダーを引数で指定する
第3回 ピクセルサイズに応じて画像ファイルをリサイズする
第2回 他の画像形式をJPEG形式に変更する
第1回 フォルダー内のJPEGファイルを連番でリネームする

もっと見る



人気記事

一覧

イチオシ記事

新着記事