8月 27, 2012
inomoto

【InDesign】InDesignのバグ2点

今回は、仕事中に発見したInDesignのバグを2点ご紹介します。
1点は解決方法がありますが、もう1点は解決方法がありません。
もしこれから同じような処理を行う予定の方はご注意下さい。

1 CS5〜限定 bottom right corner optionのバグ&回避方法

 CS5から、text frameやrectangleの角丸の設定の仕様が変更され、4つの角を別々に制御できるようになりましたが,バグを1点発見しました。4つ角のプロパティは下記の通りです。

・top left corner option     角のシェイプ左上
・top left corner redius    角のサイズ左上
・top right corner option    角のシェイプ右上
・top right corner redius    角のサイズ右上
・bottom left corner option   角のシェイプ左下
・bottom left corner redius   角のサイズ左下
・bottom right corner option   角のシェイプ右下
・bottom right corner redius  角のサイズ右下

このうちの、「bottom right corner option」だけが、スクリプトエディタ上に入力することができません。コンパイルできなくなってしまいます。
Adobeのフォーラムを検索したところ、「«property pcO4»」と入力すると、「bottom right corner option」にコンパイルされるようです。
(参照:http://forums.adobe.com/thread/829997)

ですが、このままだとコンパイルのたびに「bottom right corner option」を「«property pcO4»」に打ち直ししなければならず、正直仕事になりません。

そこで、テキストをスクリプトとして評価するという方法でこの現象を回避してみようと思い、下記のルーチンを作成しました。

[applescript]
–bottom right corner optionを取得
on getBottomRightCornerOption(frameID, appName)
set aScript to "
tell application \"" & appName & "\"
tell document 1
tell text frame id " & frameID & "
set bottomRightCornerOption to «property pcO4»
end
end
end" as string
set aResult to run script aScript
return aResult
end getBottomRightCornerOption

–bottom right corner optionを設定
on setBottomRightCornerOption(frameID, bottomRightCornerOption, appName)
set aScript to "
tell application \"" & appName & "\"
tell document 1
tell text frame id " & frameID & "
set «property pcO4» to " & bottomRightCornerOption & "
end
end
end" as string
set aResult to run script aScript
end setBottomRightCornerOption
[/applescript]

上がプロパティの取得用、下が設定用です。
取得用ルーチンに渡すパラメータは、

1 オブジェクトのID
2 アプリケーション名

設定用ルーチンに渡すパラメータは、

1 オブジェクトのID
2 取得用ルーチンで取得した値
3 アプリケーション名

です。アプリケーション名を渡すことにしてあるのは、CS5以降のverでも使用できる可能性を考えてのことです。CS5.5を調べてみたところ、修正されていないようでしたので……。

これで、面倒な作業なしに開発に集中できるようになりました.

2 CS5まで? anchored object settingsのバグ(回避方法なし)

アンカーオブジェクトのあるプロパティの設定が、GUIからできることとスクリプトからできることが異なる、という現象です。
親文字からの間隔を「カスタム」にすると、アンカー付き位置の「Y基準」を設定できるようになりますが、ポップアップメニューからは下記の列挙値が取得できると思います。

・行(ベースライン)
・行(キャップハイト)
・仮想ボディの上
・仮想ボディの中央
・仮想ボディの下
・行(行送りの先頭)
・列枠
・テキストフレーム
・ページマージン
・ページ枠

これらと、AppleScriptの辞書で定義されている列挙値を比較すると、以下のようになります.

・行(ベースライン)  line baseline
・行(キャップハイト) capheight
・仮想ボディの上    (値なし)
・仮想ボディの中央   (値なし)
・仮想ボディの下    (値なし)
・行(行送りの先頭)  top of leading
・列枠         column edge
・テキストフレーム   text frame
・ページマージン    page margins
・ページ枠       page edge
・(値なし)      line Xheight
・(値なし)      line ascent

このなかで特に困るのが、仮想ボディ関係のプロパティです。大概の自動処理系の作業は、手作業でのデータやテンプレートがまずあって、それにあわせて仕様を設定するということが多いと思いますが、そこでこれらの値が使用されている場合、スクリプトで対応できなくなってしまいます。同じような作業を行う際はご注意ください。

ちなみに、こちらはCS4でも同じ現象が見られますので,それ以前も同様の可能性があります(確認はしていません).CS5.5では修正されているようです。許されるならば5.5に上げてしまうのも一つの手段かと思われます.

Leave a comment