いつもお世話になっております
Illustratorドキュメント上のテキストを、書体やサイズなどの設定を引き継いで、InDesignのドキュメントに移植する作業をしています。
AppleScriptで狙い通りのものを作ることができたのですが、「文字揃え」だけがスクリプトエディタ上で実行すると成功するのに、
InDesignのスクリプトパネル・メニューバー・アプリケーションに保存しての実行、これらでは反映されませんでした。
スクリプトエディタから実行することでまったく問題はない(さらに処理も早い)のですが、ちょっと気になるので投稿させていただきました。
[15723] やっすん (2013/06/19 Wed 14:33)
以下、スクリプトです
tell application "Adobe Illustrator"
tell document 1
set getTextFrame to text frame 1
set getText to contents of text of getTextFrame as text ---テキスト抜き出し
set getFontFam to family of text font of character 1 of getTextFrame as text ---書体名
set getFontStyle to style of text font of character 1 of getTextFrame as text ---書体のウェイトなど
set getFontSiz to size of character 1 of getTextFrame as text ---文字サイズポイントで
set getGyokan to leading of text of getTextFrame as text ---行間をポイントで
set getJusti to justification of character 1 of getTextFrame as string ---文字揃え
tell application "Adobe InDesign CS5.5"
tell document 1
set newFrame to make text frame with properties {geometric bounds:{"0 mm", "130 mm", "15 mm", "240 mm"}, stroke color:swatch "None", fill color:swatch "None"}
tell newFrame ---抜き出した情報を設定していく
set contents to getText
set applied font of parent story to getFontFam
set point size of parent story to getFontSiz & " pt"
set leading of parent story to getGyokan & " pt"
if getJusti is "center" then ---文字揃え
set justification of parent story to center align
else if getJusti is "left" then
set justification of parent story to left align
else if getJusti is "right" then
set justification of parent story to right align
else
set justification of parent story to left align
end if ---文字揃えここまで
set vertical justification of text frame preferences to center align ---縦方向のそろえ
fit given frame to content ---フレームをフィットする
end tell ---抜き出した情報を設定していくおわり
end tell
end tell
end tell
end tell
[15724] やっすん (2013/06/19 Wed 14:34)
かなり書き換えてしまいましたがこれで行けると思います。
justificationの受け渡しがうまくないようなので、
AIの方でセンターなら"1"のようにアプリケーション間で問題の出ない普通のテキストに置き換えてます。
あと、今回のは関係ないと思いますが、
tell application "Adobe Illustrator"
なにかやる
tell application "Adobe InDesign CS5"
なにかやる
end tell--AI閉じる
end tell--ID閉じる
ではなく
tell application "Adobe Illustrator"
なにかやる
end tell--AI閉じる
tell application "Adobe InDesign CS5"
なにかやる
end tell--ID閉じる
のようにアプリケーションごとにend tellを入れた方が良いですよ。
以下スクリプト
-------------------------------------------------
tell document 1 of application "Adobe Illustrator"
copy properties of text of text frame 1 to {contents:ai01, justification:ai02, leading:ai03, size:ai04}
copy properties of text font of character 1 of text frame 1 to {family:ai05, style:ai06}
set {ai01, ai03, ai04, ai05, ai06} to {ai01 as Unicode text, ((ai03 as real) & "pt") as Unicode text, ((ai04 as real) & "pt") as Unicode text, ai05 as Unicode text, ai06 as Unicode text}
log ai02
if ai02 is center then
set ai02 to "1"
else if ai02 is left then
set ai02 to "2"
else if ai02 is right then
set ai02 to "3"
end if
end tell
tell document 1 of application "Adobe InDesign CS5"
tell (make text frame with properties {geometric bounds:{"0 mm", "130 mm", "15 mm", "240 mm"}, stroke color:swatch "None", fill color:swatch "None"})
set contents to ai01
if ai02 is "1" then
set ai07 to center justified
else if ai02 is "2" then
set ai07 to left justified
else if ai02 is "3" then
set ai07 to right justified
end if
set properties of parent story to {applied font:ai05, point size:ai04, leading:ai03, justification:ai07}
set vertical justification of text frame preferences to center align ---縦方向のそろえ
properties of parent story
fit given frame to content ---フレームをフィットする
end tell ---抜き出した情報を設定していくおわり
end tell
[15733] 小泉 (2013/06/19 Wed 23:42) web
詳しい理由とかはわからないので、その辺は流星さんとかが見たら解説して頂けると思いますが、
とりあえずIndesignで実行した場合はgetJustiがtext以外の属性を持っている?みたいです。
display dialogでgetJustiを表示して見るとわかります。
で、イラレ側でset getJusti to getJusti & ""として強制的に文字列に直してやると問題なく動くようです。
[15725] AM66 (2013/06/19 Wed 18:06)
AM66さん
テストでは動くのに、本番は動かないとか謎でしたが、解決策あるもんですね!
ヒジョーに勉強になります!ありがとうございました!
[15729] やっすん (2013/06/19 Wed 19:02)
> 詳しい理由とかはわからないので、その辺は流星さんとかが見たら解説して頂けると思いますが、
> とりあえずIndesignで実行した場合はgetJustiがtext以外の属性を持っている?みたいです。
> display dialogでgetJustiを表示して見るとわかります。
> で、イラレ側でset getJusti to getJusti & ""として強制的に文字列に直してやると問題なく動くようです。
横からすみません
この流れで、Illustrator側のカーニングの種類も拾えたりするんでしょうか?(個人的に諦めた箇所なのです)
[15730] (z-) (2013/06/19 Wed 19:07)
> 詳しい理由とかはわからないので、その辺は流星さんとかが見たら解説して頂けると思いますが、
> とりあえずIndesignで実行した場合はgetJustiがtext以外の属性を持っている?みたいです。
> display dialogでgetJustiを表示して見るとわかります。
> で、イラレ側でset getJusti to getJusti & ""として強制的に文字列に直してやると問題なく動くようです。
ESTKでjustificationのプロパティを見ると、
object型になっています。
なので、その後のコードが文字列で判定して分岐をしているので、
うまくいかないのですね。対処策は、AM66さんの仰るとおり、
キャストしてあげるのが良いと思います。
蛇足ですが、例えば、VBの例ですが、揃えの設定は下記のような定義になっています。
typedef enum {
aiLeft = 0,
aiRight = 1,
aiCenter = 2,
aiFullJustifyLastLineLeft = 3,
aiFullJustifyLastLineRight = 4,
aiFullJustifyLastLineCenter = 5,
aiFullJustify = 6
} AiJustification;
AppleScriptで拾い出すと、値が何になっているのか分かりませんが、
たけうちとおる様のサイトを見ると、
http://www.adg7.com/takenote_b/2009/03/09paragraph.html
種類は7つで一致していますね。
[15732] 流星光輝 (2013/06/19 Wed 21:39) web
みなさん、いろいろとお世話していただきありがとうございました
>小泉さん
なるほど納得です。すごいすっきりしたスクリプトになって感激しましたw
tellアプリケーションの入れ子も、これから注意していこうと思います。
>流星光輝さん
詳しい解説ありがとうございます。こういうクセのあるところがかわいいんだよなぁ、スクリプトって
>(z-)さん
properties of character 1 of〜みたいな感じで情報を一括で抜き出すと、kerning methodは"missing values"ってなっちゃいますね。自動とかオプチとか和文等幅とか出なかったです
こういうところがイライラしますね、スクリプトって
[15735] やっすん (2013/06/20 Thu 09:37)
済みません。先にAM66さんが同じことを書いていましたね。
あと、先のスクリプトはalignと書くところをjustifiedと間違って書いていました。
ログを見ながら書くとこうもできますね。
以下スクリプト
----------------------------------------------------------------------------------
tell document 1 of application "Adobe Illustrator"
copy properties of text of text frame 1 to {contents:ai01, justification:ai02, leading:ai03, size:ai04}
copy properties of text font of character 1 of text frame 1 to {family:ai05, style:ai06}
set {ai01, ai03, ai04, ai05, ai06} to {ai01 as Unicode text, ((ai03 as real) & "pt") as Unicode text, ((ai04 as real) & "pt") as Unicode text, ai05 as Unicode text, ai06 as Unicode text}
end tell
tell document 1 of application "Adobe InDesign CS5"
tell (make text frame with properties {geometric bounds:{"0 mm", "130 mm", "15 mm", "240 mm"}, stroke color:swatch "None", fill color:swatch "None"})
set contents to ai01
if ai02 is «constant ****e122» then
set ai07 to center align
else if ai02 is «constant ****e121» then
set ai07 to left align
else if ai02 is «constant ****e123» then
set ai07 to right align
else if ai02 is «constant ****e125» then
set ai07 to left justified
end if
set properties of parent story to {applied font:ai05, point size:ai04, leading:ai03, justification:ai07}
set vertical justification of text frame preferences to center align ---縦方向のそろえ
properties of parent story
fit given frame to content ---フレームをフィットする
end tell ---抜き出した情報を設定していくおわり
end tell
[15736] 小泉 (2013/06/20 Thu 12:54) web