悪い予感は当たった。kakomiCS2.jsxとInDesign CS4

スプレッドの回転を使ってみた「InDesign CS4も前のバージョンのスクリプトが動くように設計されている」の続き。

昨日の帰りの車の中でやな予感がしたんだよな。それはkakomiCS2.jsx。皆さんに好評を博している(?)このスクリプト、実はスプレッドの回転で動かないんじゃないか、ということ。

それはスクリプトの最後にある以下の部分。

//フォントのベースラインを取得する関数
function fontbaseline ( myFont, doc ) {
    txf = doc.textFrames.add();
    txf.strokeWeight = 0;
    txf.geometricBounds = [0, 0, 100, 100];
(中略)
    with (txf.parentStory) {
(中略)
        contents = "あ";
        appliedFont = myFont;
        pointSize = 100;
    }
    blp = txf.lines[0].baseline / 100;
    txf.remove();
    return blp;
}

これはなにをしているかというと、下線、打ち消し線のオフセット値を決めるために選択されている文字の、フォントのベースラインを取得する部分。100pt四方のテキストフレームを作成し、100ptの文字を入力してそのbaselineプロパティを取得している。取得が完了したらテキストフレームを削除しているので、結果には影響はない。

が、しかし、スプレッドが回転していることでベースラインの値が正しく取得できそうにないことは明白だ。ということで次のように線幅1mm、行方向のオフセット2mmの設定でテスト。

