ごんれのラボ

iOS、Android、Adobe系ソフトの自動化スクリプトのことを書き連ねています。

Adobeアプリ(DTP)のファイルの判定をするAppleScript

制作会社で働いているといろんな環境からのデータを受け取ることになります。

うちの会社はMacを主に使っているんだけど、お客様はWindowsを使われていることが多いです。

出版社の編集の方とか、ね。

そんなわけで日常的に「拡張子はついてるけどアイコンなくてなんだかわからないEPSくん、あなたはIllustratorなの?Photoshopなの?InDesignから書き出したの?…まさかQuarkから生まれた子?」とか。

「うわー、拡張子なくてアイコンなくて、こいつなんだよ…」な白紙アイコン、もしくはUnixファイルと判定されてる謎ファイルと遭遇するわけです。

ご丁寧に「印刷会社から送られてきたZIPをWindowsで解凍してCDに焼いてくれる」お客様も後を絶たず。

まぁ、中身を確認したい気持ちも分かるんですけど、一緒にZIPも入れてくださいよー。

などと、愚痴っていてもしかたないので、適当にファイルを判定するAppleScriptを書いてみた。

といっても、Rubyで処理したものをAppleScriptで受け取り、ラベルをつけるだけという本当に適当すぎる代物。

もちろん専用のユーティリティもあるんだけど、おおざっぱに判定したいときがあるんですよ、ええ。

<使い方>

●ダウンロードしたZIPファイルを解凍してお好きなところへおどうぞ。

 ただしRubyは必ずAppleScriptと同階層に置いておくこと。

●判定したいファイルをAppleScriptにドラッグ&ドロップすると、ラベルをつけてくれます。

 ただしInDesign、Illustrator(一応OS9環境で作られたものも判定可)、Photoshop(一応OS9環境で作られたものも判定可)、Quark・QuarkEPS(一応OS9環境で作られたものも判定可)以外はスルーします。

<仕様>

●CS3(CS2も?)はXMPをmini_exiftoolで解析してる(CreatorToolやCreator、Softwareを抽出)

●OS9のファイルはASCIIで読み込んで無理矢理正規表現で抽出。

<注意点>

●RubyGemsでmini_exiftoolをインストールしてないとエラーになります。

 入れ方とかは[ruby]mini_exiftool導入してみたを参照のこと。

●処理は遅いよ。原稿整理の片手間に使うことをおすすめします。

で、ですね。

AppleScriptからdo shell scriptさせるわけですが、10.4環境だと標準としてインストールされているのがRubyが1.8.2でして、いろいろ不都合があったのですよ。

この件ではなく、別件で。

なので、自分のマシンにMacPortsをインストールして、Rubyを1.8.7にしたんですわ。

うん、AppleScriptでエラーになるね。

ターミナルで処理させるとOK。

どっかでこんな事例を見たなー、とこうちゃんググりました。

ヒットしました。

私のブログがw

これね。

[ruby]mini_exiftool導入してみた

うんうん。

AppleScriptからdo shell scriptすると/usr/bin/rubyをコールするのかぁ。

ってことはそっちのRubyGemsにインストールしないとダメかー。

だよね、さっきインストールしたのはMacPortsの管理下のRubyGemsですよね。

ですよねー。

はぁ。

困ったね。

しかたないから休憩時間をすべて費やしてひたすらググる、ググる。

海外のフォーラム的なところがヒットしても一生懸命読む、読む。

そしたら良さげな回答が載っていたよ!

すげーよ、海外。

さすが英語だよ(ぇ

do shell script "source ~/.bash_profile

ふむ、.bash_profileを読み込ませることによって、環境変数とかが反映されるのか。

試しに

do shell script "source ~/.bash_profile; ruby -v

ターミナルと同じ結果になったよ!

これで心置きなくいろいろ環境をいじれるね(ぇ

そんなわけでAppleScriptのコードは下記。

on open theFiles

set my_script_name to "check_adobe.rb" as Unicode text --スクリプトファイル名

tell application "Finder"

activate

--ruby versionのチェック

set ruby_version to do shell script "source ~/.bash_profile;ruby -e 'print \"ERROR\" if RUBY_VERSION <= \"1.8.1\"'"

if ruby_version is "ERROR" then

display dialog "このスクリプトはRubyバージョンが1.8.2以上で動作します"

error number -128

end if

set my_script_folder to parent of (path to me) as Unicode text

set my_script to my_script_folder & my_script_name

set my_script to (quoted form of POSIX path of my_script)

repeat with i in theFiles

set input_file to (quoted form of POSIX path of contents of i) as Unicode text

try

set checkResult to do shell script "source ~/.bash_profile;ruby " & my_script & " " & input_file

my labelFill(i, checkResult)

end try

end repeat

end tell

activate

display dialog "終了"

end open

to labelFill(i, checkResult)

tell application "Finder"

if checkResult is "Illustrator" then

set label index of i to 1 --ラベルを付ける

else if checkResult is "Photoshop" then

set label index of i to 2 --ラベルを付ける

else if checkResult is "XPRa" then

set label index of i to 3 --ラベルを付ける

else if checkResult is "QuarkEPS" then

set label index of i to 4 --ラベルを付ける

else if checkResult is "InDesign" then

set label index of i to 5 --ラベルを付ける

end if

end tell

end labelFill

Ruby。

#! ruby -Ku

require 'kconv'

require 'rubygems'

require 'mini_exiftool'

def os10ver(fileObj)

obj = MiniExiftool.new fileObj

key1 = obj['CreatorTool']#普通はここでわかる

key2 = obj['Software']#PSDはアプリケーション名で判断

key3 = obj['Creator']#古いIllustratorはこれで判断

if /Illustrator/ =~ key1 || /Illustrator/ =~ key3 then

str = "Illustrator"

puts str

#break

elsif /Photoshop/ =~ key1 || /Photoshop/ =~ key2

str = "Photoshop"

puts str

elsif /InDesign/ =~ key1

str = "InDesign"

puts str

else

os9ver(ARGF)

end

end

def os9ver(fileObj)

lineALL = fileObj.gets

line_UTF8 = lineALL.kconv(Kconv::UTF8, Kconv::ASCII)

lineArray = line_UTF8.split("\r")

lineArray.each do | line |

if /%%Creator/ =~ line

if /Illustrator/ =~ line

str = "Illustrator"

puts str

break

elsif /Photoshop/ =~ line

str = "Photoshop"

puts str

break

elsif /QuarkXPress/ =~ line

str = "QuarkEPS"

puts str

break

end

elsif /XPRa/ =~ line

str = "XPRa"

puts str

break

end

end

end

os10ver(ARGV[0])

いやー、スクリプトって楽しいね!

ダウンロードはこちら。

Adobeファイルの判定