2 返信 最新の回答 日時: Jan 14, 2017 11:32 PM ユーザー:hajime_saito

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

    hajime_saito Level 1

      先日お世話になった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);

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

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

        • 1. Re: xmlを読み込んで出来たテキストフレームを書き出し
          ryusei kouki Level 3

          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[i].associatedXMLElement!=null){

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

              }

          }

          • 2. Re: xmlを読み込んで出来たテキストフレームを書き出し
            hajime_saito Level 1

            ありがとうございます。

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

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

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

             

            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)が予期しない内容になります。

             

            勉強になりました。