[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