いろんなところでPDFファイルが配布されていますが、PDFファイルってそのままだと扱いにくいことが多いですよね。たとえばファイル内のテキストを検索したいだけなのに、アプリで開かないと検索できません。
配布されているPDFファイルの多くは、画像などは含まれていなくてテキストだけで構成されていることも多いですから、テキストファイル化してしまえば容易に検索できるようになります。
まずは Mac に標準で入っている Automator というアプリを起動します。すると、ファイル選択のダイアログが表示されます。タイトルバーには Automator と表示されているのがわかります。
ここで、ダイアログの左下にある「新規書類」をクリックすると、Automator の画面が表示されます。
書類の種類は「ワークフロー」を選択した状態で右下の「選択」ボタンをクリックします。ダイアログが消え、左のバーで「ライブラリ」が選択された状態になります。
「ライブラリ」の下にある「PDF」をクリックし、右側に表示される項目の中から「Extract PDF Text」を選択して画面右側の開いたスペースにドラッグします。
すると、次のように画面右側に「PDFテキストを取り出す」が表示されます。
画面右上の赤い×をクリックすると保存のダイアログが表示されるので、フォーマットで「アプリケーション」を選択し、適当な名前をつけて「保存」をクリックします。
今回は保存先に「デスクトップ」を指定していますので、デスクトップの右上に指定したファイル名で Automator のアイコンが追加されました。
その上にある head_first_c.pdf を、pdf2text.app にドラッグすると、テキストファイルが生成されます。
生成されたテキストファイルをテキストエディタで開いてみます。
ばっちり、テキストを抽出できました。
SublimeTextではきちんと表示されていますが、vi で見ると制御コードが残っているようです。
制御コードが入っているため、grep コマンドがバイナリファイルと認識しているようで、うまく検索してくれません。-a オプションをつけてテキストファイルとして処理させてみましょう。
$ grep -a 'Erich Gamma' head_first_c.txt
やっぱり見つけてくれません。
文字コードを調べてみると、UTF-16 になっているようです。UTF-8 に変換して試してみたら、見つけてくれるようになりました。
$ nkf -g head_first_c.txt UTF-16 $ nkf -w head_first_c.txt > head_first_c.utf8.txt $ grep -a 'Erich Gamma' head_first_c.utf8.txt Praise for other Head First books “I received the book yesterday and started tois fun, but they cover a lot of ground, and they are right to the point. I’m re— Erich Gamma, IBM Distinguished Engineer and coauthor of Design Patterns “One“What used to be a long trial-and-error learning process has now been reduced n“Elegant design is at the core of every chapter here, each concept conveyed wit“I ♥ Head First HTML with CSS & XHTML—it teaches you everything you need to l“Usually when reading through a book or article on design patterns, I’d have to occasionally stick myself in the eye with something just to make sure I was paying attention. Not with this book. Odd as it may sound, this book makes learnin“While other books on design patterns are saying ‘Bueller...Bueller...Bueller.www.it-ebooks.info this book. In fact, I kissed this book in front of my wife.”
いちいち手作業でnkfコマンドを実行するのはめんどいので、UTF-8に変換する処理も Automator に追加しましょう。
Automator の左側の「ユーティリティ」を選択し、「シェルスクリプトを実行」を選択して「PDFテキストを取り出す」の下にドラッグ&ドロップします。
右側の入力の引き渡し方法は「引数として」を選択します。そして、テキストボックスの中に、以下のスクリプトを記述します。
for f in "$@" do /opt/local/bin/nkf -w $f > ${f%.*}.utf8.txt rm $f done
元の UTF-16 のファイルは不要なので変換後に削除するようにしました。
これで、PDF を UTF-8 のテキストとして一発で出力できるようになりました。