8 返信 最新の回答 日時: Jun 18, 2013 2:04 AM ユーザー:jamus1c

    java script‐「GetTrackchange」について

    jamus1c

      お世話になります。

      現在Win7にてInDesign CS5.5 を使用しております。

       

       

      「GetTrackchange」というスクリプトを

      adobeの公式スクリプティングガイドから見つけ出しました。

      http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/indesign/cs55-docs/In DesignScripting/InDesign-ScriptingGuide-JS-JP.pdf

      このガイドの212ページ目のスクリプトです。

       

      そのページの指示通り、

      アーカイブからダウンロードした完全版スクリプトは、

      最下部の通りです。 

       

      このガイドによると下記のスクリプトにより、

      「トラックされた変更点に順次移動できる」ということです。

       

      さっそくこのスクリプトを実行すると、

      新らしくInDesignドキュメントが作成され、

      「This is a story.」の文字が入ったボックスが作成されます。

      何度実行してもこの操作が繰り返され、

      「既存のドキュメント内で、順次変更点に飛ぶこと」ができません。

       

      確かに記述でそのように書かれていそうですが、

      その部分を消去したり、真ん中のnextItem関連のブロックだけ残して実行しても、うまくいきません。

       

       

       

       

      adobeの窓口にも問い合わせましたが、

      スクリプト開発がアメリカのためらしく、

      有力な情報はいただけませんでした。

       

      Java scriptについては初心者でして、

      ここで質問させていただくことにずっと躊躇しておりました。

       

      しかしadobeの公式スクリプティングガイドのスクリプトであること、

      Web情報を一定期間念入りに調べてもまったく情報が得られないこと、

      adobeへの問い合わせでも有力情報が得られなかったこと、

      以上を踏まえましても、解決にいたらなかったため、

      恐縮ながら、こちらで質問させていただくことにいたしました。

       

       

      私が希望する動作が可能なようでしたら、

      皆さんのお力をお貸しいただけると嬉しいです。

       

       

      ※2行目にInCopyの記述がありますが、

      InDesign上のアーカイブからダウンロードしております。

       

      _________________________

       

      実際のスクリプト

       

       

      //GetTrackchange.jsx
      //An InCopy CS5 JavaScript
      //
      //Shows how to get Track change from doc.
      main();
      function main(){
      mySetup();
      mySnippet();
      myTeardown();
      }
      function mySetup(){
      }
      function mySnippet(){
      var myDocument = app.documents.add();
          var myTextFrame = myDocument.textFrames.add({geometricBounds: [0, 0, 12, 12], contents: "This is a story."});
      myGetChangeFromDoc();
      }
      function myTeardown(){
      }
      function myGetChangeFromDoc()
      {
          //<fragment>
      var myDocument = app.documents.item(0);
      var myStory = myDocument.stories.item(0);
      //Story.trackChanges   If true, track changes is turned on.
      if(myStory.trackChanges==true)
      {
        var myChangeCount = myStory.changes.length;
        var myChange = myStory.changes.item(0);
        if(myChangeCount>1)
        {
         var myChange0 = myStory.changes.nextItem(myChange);
        }
      }
          //</fragment>
      }

      function myGetChangeFromDoc1()
      {
      var myDocument = app.documents.item(0);
      var myStory = myDocument.stories.item(0);
      //Story.trackChanges   If true, track changes is turned on.
      if(myStory.trackChanges==true)
      {
        var myChangeCount = myStory.changes.length;
        var myChange = myStory.changes.lastItem();
        if(myChangeCount>1)
        {
         var myChange0 = myStory.changes.previousItem(myChange);
        }
      }
      }

       

      _____________________________

       

       

      なにとぞ、よろしくお願いいたします。

        • 1. Re: java script‐「GetTrackchange」について
          Erferfe

          これでどうでしょうか。

           

          #target indesign
          #targetengine "session"
          
          function getChangedStories(document) {
              var changedStories = [];
              var stories = document.stories;
              for (var i = 0, length = stories.length; i < length; i++) {
                  var story = stories[i];
                  if (story.trackChanges && story.changes.length > 1) {
                      changedStories.push(story);
                  }
              }
              return changedStories;
          }
          
          function selectChangeItem (story, zoom) {
              var change = story.changes.lastItem();
              app.activeWindow.activePage = change.storyOffset.parentTextFrames[0].parentPage;
              app.activeDocument.select(change.storyOffset);
              if (zoom) app.activeWindow.zoomPercentage = parseInt(zoom.replace("%", ""));
          }
          
          (function () {
              var stories = getChangedStories(app.activeDocument);
              if (stories.length === 0) {
                  alert("変更が見つかりません");
                  return;
              }
              var index = -1;
              window = new Window("window", "");
              stext = window.add("StaticText", [0, 0, 100, 20], "");
              stext.justify = "center";
              var group1 = window.add("Group");
              group1.orientation = "row";
              var prevButton = group1.add("Button", undefined, "前の変更箇所");
              var nextButton = group1.add("Button", undefined, "次の変更箇所");
              var group2 = window.add("Group");
              group2.orientation = "row";
              var zoomCheck = group2.add("CheckBox", undefined, "ズーム表示");
              var zoomList = group2.add("DropDownList", [0, 0, 100, 20]);
              zoomList.enabled = false;
              zoomList.add("item", "50%");
              zoomList.add("item", "100%");
              zoomList.add("item", "200%");
              zoomList.add("item", "500%");
              zoomList.selection = 3;
              zoomCheck.onClick = function () {
                  if (zoomCheck.value) zoomList.enabled = true;
                  else zoomList.enabled = false;
              };
              prevButton.onClick = function () {
                  index -= 1;
                  if (index === -1 || index < 0) index = stories.length - 1;
                  stext.text = (index + 1) + " / " + stories.length;
                  var zoom = (zoomCheck.value) ? zoomList.selection.text : false;
                  selectChangeItem(stories[index], zoom);
              };
              nextButton.onClick = function () {
                  index += 1;
                  if (index === -1 || index >= stories.length) index = 0;
                  stext.text = (index + 1) + " / " + stories.length;
                  var zoom = (zoomCheck.value) ? zoomList.selection.text : false;
                  selectChangeItem(stories[index], zoom);
              };
              window.show();
          }());
          
          • 2. Re: java script‐「GetTrackchange」について
            jamus1c Level 1

            Erferfeさん

             

            返信ありがとうございます。

            お返事がいただけて、とってもうれしいです!

             

             

            ストーリーエディタ上で変更点が記録されていることを確認してから、

            ErferfeさんのJava scriptを実行させていただきました。

             

            すると、変更点はありません のメッセージが出てしまいました。

            ストーリーエディタ上またはドキュメントのテキストボックス内にカーソルを置き、

            実行してみても 変更点はありません となりました。

            私の使用方法が誤っているのでしょうか…。

             

             

            もし何か原因や対策があるようでしたら、

            再度アドバイスなど頂けると幸いです。

             

             

            お手数ですが、よろしくお願いします。

             

            わざわざ私の為に貴重な時間を割いていただき、

            スクリプトをご提供くださり、

            心より感謝しております。

             

            本当にありがとうございます!

            • 3. Re: java script‐「GetTrackchange」について
              Erferfe Level 1

              9行目

               

                     if (story.trackChanges && story.changes.length > 1) {
              

               

               

                     if (story.trackChanges && story.changes.length > 0) {
              

               

              に変更してみてください。

              使用方法はあっています。現在アクティブなドキュメントに対して処理をするのでテキストボックス等を選択しておく必要はありません。

              • 4. Re: java script‐「GetTrackchange」について
                jamus1c Level 1

                Erferfeさん

                 

                再びアドバイス頂きまして、ありがとうございます!

                使用方法は誤っていなかったみたいで、一安心です。

                 

                スクリプトの方を修正し、再実行しましたが、

                同じ結果となってしまいます…。

                 

                ちなみに、スクリプト上でエラーは何もなく、

                正常動作しております。

                 

                 

                もし可能でございましたら、

                引き続きよろしくお願いいたします。

                • 5. Re: java script‐「GetTrackchange」について
                  Erferfe Level 1

                  同じ行を

                   

                          if (story.changes.length > 0) {
                  

                   

                  ではどうですか。

                  これは「変更をトラック」を現在有効にしていない場合でも対象とする為の変更です。

                  • 6. Re: java script‐「GetTrackchange」について
                    jamus1c Level 1

                    Erferfeさん

                     

                    お世話になります!

                    Erferfeさん、大変申し訳ございません。

                     

                    本日さっそく試用させていただき、

                     

                    >これは「変更をトラック」を現在有効にしていない場合でも対象とする為の変更です。

                     

                    とのご指摘を受け、ドキッといたしました。

                     

                    私が試用していたドキュメントは、表組しかないファイルでした。

                     

                    そこで、テキストボックス内の変更点があるファイルで試用いたしましたところ、

                    最初にご提示いただいたスクリプトでも、

                    私の理想とするドキュメントビュー上での変更点移動をしてくれました!

                    本当に感動です…。重ね重ね、ありがとうございます。

                     

                     

                    ストーリーエディタ上では表組中の変更点にも移動できますが、

                    今回のJavascriptでも同様に、

                    表組の中の変更点にも移動することは可能でしょうか。

                    表組とテキストボックスの変更点が混在してても、

                    両者に順番に移動することなど、不可能なことでしょうか。

                     

                    もし可能でしたら、その点だけもう一度ご教授いただけますと幸いです。

                    • 7. Re: java script‐「GetTrackchange」について
                      Erferfe Level 1

                      これでどうでしょうか。

                       

                      #target indesign
                      #targetengine "session"
                      
                      (function () {
                          function getChanges (stories) {
                              var changes = [];
                              for (var i = 0, storiesLength = stories.length; i < storiesLength; i++) {
                                  var story = stories[i];
                                  Array.prototype.push.apply(changes, story.changes);
                                  var tables = story.tables;
                                  for (var j = 0, tablesLength = tables.length; j < tablesLength; j ++) {
                                      Array.prototype.push.apply(changes, tables[j].changes);
                                  }
                              }
                              return changes;
                          }
                          function selectItem (item, activePage, zoom) {
                              app.activeDocument.select(item);
                              if (activePage) app.activeWindow.activePage = activePage;
                              if (zoom) app.activeWindow.zoomPercentage = zoom;
                          }
                          (function () {
                              var changes = getChanges(app.activeDocument.stories);
                              if (changes.length === 0) {
                                  alert("変更が見つかりません");
                                  return;
                              }
                              var index = -1;
                              window = new Window("window", "");
                              stext = window.add("StaticText", [0, 0, 100, 20], "");
                              stext.justify = "center";
                              var group1 = window.add("Group");
                              group1.orientation = "row";
                              var prevButton = group1.add("Button", undefined, "前の変更箇所");
                              var nextButton = group1.add("Button", undefined, "次の変更箇所");
                              var group2 = window.add("Group");
                              group2.orientation = "row";
                              var zoomCheck = group2.add("CheckBox", undefined, "ズーム表示");
                              var zoomList = group2.add("DropDownList", [0, 0, 100, 20]);
                              zoomList.enabled = false;
                              zoomList.add("item", "50%");
                              zoomList.add("item", "100%");
                              zoomList.add("item", "200%");
                              zoomList.add("item", "500%");
                              zoomList.selection = 3;
                              zoomCheck.onClick = function () {
                                  if (zoomCheck.value) zoomList.enabled = true;
                                  else zoomList.enabled = false;
                              };
                              var select = function (index) {
                                  stext.text = (index + 1) + " / " + changes.length;
                                  var zoom = (zoomCheck.value) ? parseInt(zoomList.selection.text.replace("%", "")) : false;
                                  var change = changes[index];
                                  selectItem(change.storyOffset, change.storyOffset.parentTextFrames[0].parentPage, zoom);
                              };
                              prevButton.onClick = function () {
                                  index -= 1;
                                  if (index === -1 || index < 0) index = changes.length - 1;
                                  select(index);
                              };
                              nextButton.onClick = function () {
                                  index += 1;
                                  if (index === -1 || index >= changes.length) index = 0;
                                  select(index);
                              };
                              window.show();
                          }());
                      }());
                      
                      • 8. Re: java script‐「GetTrackchange」について
                        jamus1c Level 1

                        Erferfeさん

                         

                        毎回お付き合いくださって、ありがとうございます。

                        先ほど上述のスクリプトをさっそく実行いたしました。

                         

                        私が求めていたものズバリです。

                        テーブルにも、テキストボックスにも、

                        選択反転されて表示されるようにもなっていて…。

                         

                        ほぼ、一からの構築に近いにも関わらず、

                        ご丁寧に何度も、本当に感謝いたします。

                         

                        これで長い間目指していた、

                        ドキュメントビュー上での変更点への移動が、

                        現実のものとなりました。

                        早速、控えている案件の時に使わせていただきます!

                         

                        今回はErferfeさんに頼り切りになってしまい、

                        貴重なお時間を割いていただき、

                        誠にありがとうございました。

                         

                        このスクリプト、ずっと大事にしていきます。