その結果がこれだ(分かりやすいように下線は赤、打ち消し線は緑に着色した

真ん中の上から順に以下のようになっている。

Version 3.0 Scripts」フォルダに入れた場合(エラーです)
「Version 4.0 Scripts」フォルダに入れた場合
「Version 5.0 Scripts」フォルダに入れた場合
通常の場所に入れた場合
「Version 5.0 Scripts」フォルダに入れて180度回転した状態で実行

左のものは「Version 5.0 Scripts」フォルダに入れて時計回りに90度回転した状態で実行

右のものは「Version 5.0 Scripts」フォルダに入れて反時計回りに90度回転した状態で実行

ということで、囲み罫の形になっているのは「Version 4.0 Scripts」もしくは「Version 5.0 Scripts」フォルダに入れて回転しない状態で実行したものに限るのである。

回避方法はある。テキストフレームを作る際に新たなドキュメントを作成し、その上でベースラインを取得、ドキュメントを破棄してしまうのである。

これで一件落着とおもいきや、スクリプトの置き場所を通常の場所にした場合では前のフタの位置がずれてしまうことを解決しなければ本当のCS4対応にならない。これにはもう少し時間が掛かる(かつ、体験版の期限が切れてしまう前に他のことも試したい)ので、少なくとも年内は修正できません。みなさんごめんなさい。

『悪い予感は当たった。kakomiCS2.jsxとInDesign CS4』へのコメント

  1. 名前:せうぞー 投稿日:2008/12/05(金) 17:38:12 ID:7c17e2541 返信

    >皆さんに好評を博している(?)
    博しています。絶賛好評博しまくっています。
    (わたしは)急ぎませんので、ぜひとも続けていただくと助かります。
    スプレッドの回転って、激しく用途が限られるような気がします。カレンダーとか。
    この際、activeSpreadが回転してしていたら、アラート出して終了ではダメ?

  2. 名前:お~まち 投稿日:2008/12/05(金) 18:31:35 ID:103328a27 返信

    スプレッドの回転は回避できるんですが、アンカーオブジェクトの挿入位置がずれている件、どうもCS4で文字の数え方が変わったような気が…
    おそらく今のプログラムの修正では複雑になり過ぎるので、新しく書き起こすと思います。
    > activeSpreadが回転してしていたら
    実はこれ、昨日からずっと探しているんですがどこにも見当たらないんですよ。viewとかrotation(rotate)で検索かけてるんですが…
    おそらくスクリプトはスプレッドの回転を全く考慮していないんじゃないかと思います。SDKのほうはどうなのかなあ。

  3. 名前:せうぞー 投稿日:2009/04/18(土) 01:37:28 ID:04569fd86 返信

    Adobe Forumsでチェック方法を教えてもらいました。
    http://d.hatena.ne.jp/seuzo/20090418/1239985351

  4. 名前:通りすがり 投稿日:2017/07/19(水) 23:04:52 ID:230fe3073 返信

    今さらレスを付けるのもなんですが、後進の人々のために書き残しておきます。

    スプレッドが回転しているかどうかは、SpreadオブジェクトのtransformValuesOf関数を使って調べることができます。
    var spObj= app.activeWindow.activeSpread; //アクティブスプレッド
    var xMatrixz= spObj.transformValuesOf(CoordinateSpaces.PASTEBOARD_COORDINATES);
    var xMatrix = xMatrixz[0];
    $.writeln (‘Rotation Angle: ‘+xMatrix.counterclockwiseRotationAngle); //反時計回りなら90と返る

    • 名前:お~まち 投稿日:2017/07/19(水) 23:18:17 ID:66eee2553 返信

      中綴さんじゃないですか。お元気ですか。レスありがとうございます。
      TransformationMatrixはよく分からないので教えてください。
      特定の座標を中心に回転させる方法が知りたいです。

      • 名前:なかとじ 投稿日:2017/07/20(木) 01:49:47 ID:79cdc0216 返信

        ご無沙汰でございます。日頃オブジェクトツリー図でかなりお世話になっています(感謝!)。
        表立っては活動していませんが、お元気なんです(^ ^;
        TransformationMatrixは一見難解ですよね。CS3以降、オブジェクトの変形はこれでということになっているのですが、単純な旧関数も使えるのでみなさんあんまり使いませんよね。概略はせうぞーさんのページにありますが、他に活用事例情報が少ないからでしょうかね。
        transformValuesOf関数は単に変形具合を調べるだけでなく、引数に「座標軸」を指定することによって、ペーストボード基準だけでなく、スプレッド基準の値も取得することが出来ます。なお、この定数に関してはディザIDのオブジェクトツリーに明るいということで(^^)
        実は自作「仕上げ屋」製作時、transform系hは結構突っ込んで実験しました。そのときに、スプレッドやその上にあるオブジェクトとtransform系プロパティの関係を発見しました。
        しかも、それを非公開のWebページに細かくまとめてあり、「特定の座標を中心に回転させる方法」もあります。これを公開できればよいのですが、昨今のIDスクリプト界(?)のお寒い状況の中、今さら感があって未完成のまま公開には至っていません(中途半端感もアリ)。
        まぁ、中途半端とはいえ有用な情報はそれなりにあると思うので、これを機会に突貫で見られる程度に仕上げて公開しようかな……
        その時はお知らせします(成り行き上、おそらくこのスレッドで)。

        • 名前:お~まち 投稿日:2017/07/20(木) 08:00:14 ID:291999afa 返信

          中途半端でも全然かまわないですよ(Webにはいい加減な情報も多いですし)。是非お願いします。

  5. 名前:なかとじ 投稿日:2017/07/24(月) 21:46:42 ID:543138406 返信

    えーと、とりあえず公開してみました。
    http://nakatoji.lolipop.jp/
    件のtransform関連のスクリプトは「スクリプト/PageItem関連/PageItemの変形、およびその値の取得」にあります。
    それではよしなにということで。

    • 名前:お~まち 投稿日:2017/07/24(月) 21:53:29 ID:90fdbd82a 返信

      滅茶苦茶膨大な資料じゃあなあいですか。ありがとうございます。喜ぶ人多いですよ

  6. 名前:なかとじ 投稿日:2017/07/24(月) 22:07:47 ID:543138406 返信

    こちらこそ、なんかきっかけを与えていただいて。
    今更InDesignはどうでしょうねぇ? Illustratorはまだ盛んなようですが。
    とりあえず、テキスト関連の強化と表組が課題です。

    • 名前:お~まち 投稿日:2017/07/24(月) 22:16:14 ID:90fdbd82a 返信

      InDesignはある程度成熟してるとも言えるんですが、ソフト自体がアップデートしてないので新しい発見がないんです。
      Illustratorは(私に言わせると)元々不便なのでスクリプトの余地があるという……
      Twitterで広告したのでみんな来てくれますよ。

  7. 名前:なかとじ 投稿日:2017/07/24(月) 23:09:34 ID:543138406 返信

    Twitter<えぇ~! ってまぁ、見てもらうために公開したわけですがw なんか今更気恥ずかしいですね。
    Illustratorは1発モノ(イラスト)を作る感覚的なソフトですからね。論理的な作業に不向きなのは当然と言えば当然なのですが、業務上、論理的な作業も必要になるので確かにスクリプトの入り込む余地はありそうですね。
    おっしゃる通りInDesignはもう完成されたツールだと思います。本来、もう機能的バージョンアップはいらないくらいなのですが、それはA社の商売上できないわけで仕方がないと。
    だからこそ、いかにして手や思考を止めないようにするかというのが命題として成立するわけで、そこにスクリプトの力がまだまだ必要だと感じています。
    もっとも業界自体が斜陽産業なので、マーケットとしてニッチになって盛り上がりようがないんですけどねw

    • 名前:お~まち 投稿日:2017/07/24(月) 23:22:47 ID:90fdbd82a 返信

      斜陽だからこそ生き残るためにはスクリプトが必要だと思ってやってます(^^;