ごんれのラボ

iOS、Android、Adobe系ソフトの自動化スクリプトのことを書き連ねています。

InDesignでJavaScript その5

InDesignでJavaScript その5。

今回初めてOS 10.3.9で作成した。

InDesignで作成されている台紙に、コマのIllustrator EPSファイルを貼っていくだけのJavaScriptを組んでみた。

仕様として

●台紙はデザイナーが記事部分を修正したものが何度も入稿される気配が濃厚なので、JavaScriptで画像ボックスを作成して、その画像ボックスに弊社作成のコマEPSを貼ることにする

●台割は現段階では超適当なのでExcelで台割順とファイル名を結びつけてフルパスを取得するDBを作成して、そのフルパスだけをテキストに書き出し、InDesignで一行ずつ読み込んで画像ボックスのplaceに渡す

●スクリプティングラベルを画像ボックスに入れておいたので、台割が変わったときにコマEPSを読み込めるようにした(JavaScriptでスクリプティングラベルに指示する方法がわからないので実現できず)

最初は入稿されたInDesignCSのファイル用にScriptを書くも、OS Xでコピーしたファイル名の濁点が分離しちゃう&InDesignCSでファイル名に濁点を含むファイルをJavaScriptで読み込むとエラーになる、という仕様?にハマリ、急遽InDesignCS2で開いてInDesgin互換ファイルに書き出すはめになった。

あと、なぜか画像を貼り込みたいページを表示させないとJavaScriptがうまく動かない。

おそらくプロパティなどが間違っているのかも。

強制的にページを表示させようと思ったんだけど、プロパティが探せず断念。

似たような名前のものが多くてリファレンスを読み解くだけで時間がすぎてしまふ…。

ついでに、作成する画像ボックスを配列に格納したり、ボックスを作成するところを関数化などすれば修正が便利なのは承知していますが、いい加減休日出勤を切り上げて帰宅したいので、とりあえずママイキにします(苦笑)

すっげー寒いんだもん、会社。

/*

★簡易面付けスクリプト.jsx★

☆ver.1.0☆

Copyright [偽善者こうちゃん]

[2006.12.9] {

ver.1.0作成

}

ドキュメント内のすべてのページに画像ボックスを作成し

テキストファイルを読み込んで(フルパス指定)

画像を貼り込むJavaScript。

勉強用に作ったのでサンプルとして使わないほうが…。

なお、このJavaScriptを使用して損害をこうむっても

私は知りませんので、あしからず。

偽善者こうちゃん

http://macneko.blog77.fc2.com/

*/

//作業するドキュメントなどを変数に代入

docObj = app.activeDocument;

pageObj = app.activeDocument.pages;

//ファイルダイアログで読み込むテキストファイルを選択

filename = File.openDialog("面付けDBのテキストファイルを指定してください");

if (filename) {

fileObj = new File(filename);

//ファイルを読み込みモードで開く

flag = fileObj.open("r");

//ラベル用にテキストファイルの行数をカウント開始

lineCount = 1;

if (flag == true) {

//テキストの終わりまで{}の処理を続ける

while (!fileObj.eof) {

//ページ数分繰り返す

for (i = 0 ; i < docObj.pages.length ; i++) {

//ボックス1個目

txtObj = pageObj[i].textFrames.add();

txtObj.visibleBounds = ["0mm","0mm","10mm","10mm"];

txtObj.contentType = ContentType.graphicType;

//ラベルに入れるためには文字化しないとダメらしい

txtObj.label = lineCount.toString() ;

//次のボックスのために+1

lineCount = lineCount + 1;

//ファイルを1行だけ読み込む

line = fileObj.readln();

//空行(改行のみ)じゃなかったら

if (line != "") {

//placeのファイルを読み込む

txtObj.place(line);

//枠内センターに配置

txtObj.fit(FitOptions.centerContent);

}

//ボックス2個目

//上記処理の数値を変えたものが入る

}

}

fileObj.close();

//開けなかったら

} else {

alert("ファイルが開けませんでした");

}

}