Skip to main content
hajime_saito
Participant
November 28, 2016
Answered

xmlを読み込んで出来たテキストフレームを書き出し

  • November 28, 2016
  • 1 reply
  • 987 views

先日お世話になったgennと申します。

環境は、InDesignCS6,osx10.9.5です。

indesignファイルの中に複数のテキストフレームがあり、一個だけxml読み込みをしたテキストフレームです。

javascriptを使ってこのテキストフレームをテキストファイルとして書き出そうとしたいのですが

textframes.itemsの番号が一定ではないので、「xml読み込みをしたテキストフレーム」を特定しなければいけません。

app.activeDocument.xmlElements.item(0).remove();というxml要素を削除する文法は見つけました。

単純にapp.activeDocument.xmlElements.item(0).exportFile(ExportFormat.textType, ファイル名,false);

とやってみましたがエラーになります。

ご教示のほど、お願いします。

    This topic has been closed for replies.
    Correct answer ryusei_kouki

    exportFileメソッドのparent(親)が何かによって、動作可能かどうかということでエラーになっているものと思われます。

    アプローチは異なりますが、xml要素が割当されているテキストフレームのテキスト書き出しについてのソースコードを書いてみました。

    (複数あるとファイルが上書きされますので、お手元のソースコードに活かせる部分流用してください)

    #target indesign

    var file=File(Folder.desktop+"/test.txt");

    var pgItm=app.activeDocument.pageItems;

    for(var i=0;i<pgItm.length;i++){

        if(pgItm.associatedXMLElement!=null){

            pgItm.texts[0].exportFile(ExportFormat.TEXT_TYPE, file, false);

        }

    }

    1 reply

    ryusei_koukiCorrect answer
    Participating Frequently
    January 11, 2017

    exportFileメソッドのparent(親)が何かによって、動作可能かどうかということでエラーになっているものと思われます。

    アプローチは異なりますが、xml要素が割当されているテキストフレームのテキスト書き出しについてのソースコードを書いてみました。

    (複数あるとファイルが上書きされますので、お手元のソースコードに活かせる部分流用してください)

    #target indesign

    var file=File(Folder.desktop+"/test.txt");

    var pgItm=app.activeDocument.pageItems;

    for(var i=0;i<pgItm.length;i++){

        if(pgItm.associatedXMLElement!=null){

            pgItm.texts[0].exportFile(ExportFormat.TEXT_TYPE, file, false);

        }

    }

    hajime_saito
    Participant
    January 15, 2017

    ありがとうございます。

    レスがつかないのであきらめていました。

    実は、独力で曲がりなりに解決はしていました。

    非常に泥臭いとは思いますが。

    var docObj = app.activeDocument;

    var root = docObj.xmlElements.item(0);  //xmlから読み込んで作られたxml要素

    var myTextFrame = root.contents;     //xml要素の内容  

    txtObj = docObj.textFrames.add();   //テキストフレームを新たに作成

    txtObj.visibleBounds = ["4cm","5cm","8cm","10cm"]; //テキストフレームの位置と大きさ。意味は無い。

    txtObj.contents = myTextFrame;        //テキストフレームにxml要素の内容を流し込む

    //テキストフレームをテキストファイルの形式で書き出す

        eframe=docObj.textFrames.item(0)

        eframe.parentStory.exportFile(ExportFormat.textType, File,false);

    app.activeDocument.close(SaveOptions.no); //開いたドキュメントを保存せず閉じる

    教えていただいたコードの方が簡潔で誤動作の心配がないですね。

    私の作ったのは、InDesignファイルの作り方を統一しないといけません。

    例:マスターページにはオブジェクトを置かない。全ファイルのレイヤー名を共通にする。

    eframe=docObj.textFrames.item(0)が予期しない内容になります。

    勉強になりました。