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);
}
}
}