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」の記述を追加すればよい。その際は末尾に記述した方がシェルスクリプトの動作を妨げることがないので安全だ。
なお、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」が指定可能だ。
17行目のpdftocairoの実行も基本的には前回と同じ。メッセージの出力を抑止するオプション「-q」を指定したに過ぎない。前述のとおり、PDFファイルを画像ファイルに変換する必要性は場面に応じて異なるので、今回紹介したシェルスクリプトをベースに自分の仕事向けにカスタマイズしてほしい。
阿久津良和(Cactus)