Monday, July 12, 2010 / InDesign, DTP

ExtendScript 自前の相互参照の作成その2 ... 相互参照元データを作成する

自前の相互参照の作成その1では、 自前の相互参照を作成したので、 今度は相互参照されるソースを作成する。

ここでは話を簡単にするために、相互参照ソースは…

  • 必ず xref_src.indd というファイル内にあることにする
  • ひとつのテキストフレームの中の段落全部が総合参照ソース
  • 相互参照IDはスクリプトラベルに設定

というローカルルールにする。

相互参照ソース入りind文書の作成 xref_src.indd

相互参照IDは "あなたの選んだ動物" なので、これをスクリプトラベルに設定した テキストフレームを作成し、テキストフレームの中に「猫」とテキストを入れておく。

相互参照IDから相互参照ソースをタグ付きテキストとして書き出す exportXrefSrc.jsx

相互参照ソースデータは /Users/foo/xref_src.indd にあり 該当する相互参照IDをスクリプトラベルに持ったテキストフレームのストリーを /Users/foo/_tmp.txt に書き出す。

//
// 指定したIDをスクリプトラベルに持つTextFrameのストリーをタグ付きテキストとして書き出す
// InDesign CS5
//

var HOME_DIR = "/Users/foo";

function getTf( doc, xref_id ){
    var r = null;
    for( var i=0; i<doc.textFrames.length; i++ ){
        var tf = doc.textFrames.item(i);
        if( tf.label ){
            //alert( tf.label );
            if( xref_id == tf.label ){
                r = tf;
            }
        }
    }
    return r;
}

function open(){
    var file = File(HOME_DIR+"/xref_src.indd");
    app.open( file );
    return app.activeDocument;
}
function close(doc){
    doc.close(SaveOptions.NO);
}


var doc = open();
var tf = getTf( doc, "あなたの選んだ動物" );
if( tf && tf.paragraphs.length>0){
    var outputfile = new File(HOME_DIR+"/tagged_text.txt");

    var myStory = tf.paragraphs.item(0).parentStory;
    myStory.exportFile(ExportFormat.taggedText,outputfile,false);
}

close(doc);