[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:475) InDesignへの画像貼り込みスクリプト(プロトタイプ)



最終的にはASSでインターフェイスを作りたいんですが、まずプロトタイプとしてドロップレットを書いてみました。
まだみぎ綴じにしか対応してませんし、こまごまとした所は不具合があるかもしれません。
あ、もちろんMac OS X用です。<たぶんsortルーチン以外はMac OS 9でも動くかも。

興味のあるかたは、試してみてください。

---
on open of theFiles
	my my_control(theFiles)
end open

on run
	tell application "Finder"
		set my_folder to {} & (choose folder with prompt "貼り込み画像が入っているフォルダを選択してください")
	end tell
	my my_control(my_folder)
end run

----------------------------------------------●コントロールルーチン
to my_control(my_files)
	set {yoko, tate} to my my_dialog()
	my ver()
	set my_files to my file_kind(my_files)
	if my_files is {} then my my_error("貼り込みファイルとして有効なファイルは見つかりませんでした")
	repeat with i in my_files
		set contents of i to i as text
	end repeat
	set my_files to my_sort(my_files)
	my do_it(yoko, tate, my_files)
	
	
end my_control

----------------------------------------------●ドキュメントサイズの入力
to my_dialog()
	tell application "Finder"
		with timeout of 3600 seconds
			set yoko to text returned of (display dialog "ドキュメントの左右寸法を入力してください。" default answer "210" buttons {"キャンセル", "OK"} default button 2 with icon 1)
			set tate to text returned of (display dialog "ドキュメントの天地寸法を入力してください。" default answer "297" buttons {"キャンセル", "OK"} default button 2 with icon 1)
		end timeout
		try
			set yoko to yoko as number
			set tate to tate as number
		on error errMsg number errNum
			my my_error("入力された値が不正でした。半角数字で入力してください")
		end try
	end tell
	return {yoko, tate}
end my_dialog

--------------------------------------------------------●InDesignバージョン確認ルーチン
to ver()
	tell application "InDesign 2.0.2J"
		if version is not 2.02 then
			my my_error("このプログラムはInDesign2.0.2J以外では動作しません")
		end if
	end tell
end ver


----------------------------------------------●必要なファイルだけをフィルタして返します
to file_kind(theFiles)
	set my_files to {}
	ignoring case
		tell application "Finder"
			repeat with i in theFiles
				--display dialog (file type of i) as Unicode text
				set my_path to i as Unicode text
				if my_path ends with ":" then
					display dialog "フォルダ「" & (name of i) & "」の中の全ファイルを処理します" buttons {"キャンセル", "OK"} default button 2 with icon 0
					set my_files to my_files & my file_kind(every file in folder i)
				else if ("EPSF, PDF , TIFF, 8BPS" contains file type of i) or ツ
					(my_path ends with ".eps") or ツ
					(my_path ends with ".pdf") or ツ
					(my_path ends with ".ai") or ツ
					(my_path ends with ".psd") or ツ
					(my_path ends with ".tif") or ツ
					(my_path ends with ".tiff") then
					set end of my_files to contents of i
				else
					display dialog "ファイル「" & (name of i) & "」は貼り込みファイルとして不適当です" buttons {"キャンセル", "OK"} default button 2 with icon 0
				end if
			end repeat
		end tell
	end ignoring
	return my_files
end file_kind

----------------------------------------------●ドキュメントの生成、ページサイズの変更、ページの生成、グラフィックフレームの生成、画像の貼り付け
to do_it(yoko, tate, my_files)
	tell application "InDesign 2.0.2J"
		activate
		set my_doc to make document --ドキュメントの生成
		tell my_doc
			--ドキュメント寸法(単位付き数字でもOKです)
			tell document preferences
				set page width to yoko
				set page height to tate
			end tell
			--1ページに1ファイルを割り付ける
			repeat with i from 1 to (length of my_files)
				if i is not 1 then make new page at end
				tell page i
					
					if my my_odd(i) then --奇数ページなら
						set my_Rectangle to make rectangle with properties {geometric bounds:{-3, 0, (tate + 3), (yoko + 3)}}
					else
						set my_Rectangle to make rectangle with properties {geometric bounds:{-3, -3, (tate + 3), yoko}}
					end if
					tell my_Rectangle
						place (contents of item i of my_files)
						fit my_Rectangle given center content
					end tell
					
				end tell
			end repeat
			
		end tell
	end tell
end do_it

----------------------------------------------★以下はこまごまとした下請け
----------------------------------------------○リストをソートします
to my_sort(theList)
	set tmp_str to my as_join((ASCII character 10), theList)
	set tmp_str to do shell script "echo " & quoted form of tmp_str & "| sort "
	return my as_split(return, tmp_str)
end my_sort

----------------------------------------------○リストをデリミタで分割
to as_split(thedelimit, theText)
	set oldDelim to AppleScript's text item delimiters
	set AppleScript's text item delimiters to thedelimit
	set tmpList to every text item of theText
	set AppleScript's text item delimiters to oldDelim
	return tmpList
end as_split

----------------------------------------------○リストをデリミタで結合
to as_join(thedelimit, theList)
	set oldDelim to AppleScript's text item delimiters
	set AppleScript's text item delimiters to thedelimit
	set tmpstr to theList as text
	set AppleScript's text item delimiters to oldDelim
	return tmpstr
end as_join

----------------------------------------------○渡された数字が奇数ならばtrue,偶数ならばfalseを返します。
to my_odd(num)
	if num mod 2 = 0 then
		return false
	else
		return true
	end if
end my_odd

----------------------------------------------○エラーダイアログ-->スクリプト停止
to my_error(err_mess)
	tell application "Finder"
		beep 2
		display dialog err_mess buttons {"スクリプト停止"} default button 1 with icon 0
		error number -128
	end tell
end my_error