アチキの場合、Scriptに関しては「ど素人状態」。それでも何とか終えました。
やり方はただひとつ。ひたすらググる。ググりさえすれば答えが見つかるいい時代^^
スクリプトの緑部分はアチキの弄ったとこです。
お題1 ・テキストフレームの中のテキストを上下センターにする古旗さんのテキストフレーム内の文字を天地中央に配置すると段落の位置揃えを指定するを合体してみる。
pageObj = app.documents.add();これだと新規にドキュメントが作成され、左上
txtObj = pageObj.textFrames.add();
txtObj.visibleBounds = ["2cm","1cm","4cm","10cm"];
txtObj.contents = "天地中央に自動的にレイアウトします。";
txtObj.textFramePreferences.verticalJustification = VerticalJustification.centerAlign;
txtObj.paragraphs[0].justification = Justification.centerAlign;
ちと余計だな。。。意図は選択されたテキストフレーム内の文字を天地左右センターにしたいのだから、、、
txtObj = app.activeDocument.selection;としてみる。こんなに簡単ではないはず。案の定、エラー発生。
txtObj.textFramePreferences.verticalJustification = VerticalJustification.centerAlign;
txtObj.paragraphs[0].justification = Justification.centerAlign;
ならばとテキストフレームのみ選択するに書き足してもエラー。
どうする?? しばらく考える。
とりあえず選択されたフレーム内のテキストを左右センターするに絞ってやってみる。
txtObj = app.activeDocument.selection;
txtObj.paragraphs[0].justification = Justification.centerAlign;
だとエラーになるので「Justification.centerAlign」でググると
はいさい!の画像フレームのフィットオプションがhit! で、弄った!
var frame = app.activeDocument.selection[0];で動作します^^
frame.parentStory.justification = Justification.centerAlign ;
なんでparagraphsはダメでparentStoryならOKなのか分かりませんです。
続行、最後に天地センターを加えて
var frame = app.activeDocument.selection[0];で完成^^
frame.parentStory.justification = Justification.centerAlign ;
frame.textFramePreferences.verticalJustification = VerticalJustification.centerAlign;
8/28追記:合体したスクリプトが動かなかった原因はtxtObj = app.activeDocument.selection;がだったから。
txtObj = app.activeDocument.selection[0]; で動きます。で、txtObj.paragraphs[0].justification = Justification.centerAlign;は単数行ならOKなのですが、複数行ですとparentStoryでないとダメみたいです。
8/31追記:上級編は公式を使った。
var frame = app.activeDocument. textFrames;
for (var i = frame. length - 1; i > -1; i--) {
try {
frame[i].parentStory.justification = Justification.centerAlign ;
frame[i].textFramePreferences.verticalJustification = VerticalJustification.centerAlign;
} catch(frame) {}
}
お題2の1 ・1つのテキストフレームを右へ10mm移動はいさい! フレームサイズの取得に辿り着けばお題は終わり。
var frame = app.activeDocument.selection[0];ちと弄って出来ました^^ ただ単位がmmになってるので出来たわけでして、単位がptだと10ptになってしまいます。アチコチ弄りましたが結局ダメ。
var y = frame.visibleBounds[0];
//左上
var x = frame.visibleBounds[1];
//左上
var y1 = frame.visibleBounds[2];
//左下
var x1 = frame.visibleBounds[3];
//左下 x1
frame.visibleBounds = [ frame.visibleBounds[0], frame.visibleBounds[1]+10, frame.visibleBounds[2], frame.visibleBounds[3]+10];
Adobe InDesign スクリプティングチュートリアルを読むと、最初に
app.activeDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.millimeters;と宣言するみたいです。で、このたった2行で動作するのは感動ものです。
app.activeDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.millimeters;
8/31追記:varで宣言しているのだから、frame.visibleBounds=[y, x+10, y1, x1+10];とするべきだな。
再追記(重要):InDesignでJavaScript その7を参考に
var frame = app.activeDocument.selection[0];の2行だけで移動できた^^
frame.move("by",["10mm","0mm"]);
お題2の2 ・2つのテキストフレームの間隔を3mmにするここまでくるとお題ははいさい!から出されているんだなとアチキでも気付きます^^ で、こいつは選択しているアイテムを整列させる(等間隔に分布編)
app. activeDocument. distribute (app. activeDocument. selection, DistributeOptions. HORIZONTAL_SPACE, AlignDistributeBounds. MARGIN_BOUNDS, false) ;を弄ってみます。
app. activeDocument. distribute (app. activeDocument. selection, DistributeOptions. VERTICAL_SPACE, AlignDistributeBounds. ITEM_BOUNDS, false) ;にすると垂直方向に等間隔に分布されます。
app. activeDocument. distribute (app. activeDocument. selection, DistributeOptions. VERTICAL_SPACE, AlignDistributeBounds. ITEM_BOUNDS, true, absoluteDistributeMeasurement=3) ;にして垂直方向間隔3mmが完成。
ここは=3) ;を="3mm") ;にすると数値がpt表示でも問題なく動作。
お題3 ・テキストフレーム内の文字「楽しく」にルビをふるこいつは設問の意図を読み間違え、たけうちとおるさんのruby.zipでワ~イ、動いた^^ と喜んでいた。そんなに簡単なわけがない。結構、探すのに難儀したので、後日、書きます。
・「作成方法」にルビをふる(グループルビ)
お題4 ・テキストの中の値段をすべて10円アップするこのお題を見てパッと浮かんだのが消費税。消費税込みの価格は価格*1.05だから*1.05を+10にすればいいだけなのでは?
「InDesign javaScript 消費税」でググれば古旗さんの
文章中の価格に消費税を加算する (Adobe InDesign & Illustrator CS3/CS4編)がヒットします。
var selObj = app.activeDocument.selection[0]; // 最初に選択した数値のみ処理n = n * 1.05; をn = n + 10; に書き換えて完成~^^
var txt = selObj.contents;
selObj.contents = txt.replace(/\d+円/g, repFunc);
function repFunc(n){
n = parseInt(n);
n = n * 1.05; // 消費税5%を乗算する
n = Math.round(n);
return n+"円";
}
追記:実際に動かしてみると「1,000円」は「1,10円」になってしまう。
で、先頭に円マークのある価格は
var selObj = app.activeDocument.selection[0]; // 最初に選択した数値のみ処理なのでひとつにまとめてみようと思ったが、return "\"+n;で
var txt = selObj.contents;
selObj.contents = txt.replace(/\\d+/g, repFunc);
function repFunc(n){
n = parseInt(n.substring(1,9999));
n = n * 1.05; // 消費税5%を乗算する
n = Math.round(n);
return "\"+n;
}
エラー番号:4、終了していない文字列型の定数です
のアラートが出る。まぁバックスラッシュと円マーク絡みだし、こちとらWinXP環境だし。。。そんなわけで終了。
あとは、どうしてこうなるのかの理解なのだが、とりあえずやってしまうと気が抜けていまいち勉強する気にならんのがアチキの欠点。体目当てでやるのが目的ではないのだが(オイ
0 件のコメント:
コメントを投稿