.DS_Store

漫画の感想とかをひたすら書いていくブログです。

複数の画像を一つのpdfにする(名前機能付き)

ご無沙汰しております。忙しいんです……

Automatorで画像(GIF,JPG,etc…)を一つのPDFに – b4logを読んで、自分でも作ってみた。
僕のMacではpdf化したい画像ごとに既にフォルダ分けがされていているものが多く、フォルダ毎にpdf化して名前をpdfに引継ぎたい。しかしAutomatorでは、pdfに固定の名前しかつけることが出来ないようだ。そこで適当な名前を付けて、その後にシェルスクリプトで名前を変更するという手続きを踏むことにした。ついでにAutomatorをいちいち起動するのも怠かったので、「ワークフロー」ではなく「サービス」にして、Finderの右クリックから選べるようにした。


Automatorを起動し、「サービス」のテンプレートを選択。
次の選択項目を受け取ります:「フォルダ」、検索対象:「Finder」にする。
クリップボードにコピー」→「フォルダの内容を取得」→「Finder項目にフィルタを適用」→「イメージから新規PDFを作成(出力ファイル名:IMG2PDF.pdf などにしておく)」→「クリップボードの内容を取得」→「シェルスクリプトを実行」の順に並べる。
シェルスクリプトの「入力の引渡し」は「引数として」にしておくこと。

シェルスクリプトの中身はこんな感じ。

cd ~/Desktop
F0=$@
F1=${F0%:}
F2=${F1##*:}
mv IMG2PDF.pdf "$F2.pdf"

一応解説を。
Automatorでフォルダ名をクリップボードにコピーすると、

Macintosh HD:Users:username:Documents:Images:

のようになる。
そこで、単純にpdfファイルにフォルダ名を付けたい場合は、前の「~~:」の部分と、最後の「:」を取らないといけない。そこでシェルの変数機能を活用し、「$@」で引数としてフォルダ名を受け取り、「%:」で後ろのコロンを取り、「##*:」で前方の名前を削除する。名前を""で囲んであるのは、フォルダ名にスペースが混じるとエラーを返されてしまうからだ。
参考:bashで始めるシェルスクリプト基礎の基礎 (1/2):Windowsユーザーに教えるLinuxの常識(8) - @IT

出力場所を変えた場合は適宜cdのターゲットなどを変更しておこう。
僕のAutomatorは何故か保存した時に出力場所がDesktopに変更されてしまう不具合? が存在したので、シェルでリネームする時に置きたい場所のパスを追加して移動も行なうことにしておいた。
これに適当な名前をつけて(i.e.「画像をpdf化」)保存すれば、Finderで右クリックからこのメニューが選べる。なんて高機能なファイラーだ! 流石Finder(


(2013/7/20追記:Lionで動かなくなっていたので改修しました。こちら。)