ごんれのラボ

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

indesignでJavaScript メモ書き

indesignでJavaScript メモ書き。

基本的なことをメモ書き(07.09.21更新)

●ラベルつきオブジェクトを選択するには

	var preTumeG = docObj.pageItems.item("titlegroup"); 

preTumeG.select();

var preTumeGSelecton = app.selection[0];

●オブジェクトを削除するには

	preTumeGSelecton.remove() ; 

●ライブラリの読み込み&登録されたアイテムの配置は

	var docObj = app.activeDocument;

var LibName = "ライブラリ.indl"

var myLibraries = app.libraries;

if (myLibraries.length == 0){

alert(LibName + "を開いてください。");

return;

}

try{

var myLib = myLibraries.item(LibName);

}

catch(e){

alert(e);

alert(LibName + "を開いてください。");

return;

}

//ライブラリ内のアイテム選択

var myAsset = myLib.assets.item("アイテム名");

var myObjArray = myAsset.placeAsset(docObj);

//ページ内に配置

var myObjGroup = myObjArray[0];

//配置したオブジェクトを確定させる

app.selection = myObjGroup.parent;

●テキストファイルを1行ずつ読み込むには

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

if (filename) {

fileObj = new File(filename);

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

flag = fileObj.open("r");

if (flag == true) {

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

while (!fileObj.eof) {

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

line = fileObj.readln();

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

if (line != "") {

ここに処理を書く

}

}

}

}

●画像を貼り込むには

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

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

txtObj.contentType = ContentType.graphicType;

imageFile = "フルパス";

txtObj.place(imageFile);

//ボックスにフィット(変形)

txtObj.fit(FitOptions.centerContent);

}

●画像を相対的に移動させるには

var mydocument = app.activeDocument; 

var myobj = mydocument.pageItems.item("hoge");

myobj.select();

myobj.place("System:Users:yokota:Desktop:A01_P1.eps");

//画像を現在の位置から相対的に移動させる

myobj.graphics[0].move("by",["5mm","10mm"])

●ページのルーラーを変更するには

	//ドキュメントのrulerOriginを保存

var oldRular = docObj.viewPreferences.rulerOrigin ;

//ドキュメントのrulerOriginをページに変更(10進法で指定)

docObj.viewPreferences.rulerOrigin = 1380143983 ;//ページ

docObj.viewPreferences.rulerOrigin = 1380143984 ;//ノド元

docObj.viewPreferences.rulerOrigin = 1380143983 ;//スプレッド

●オブジェクトを絶対値で移動させるには

move([x,y]);//"to"や"by"はつけないほうがいいみたい

●グループされたオブジェクトの中のオブジェクトを選択するには

//グループ化されたアイテムを選択しておく

var nexTumeGSelecton = app.selection[0];

//pageItemsで入れ子の中に潜っていける

nexTumeGSelecton.pageItems.item("hoge").select();


<以下07.07.18追記>

●フォルダ中のファイルを一括取得

var folderObj = Folder.selectDialog("一覧にしたい画像のあるフォルダを選択してください") ;

var fileListEPS = folderObj.getFiles("*.eps") ; //EPSファイルを配列化

●Folder.selectDialogなどで取得したものをデコード(OSXだと濁点とか文字化け)

//取得したファイルをデコード	

var capKakou = pictureList[p] ; //pictureListにはエンコードされたフルパスが入っているとする

var decodePath = decodeURI(capKakou)

var capKakouArray = decodePath.split("/") ;

var capContents = capKakouArray.pop() ; //配列の最後を取得

●マスターアイテムのオーバーライド

var myPage = app.activeDocument.pages[i]; //for文で回すことを考えて[i]のまま

//アイテムのオーバーライド処理(ラベルの有無判断付き)

var myObjects = myPage.masterPageItems

for (h = 0 ; h < myObjects.length ; h ++) {

if (myObjects[h].label != "") { //ラベルがついてなかったら

//アイテムをオーバーライドする

myObjects[h].override(myPage);

}

}

●XMLからキーを取得しラインのカラーを変更

//XMLタグからコマのテーマカラーのキーを取得する

var komaColor = docObj.xmlElements.item("Root").xmlElements.item("record").xmlElements.item("EL地方").contents ;

komaObj.pageItems.item("sen").select() ;

var frameStrokeColor = app.selection[0] ;

frameStrokeColor.strokeColor = docObj.swatches.item(komaColor) ;


<以下07.09.20追記>

●段落スタイルと文字スタイルを読み込む

docObj.importStyles(ImportFormat.paragraphStylesFormat, myStyleFile);

