Indesign「JavaScriptで表組作成」(XMLの関連付け編)

February 26, 2010
indesign_tablemain.gif

スクリプト関連は、ちょっと触ってなかったら、すぐに忘れてしまいますな。左脳のリハビリがてら、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を自動作成して関連付けさせるのがベターかもしれないっす。

通りがかりの偉い方、ご存じでしたらアドバイスお願いします!

関連記事

トラックバック(0)

コメントする


画像の中に見える文字を入力してください。

PageTop