InDesignのスクリプト 表のオーバーフロー解消

InDesign作業を自動化するスクリプト

皆様お久しぶりです。
ただいまとある案件で、InDesign作業を自動化するスクリプトを作っています。

今回スクリプトを作るまでに調べたことを、自分への備忘録として残しておきたいと思います。
※以下のサイトを参考にさせていただきました。
InDesign: オーバーフローした表セルに長体をかけるJavaScriptAdd Star

今回作ったスクリプトは以下のような感じです。

1. エクセルからinDesignに流し込んだ表で、
2. テキストが収まりきっていないセルがあった場合に、
3. 文字に長体をかけて収まるようにする。

※その他仕様
・指定パーセントずつ小刻みに長体をかけていく。
・何パーセントまで長体をかけるか、下限の指定が可能。

スクリプトの使い方としては、
1. あふれを調整したい表またはセルを選択
2. スクリプトを実行!
これだけです。

以下ではスクリプトでやりたいこととそのコードを書いていきます。

▼選択されてる表またはセルを取得する

下記コードで現在選択中のオブジェクトを取得できます。

var selectObj = app.activeDocument.selection[0]

選択したオブジェクトが表またはセルであれば、下記のようにしてセルを取得できます。

var cells = selectObj.cells

上記cellsには選択オブジェクト内の全てのセルが入ってます。
1つ1つのセルを取得する場合は、ループで回して配列風にアクセスします。

for(var i = 0; i < cells.length; i++){ var cellObj = cells[i]; セル1個 ... }
if(cellObj.overflows){ //セルが文字あふれしてるかどうかの判定
//overflowsプロパティであふれの状況が取得できます。便利ですね。 あふれがなくなるまで処理を繰り返すといった場合は下記のようにします。
while(cellObj.overflows == true){ ... }
cellObj.texts[0].horizontalScale - 1; //セル内の文字に長体をかける
//上記は文字の横幅を1%縮めてます。 ちなみに、セル内の文字は
cellObj.texts[0]
//で取れます。※縦組みの場合は文字の高さを縮める必要があります。その際は
cellObj.texts[0].verticalScale
//とします。これまでの内容をまとめると以下のような形になります。
var increPercent = 1; //きざみ値、下限値の設定
var limitPercent = 50; // 何パーセントずつ長体かけてくか
var selectObj = app.activeDocument.selection[0] // 長体の下限値 
var cells = selectObj.cells // セルの取得
for(var i = 0; i < cells.length; i++){var cellObj = cells[i]; var isLimit = false; // セル1つ1つをあふれチェックして長体かけてく
while(cellObj.overflows == true){ // 下限まで行ったかどうか
if(cellObj.texts[0].horizontalScale - increPercent <= limitPercent){
	cellObj.texts[0].horizontalScale = limitPercent;
	isLimit = true;
}else{
	cellObj.texts[0].horizontalScale -= increPercent;
}
parentTableObj.recompose();// あふれてるかどうかの判定 収まるまで処理を繰り返す
if(isLimit){ break; } } } // 再構築 これやらないとあふれの評価が有効にならない
//※ループの中でrecompose()してますが、これをやらないとあふれが解消されたかどうかの判定が正しくできません。
//※選択したセルを取得する前に以下のチェックが必要かと思います。
//・ユーザーがオブジェクトを選択しているか
//・ユーザーが選択しているのは間違いなく表またはセルか

最新ブログ一覧