docObj.importStyles(ImportFormat.characterStylesFormat, myStyleFile);

●テキストフレーム内天地センター

myItems.textFramePreferences.verticalJustification = VerticalJustification.centerAlign

●特定の文字に特定のスタイルを適用

//こむぎさんの「正規表現検索スタイル適用 (履歴付き)2006.08.26版」を

//一部(というかほとんど…)利用させていただいています

//感謝感謝

function applieStyleAtMatchString()

{

myFrame = app.selection[0]

var regexpArray = ["「","『","【","(","[","{","‘","“","〈","《","〔"] ; //配列化

// 選択中のTextFrameの行の集合を取り出す

myParagraphs = myFrame.paragraphs;

// 各行を処理対象に

for(j = 0; j < myParagraphs.length; j++)

{

// 選択中のTextFrameから1行テキストを取り出し

txtObj = myParagraphs.item(j).contents;

// 行末が改行だったら、処理対象行から改行を除く

// これにより、行末からのインデックスを使うと一つずれるので注意

if(escape(txtObj.substr(txtObj.length - 1, 1)) == "%0D")

{

txtObj = myParagraphs.item(j).contents.substr(0, txtObj.length - 1);

}

for (r = 0 ; r < regexpArray.length ; r ++) {

startPos = txtObj.indexOf(regexpArray[r]) ;

while (startPos != -1) {

//マッチした文字の数

matchStringLen = RegExp.lastMatch.length;

//マッチした文字列にスタイルを適用

myFrame.paragraphs.item(j).characters.itemByRange(startPos, startPos + matchStringLen - 1).appliedCharacterStyle = newStyle;

// マッチした文字列に同じものがあるとindexOf()が機能しないので

// マッチした次の文字を検索開始位置にする

startPos = txtObj.indexOf(regexpArray[r], startPos+matchStringLen) ;

}

}

}

}

●貼り込む画像数と1ページあたりに貼り込まれる数からページ数を計算

var EPSLength = 10 ; //総数

var komakazu = 10 ; //1ページあたりの数

if (EPSLength % komakazu != 0) { //余りがあれば(割り切れなければ)

var allPage = Math.ceil(EPSLength / komakazu) ; //総ページ数(小数点以下切り上げ。.0も切り上げるから注意)

} else {

var allPage = (EPSLength / komakazu) ;

}


<以下07.09.21追記>

●テキストファイルの中身を一気に取得(行数カウントも含む)

	//テキストを一気に読み込むついでに行数も数えておく

var regObj = new RegExp(LF,"g"); //正規表現で目的の文字を探す

var fileObj = new File(fileListTEXT[t]);

var flag = fileObj.open("r") ; //ファイルを読み込みモードで開く

if (flag == true) {

var lineAll = fileObj.read() ; //ファイル内容を一度に読み込む

var LFCount = lineAll.match(regObj) ;

//今回のコメント数

if (LFCount == null) { //1行しかなかったら

var comment = 1; //LFの数を数える(最終行に改行がないため+1する)

} else {

var comment = LFCount.length + 1; //LFの数を数える(最終行に改行がないため+1する)

}

}

fileObj.close();


<以下10.05.28追記>

●漢字をだけ検索して、文字スタイル「newStyle2」を適用

//ここから下をコピー&ペーストしてサブルーチンに

function kanjikensaku(){

myFrame = app.selection[0]

// 選択中のTextFrameの行の集合を取り出す

myParagraphs = myFrame.paragraphs;

// 各行を処理対象に

for(j = 0; j < myParagraphs.length; j++)

{

// 選択中のTextFrameから1行テキストを取り出し

txtObj = myParagraphs.item(j).contents;

// 行末が改行だったら、処理対象行から改行を除く

// これにより、行末からのインデックスを使うと一つずれるので注意

if(escape(txtObj.substr(txtObj.length - 1, 1)) == "%0D")

{

txtObj = myParagraphs.item(j).contents.substr(0, txtObj.length - 1);

}

regexp = new RegExp(/[一-龠]/);

startPos = txtObj.search(regexp);

while (startPos != -1) {

//マッチした文字の数

matchStringLen = RegExp.lastMatch.length;

//マッチした文字列にスタイルを適用

myFrame.paragraphs.item(j).characters.itemByRange(startPos, startPos + matchStringLen - 1).appliedCharacterStyle = newStyle2;

// マッチした文字列に同じものがあるとindexOf()が機能しないので

// マッチした次の文字を検索開始位置にする

startPos = txtObj.search(regexp);

}

}

}