2008年12月11日

Indesign:複数のテキストフレームを連結するスクリプト

昨日のQwanの記事を見て、連結したテキストフレームの作成がもう少し楽な方が良いと考え、スクリプトにしてみた。

var frameArray = new Array(); selectionObject = app.activeDocument.selection; for (i=0; i<selectionObject.length; i++) { if(selectionObject[i].constructor.name == 'TextFrame' ) { frameArray[i] = selectionObject[i]; } } if (frameArray.length <= 1) { alert("複数のテキストフレームを選択して下さい"); exit(); } var mainDialogObj = app.dialogs.add({ name:"複数のテキストフレームを連結", canCancel:true}); with(mainDialogObj){ with(dialogColumns.add()){ with(dialogRows.add()){ staticTexts.add({staticLabel:"連結順序を選択してください"}); } with (dialogColumns.add()){ var drpList = dropdowns.add({stringList: ["左上優先", "作成した順"], selectedIndex:0, minWidth:200 }); } with(dialogColumns.add()){ } } } flag = mainDialogObj.show(); if (flag == false) { exit(); } if (drpList.selectedIndex == 0) { alert ("左上優先で連結します", "選択された連結順序"); frameArray.sort(mySort); } else { alert ("テキストフレームを作成した順番で連結します", "選択された連結順序"); } for (i=0; i<frameArray.length-1; i++) { frameArray[i].nextTextFrame = null; frameArray[i].nextTextFrame = frameArray[i+1]; } function mySort(a, b){ var a_y = a.visibleBounds[0]; var a_x = a.visibleBounds[1]; var b_y = b.visibleBounds[0]; var b_x = b.visibleBounds[1]; if (a_y > b_y) { return 1; } else if (a_y < b_y) { return -1; } else if (a_y == b_y) { if (a_x == b_x) { return 0; } else if (a_x > b_x) { return 1; } else if (a_x < b_x) { return -1; } } }

ソート辺りが物凄くかっこ悪いな。そのうち直そう。
万が一使い道を見つけた人用に、ライセンスはパブリックドメインとしておきます。一切著作権に基づく要求をしません。

…そう言えば、せうぞーさんは、うちの会社にとても縁深い人だった。上司とApple関係のイベントに行った事があったり、せうぞーさんのコードも混ざってるかも知れないスクリプトを今でも使ってたり。何て素敵な狭さ。

22:31 | Comment(5) | TrackBack(0) | Neran-Note

この記事へのコメント
>うちの会社にとても縁深い人だった。

あちこちでご迷惑をおかけしているかもしれません。
わたしのコードが残っているなんて、悪夢のようです^^
Posted by せうぞー at 2008年12月12日 10:53
いや、ほんとにそのスクリプトは業務に欠かせない大切なものになってます。古いAppleScriptなので今後はIndesign用に置き換えていかないといけませんけれど。
あ、せうぞーさんのサイン入りスクリプト本もありました。お写真も、ちょっとだけ拝見しました。
Posted by Neran at 2008年12月12日 23:47
はじめまして
osxのfirefox3とsafari3の環境でみてみて、JavaScriptのソースの表示が一部欠落しちゃっているみたいです。

htmlソースをみて

> for (i=0; i<selectionObject.length; i++) {
とか
> for (i=0; i<frameArray.length-1; i++) {
とか
のあたりでごっそり見えなくなっています。
Posted by mg at 2009年07月06日 15:55
mgさん、お知らせありがとうございます。
クォートやら括弧やらをそのまま貼っていました。恥ずかしい。
修正しましたので多分見えると思います。
Posted by Neran at 2009年07月06日 19:15
Neranさん、ありがとうございます。
見えるようになりました。
自分も気をつけようっと。
Posted by mg at 2009年07月07日 01:06
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。