M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2005年3月12日 17:09

InDesignCSのJavaScriptで自動組版っぽいことしてみようかなと思った(2)。

このエントリーをはてなブックマークに追加 mixiチェック

選択されたテキストボックスのうち、あふれマークが出ているところの最初のパラグラフに、あふれマークが出ないか、10%長体になるまで長体を掛け続けます。

function choutai(txtObj) {
    for (w=100; w >= 10; w--) {
        if (!txtObj.overflows) break;
        txtObj.paragraphs[0].horizontalScale = w;	
    }
}
 
 
sel = app.activeDocument.selection;
 
for (i = 0; i < sel.length; i++) {
    txtObj = sel[i]
    choutai(txtObj);
}
 

リミットやら、つぶしきれなかったときにダイアログ出すとかはお好みで。

実行例:

図のような、あふれているテキストボックスを選び、スクリプトパレットからスクリプトをダブルクリックします。

indd3-script3
▲あふれています

すると、長体がかかって、収まります。

indd3-script4
▲シリアル食品かよっ!

~~~

僕が某所で iBook 上で見せてもらった自動で長体かけるやつは、まさに長体をかけているさまが見えるようになっていて、人間がいないのに人間がキーボード操作で長体をかけているような錯覚に陥り、その日の夜はキモくて寝られませんでした。あれは AppleScript でやっているから作業の様子が見られるのかしら。

投稿 大野 義貴 [InDesign] | |

トラックバック(1)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/883

ソーシャル・ネットワーキングサイト [mixi(ミクシィ)] - 操作上の疑問質問:297 (2006年2月 8日 19:34)

2)M.C.P.C.~むり・くり~プラスコミュニケーション http://cl.cocolog-nifty.com/dtp/ の中に、JavaScriptがあります。 http://blog.dtpwiki.jp/dtp/2005/03/indesigncsjavas_1.html 私もありがたく使わせていただいています。 ... 続きを読む

コメント(3)

はじめまして。
最近 InDesign に移行しつつある者です。
文字のオーバーフローで、何か良い自動化処理の方法は無いかと思い、
このページにたどり着きました。
このスクリプト、ありがたく使わせてもらっています。

いくつか質問をさせてもらっていいでしょうか。

現状のスクリプトでは選択したテキストボックス内の、
最初の1行目(パラグラフ)しか長体化してくれないので

-------------------------------------------------------------------------------
function choutai(txtObj) {
for (w=100; w >= 10; w--) {
if (!txtObj.overflows) break;
for (j = 0; j < txtObj.paragraphs.length; j++) {
txtObj.paragraphs[j].horizontalScale = w;
}
}
}

sel = app.activeDocument.selection;

for (i = 0; i < sel.length; i++) {
txtObj = sel[i];
choutai(txtObj);
}
-------------------------------------------------------------------------------

こう変えてみました。これで一応はきちんと動作してくれています。
自分はスクリプトに関して初心者で、色々ネットで調べてみてこうやってみました。
が、なにかもっと単純な方法があるんではないかと思えますが、いかがでしょう?
txtObj.paragraphs.lengthをカウントアップしていくのでは無く、
テキストボックス内の改行含むテキスト全体に対して
長体をかける命令みたいなもの、方法、です。

もう一つ質問です。
このスクリプト縦組文字にも対応出来れば使い勝手が凄く良くなると思います。
多分 function 部分をもう一つ増やして、horizontalScale を verticalScale に変え、
下部で if else を使って条件分岐させてやれば実行可能かな、と思っています。
その際、sel[i] つまり txtObj に対して縦組か横組かを聞く if が必要になると思うのですが、
その方法が色々ネットで調べてみたんですが、もう一つ解りません。

質問ばかりで申し訳ないのですが、
よろしかったら御指南いただけませんでしょうか。

自分はスクリプトに関して初心者で、色々ネットで調べてみてこうやってみました。
が、なにかもっと単純な方法があるんではないかと思えますが、いかがでしょう?

いろいろ試してみましたが、TextFrameの中のテキストストーリーを取得するといいようです。

これを使いますと、

  for (j = 0; j < txtObj.paragraphs.length; j++) {
    txtObj.paragraphs[j].horizontalScale = w; 
  }

が、

  txtObj.parentStory.horizontalScale = w;

と書き直すことができます。

このスクリプト縦組文字にも対応出来れば使い勝手が凄く良くなると思います。

これに対応すべく新規に書き直しましたのでそちらを参照してください。
http://blog.dtpwiki.jp/dtp/2008/09/indesign-javasc.html

素早い対応、ありがとうございます!
parentStory
ああ、やっぱりここはループさせないでも出来る方法があったんですね。

縦組対応のモノも作って頂いたみたいで、本当にありがたいです。
早速試してみます。
新しいスクリプトも色々自分なりに調べて勉強させていただきます。
繰り返しになりますが、ありがとうございます。

コメントする