3 返信 最新の回答 日時: Oct 5, 2009 2:05 AM ユーザー:マコト01

    リンクの自動修復

    マコト01

      InDesign CS3を使用しています。

      1000以上あるファイルすべてリンクが外れた状態(△に!マークが入っているアイコン表示)になっているため、

      リンクの自動修復をJavascriptを使ってリンク更新+リンクファイルのチェックを行うべく以下のソースを書きました。

       

      var fileObj = File.openDialog("開くファイルを指定してください。","InDesign:*.indd");
      app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;
      app.open(fileObj);
      app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;
      var imgObj = app.activeDocument.allGraphics;
      var fList = "";
      var CR = String.fromCharCode(13);
      for(i=0; i<imgObj.length; i++){
          var filename = imgObj[i].itemLink.name;
          app.activeDocument.links[i].update(filename);
      }
      alert(File.decode(fileObj.name) + CR + "がリンクしているファイルは" + CR + CR + fList + CR + "の" + [i] + "点です。");

       

      上記スクリプトを実行したところ途中まではリンクが更新されていくのですが、

      複数回繰り返したところでvar filename = imgObj[i].itemLink.name;の箇所にマーカーがひかれて「オブジェクトが無効です」で動作がストップしてしまいます。

       

      どこに問題があるのかわからないのでご助言をいただきたく書き込ませていただきました。

       

      もしくは、InDesignを開いた際に「リンクの更新」に関するアラートが出た際に、

      「リンクを自動修復」を選択させる方法があればご教授いただけますでしょうか。

       

      よろしくお願いいたします。

        • 1. Re: リンクの自動修復
          DTPToolBox

          遅いレスになります。

          私も同じ経験をしました。

          一度に処理できる個数の上限があるようです。

          おそらく256個。

          ですから、2重ループにして、200個ずつ処理するといいようです。

           

           

           

           

          1 人が役に立つと言っています
          • 2. Re: リンクの自動修復
            seuzo-oJiFme Level 1

            1080枚のリンク画像に対して追試してみました。

            まず、マコト01さんが失敗しているのは、

            app.activeDocument.links[i].update(filename);

            の行です。forで回しているのは、GraphicオブジェクトのカウントであってLinkオブジェクトのそれではありません。

            単に、すべてのリンクをアップデートしたいだけなら、こう書けます。

             

             

             

            var my_doc = app.activeDocument;
            var my_image = my_doc.allGraphics;
            
            for (var i = 0; i< my_image.length; i++) {
                      my_image[i].itemLink.update();
             }
            

             

             

            MIKIO TANIGAWAさんがおっしゃっているのは、おそらくVBのFor Each...Next ループやASのrepeat with i in lists ループだと思います。つまり、256個の制限はInDesignではなく、言語による制限なんではないかと...

            http://adobe.find-answers.net/topic/what-does-mystoryallgraphics-return

            http://forums.adobe.com/thread/410200

            #上記リンクはid:chalcedony_htnさんのはてなブックマークコメントで教えていただきました。ありがとうございます。

            tell application "Adobe InDesign CS3"
                 tell document 1
                      repeat with i in all graphics
                           update item link of i
                      end repeat
                 end tell
            end tell
            
            

             

            テストではたまたまうまくいってしまったんですが(もしかしたら、AS2.0のタイミングで直っているのかもしれません。)...^^ ASユーザーはこのループが信用できないのを経験的に知っています。

            • 3. Re: リンクの自動修復
              マコト01 Level 1

              seuzo様

               

              遅くなりまして申し訳ございません。

              投稿していたのを忘れておりました。

               

              おかげさまで無事スクリプトの問題が解決しました。

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