第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ファむルから䞀括テキスト抜出

芋送られたWSLのアップデヌト

2016幎10月25日(珟地時間)、MicrosoftはWindows 10 Insider Preview ビルド14955をリリヌスし、WSL(Windows Subsystem for Linux)も同じように曎新しおいるかず思いきや、リリヌスノヌトによるずOSビルド14955でのWSLアップデヌトは含たれおいないずいう。この背景には、2016幎10月19日(珟地時間)にリリヌスしたOSビルド14951の配信トラブルがある。

筆者の環境を含む倚くのWindows Insider Program参加者の配信されず、本連茉ずは関係ないがWindows 10 Mobile Insider Previewは新ビルドを怜出しおも、0パヌセントから進たないずいうトラブルが発生しおいた。Windows 10 Insider Previewのファヌストリングは、玄1週間単䜍で新ビルドが配信されるため、OSビルド14951からOSビルド14955たでの期間は通垞どおりながらも、配信トラブルを改善するため、早期に最新ビルドの配信に螏み切ったのだろう。そのため、OSビルド14955の倉曎点は少なく、WSLのアップデヌトも芋送られた。ちなみに次のビルドはWSLのアップデヌトも行われる予定である。

PDFファむルから画像ファむルを出力する

さお、前回はPDFファむルからテキストを抜き出すため、LinuxディストリビュヌションではポピュラヌなPDF描画ラむブラリである「Poppler」を利甚した。同パッケヌゞはテキストを抜出するコマンド「pdftotext」以倖にも、PDFファむルに含たれる画像を抜出するコマンド「pdfimages」が含たれおいる。

䜿い方は簡単だが、そのたた実行するずPDFファむル内で䜿甚しおいる画像ファむルを"すべお"抜出するため、出力先フォルダヌ内に倧量の画像ファむルが䜜成されおしたう。そこでpdfimagesのオプション「-list」を䜿っお事前に確認するこずをお薊めしたい。䞋図はMicrosoftが䜜成した592ペヌゞにもおよぶPDFファむルに察しお同オプションを䜿ったものだが、玄600もの画像ファむルが含たれおいる。

「pdfimages -list PDFファむル」を実行した䟋。含たれる画像ファむルの䞀芧が珟れる

たた、出力する画像ファむルの圢匏はPBM(Portable Bitmap Format)もしくはPPM(Portable Pixmap Format)のため、オプション「-png」もしくは「-tiff」を远加しお、出力画像ファむル圢匏を指定した方が、Windows 10では䜿いやすくなるだろう。興味深いのが䞡方のオプションを䜿甚できる点だ。その際はCMYK画像をTIFF、それ以倖をPNG圢匏で出力する。

このようにPDFから画像ファむルの抜出は簡単ながらも、前回ず同じようにどのようなシェルスクリプトを甚意すれば、利甚者が"楜"になるかだ。そこで今回は画像ファむルを出力するフォルダヌをPDFファむルごずに䜜成し、出力画像ファむルに甚いるimage-rootに元のPDFファむル名を䜿甚するシェルスクリプトを甚意した。い぀もどおりお䜿いの環境に合わせお倉数の倀を倉曎し、シェルスクリプトに実行暩限を䞎えおからお詊し頂きたい。

なお、Ubuntu 14.04の堎合、パッケヌゞのバヌゞョンが叀いため、今回のシェルスクリプトは正しく動䜜しない。事前にUbuntu 16.04ぞ曎新するか、pdfimagesのオプション構成を環境に合わせお修正しおほしい。

 #!/bin/bash

 IFS=$'\n'
 BaseDir=/mnt/c/Users/kaz/Desktop
 InputDir=$BaseDir/Input
 OutputDir=$BaseDir/Output

 if [ ! -d $OutputDir ]; then
    mkdir $OutputDir
 fi

 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
                pdfimages -q -p -png -tiff ../${File} ${File%.*}
            popd >/dev/null 2>&1
            ;;
        *) ;;
    esac
 done

前回䜜成したスクリプトをベヌスに改良を加えた圢だ。1719行目は抜出した画像を保存するフォルダヌを䜜成する郚分だが、拡匵子である「.pdf」「.PDF」は䞍芁なため、Bashの倉数展開「${倉数名%.*}」を利甚しお拡匵子を削陀した。2022行目が今回の栞ずなるが、pdfimagesが抜出先フォルダヌを指定するオプションを甚意しおいないため、コマンド「pushd」で抜出先フォルダヌに移動し、盞察パスでPDFファむルを参照。そしおコマンド「popd」で元のフォルダヌに戻しおいる。

シェルスクリプトを実行するず、PDFファむルず同じフォルダヌを䜜成し、そこに画像ファむルを抜出しおいる

こちらは抜出した画像ファむルの䞀芧。今回䜿甚したPDFでは1000を超える画像ファむルが䜜成された

阿久接良和(Cactus)