スクリプト関連は、ちょっと触ってなかったら、すぐに忘れてしまいますな。左脳のリハビリがてら、IndesignのテキストをXMLに関連付け(紐付け)させる練習をしてみました。
前回、「XHTML/Dreamweaverへのコンテンツの書き出し」について調べてみたけど、Indesignのコンテンツを元にXHTML化するというのは、ある意味「ワンソース・マルチユース」っぽいけど、Flashなどに読み込めないなど、用途に限界があります。
今後の展開を考えると、最終的にはXMLとしてコンテンツを書き出せたほうがベストですよね。
テキストフレームの関連付けサンプル(Indesign CS3)
まず、テキストフレームを新たに構造のXMLに関連付け。「xmlElements.add()」メソッドを使用。
「段落スタイル」を適用させるためには、あらかじめスタイルを作成しておく
////////////////////////////////////
//テキストフレームの関連付けの練習//
////////////////////////////////////
var myDoc = app.activeDocument;
var myPage = myDoc.pages.item(0);
var myRootXMLElement = myDoc.xmlElements.item("Root");
//テキストフレームに入れるテキスト
var myTxt = "TextFrame Sample"
//テキスト配置
var myTextFrame = myPage.textFrames.add();
myTextFrame.visibleBounds = ["98.5mm","55mm","141mm","155mm"];
myTextFrame.contents = myTxt;
//1番目の引数にタグ名、2番目の引数にテキストフレームのオブジェクト
myRootXMLElement.xmlElements.add("tfName",myTextFrame);
//段落スタイル適用(スタイルはあらかじめIndesignで作成しておく)
myTextFrame.paragraphs.item(0).appliedParagraphStyle = "段落スタイル 1";
任意のテキストが入ったテキストフレームが作成される
テキストフレームがXMLに関連付けされる
【メモ】
なお、XMLを読み込んで、そのXMLにテキストフレームの内容を関連付けさせる場合は、「markup()」メソッドを使用。
TextFrame.markup(XMLElement);
表組みの関連付けサンプル(Indesign CS3)
以前に作成した「Indesign CS3 JavaScriptで表組作成」をさらに発展させて、表の中のテキストをXMLに関連付けさせてみました。
表の関連付けは「convertElementToTable()」メソッドを使用。
「表スタイル」と「セルスタイル」を適用させるためには、あらかじめスタイルを作成しておく
//////////////////////////
//表組みの関連付けの練習//
//////////////////////////
var myDoc = app.activeDocument;
var myPage = myDoc.pages.item(0);
var myRootXMLElement = myDoc.xmlElements.item("Root");
//タグはあらかじめIndesginで作成しておいたものを参照(「xmlTags.itemByName()」)
//ちなみにタグを追加する場合は、「xmlTags.add()」
var myTableTag = myDoc.xmlTags.itemByName("table");
var myRowTag = myDoc.xmlTags.itemByName("row");
var myCellTag = myDoc.xmlTags.itemByName("cell");
//表に入れるテキストの配列作成
var txtArray = new Array();
txtArray[0] = ["1","2","3"];
txtArray[1] = ["4","5","6"];
txtArray[2] = ["7","8","9"];
//XML elementsの追加
var myTableXMLElement = myRootXMLElement.xmlElements.add(myTableTag);
for(var i = 0; i < 3; i++){
myTableXMLElement.xmlElements.add(myRowTag);
for(var j = 0; j < 3; j++){
myTableXMLElement.xmlElements[i].xmlElements.add(myCellTag);
myRootXMLElement.xmlElements.item(0).xmlElements[i].xmlElements[j].contents =txtArray[i][j];
myRootXMLElement.xmlElements.item(0).xmlElements[i].xmlElements[j].contents =txtArray[i][j];
myRootXMLElement.xmlElements.item(0).xmlElements[i].xmlElements[j].contents =txtArray[i][j];
}
}
//XML要素を表に変換して関連付ける
var myTable = myTableXMLElement.convertElementToTable(myRowTag, myCellTag);
//テキスト配置
var myTextFrame =myPage.textFrames.add();
myTextFrame.visibleBounds = ["98.5mm","55mm","198.5mm","155mm"];
var myStory = myTextFrame.parentStory;
myStory.placeXML(myRootXMLElement);
//表・セルスタイル適用(スタイルはあらかじめIndesignで作成しておく)
myTable.appliedTableStyle = "表スタイル 1";
with(myTable){
for(var k = 0; k < 3; k++){
//セルの幅と高さ
rows[k].width = "33mm";
rows[k].height = "33mm";
//セルスタイル適用
rows[0].cells[k].appliedCellStyle = "セルスタイル 1";
rows[1].cells[k].appliedCellStyle = "セルスタイル 1";
rows[2].cells[k].appliedCellStyle = "セルスタイル 1";
}
}
表組みが作成される
表の中のテキストがXMLに関連付けされる
表組みの関連付けは、ググってもほとんど作例記事がなかったので、ちょっと苦労しました。約二日間、「InDesign CS3 スクリプティング ガイド JS」とにらめっこ。もっと論理的な発想ができる脳みそが欲しいな。
なお、表組みに関しては、読み込んだXMLに直接関連付けさせるのは難しいっぽい。新たに書き出し用のXMLを自動作成して関連付けさせるのがベターかもしれないっす。
通りがかりの偉い方、ご存じでしたらアドバイスお願いします!




![商用OK・加工OKの無料画像素材集[KOYU写]](http://www.kys-lab.com/common_files/img/banner/kys_photo_banner_120x90.gif)



コメントする