Hatena::ブログ(Diary)

.DS_Store


本当にあまりに見にくかったのでデザイン再変更しました。メンヘラか。
※漫画や本の表紙画像をクリックするとアマゾンの詳細ページに飛びます。踏みますとアフィ的なものが発生しますのでそういうのが嫌な方はご注意ください。

2011-10-28

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

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

Automatorで画像(GIF,JPG,etc…)を一つのPDFに | b4logを読んで、自分でも作ってみた。

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

f:id:skyhorse:20111028112648p:image


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ファイルにフォルダ名を付けたい場合は、前の「~~:」の部分と、最後の「:」を取らないといけない。そこでシェル変数機能を活用し、「$@」で引数としてフォルダ名を受け取り、「%:」で後ろのコロンを取り、「##*:」で前方の名前を削除する。名前を""で囲んであるのは、フォルダ名にスペースが混じるとエラーを返されてしまうからだ。

参考: Windowsユーザーに教えるLinuxの常識(8):bashで始めるシェルスクリプト基礎の基礎 (1/2) - @IT

出力場所を変えた場合は適宜cdのターゲットなどを変更しておこう。

僕のAutomatorは何故か保存した時に出力場所がDesktopに変更されてしまう不具合? が存在したので、シェルリネームする時に置きたい場所のパスを追加して移動も行なうことにしておいた。

これに適当な名前をつけて(i.e.「画像をpdf化」)保存すれば、Finderで右クリックからこのメニューが選べる。なんて高機能なファイラーだ! 流石Finder


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