6 返信 最新の回答 日時: Mar 5, 2009 5:41 PM ユーザー:(クラッチ)

    scriptによるPDF書出しについてSING使用の場合

      ある仕事で単頁のPDFを書き出すことになり
      indesing CS3のファイルを2000ファイル(約4000頁分)いただきました。
      1ファイル毎に開いて単頁PDF書き出すのはめんどくさいので
      選択したフォルダー内にある全てのファイルに対して".indd"のファイル名を含むファイルを1つづつ開き、ファイル内にある頁を単頁でPDFに書きしファイル名に割り当てられている頁数を 入れて書き出すjavascriptを作ったのですが、SINGを使用している頁でたまにSINGの文字化けが発生していました。
      SINGの設定なども入念に調べてみたのですが、特に問題はなさそうなので、手作業でPDFを書き出すと文字化けが発生していないことを考えると
      どうもSING文字が表示されるまでのタイムラグにより
      文字化けが発生しているのだと思っています。
      そこで、タイムラグをなくす為に
      $.sleep(3000);を用いてデータを開いて3秒後にPDFを書き出すという
      のに作り替えてみました。
      しかし、それでもSINGの文字化けが発生しているので
      今はスクリプトの使用を止めて手作業で書出しを行っています。

      もしかして、$.sleep(3000)だとindesing側でSINGの読み込み自体もsleepしてしまってるのでしょうか??

      どうにかしてscriptを完成させて安心して使えるようにしたいのですが、タイムラグをなくす方法やよい知恵があれば
      ご指導いただきたいとおもいます。

      使用環境
      OS10.4 Indesign CS3
        • 1. Re: scriptによるPDF書出しについてSING使用の場合
          seuzo-oJiFme Level 1
          3秒だとまだ足りないかもしれません。

          この問題をちゃんと検証してはいませんが、
          app..updateFonts () ;
          を実行するとどうですか?
          あるいは、
          Document.recompose () ;//
          ではどうですか?

          検証結果をお聞かせ願えると助かります。
          よろしくお願いいたします。
          • 2. Re: scriptによるPDF書出しについてSING使用の場合
            Level 1
            ありがとうございます。
            どちらも、可能性があるような気がします。

            ただ、今のところSINGのタイムラグを克服できたと
            確証できる正しい方法かはわかりませんが

            タイムラグが発生するケースとして
            アプリケーションを起動してすぐのPDF書出しと
            SINGの親字Fontを起動してすぐのPDFの書出しを行ってみるつもりです。

            明日、明後日ごろには検証結果と
            検証による独自の推察を踏まえて
            報告させていただきます。
            • 3. Re: scriptによるPDF書出しについてSING使用の場合
              Level 1
              検証結果
              ===============================
              検証方法
              SINGの親字Fontを起動してinddファイルを開く
              この時におよそ8〜9秒程間ほどSINGが化けている
              状態が確認できるので、
              $.sleep、updateFonts ()、recompose ()
              を使用し、それぞれ単独でスクリプトパネルより
              実行させてみてでSINGが読込まれるかどうか調べる
              ===============================
              $.sleepを使用の場合
              とりあえず、$.sleep(30000);にてこの30秒の間に
              SINGが読込まれるか検証

              updateFonts ()を使用の場合
              updateFonts ()を実行後、処理が終了した時に
              アラートで終了を告げるように設定。
              タイムラグが発生している間にスクリプトを実行し
              終了アラートが表示される前に
              SINGが読込まれているか検証

              recompose ()を使用の場合
              recompose ()を実行後、処理が終了した時に
              アラートで終了を告げるように設定。
              タイムラグが発生している間にスクリプトを実行し
              終了アラートが表示される前に
              SINGが読込まれているか検証
              ===============================
              検証結果
              $.sleepを使用の場合
              30秒間SINGは文字化けのままでした。
              やはり、indesign側でのSINGの読込じたいが
              sleepしてしまっているようです。

              updateFonts ()、recompose ()の場合
              どちらも、無反応でした。
              終了アラートが表示された後も若干のタイムラグの後、
              SINGが表示される状態でした。
              この場合、updateFonts ()、recompose ()が
              indesign側でのSINGの読み込みに対して機能して
              いないのではと考えられます。
              ===============================
              以上のような結果になりました。

              それなりに作り込んで
              役立つscriptを作ったつもりでしたが、
              SINGによるタイムラグを克服できなければ
              このscriptもお蔵入りするしかなさそうですね
              残念。
              • 4. Re: scriptによるPDF書出しについてSING使用の場合
                seuzo-oJiFme Level 1
                詳細な検証ありがとうございました。<br />$.sleepがInDesignアプリケーションの動作そのものを抑制するのは、初めて知りました。<br /><br />役に立つかどうか分かりませんが、<br />SINGが使われているかどうかを調べるドロップレットを書きました。<br />SINGが使われいるものだけを手作業で、使われていなければスクリプトで、という切り分けになるかもしれません。<br /><br />スクリプトエディタから、「スクリプトバンドル」で保存してください。あとはドラッグ&ドロップして使います。<br /><br />on open of theFiles<br />     tell application "Finder"<br />          set my_counter to 0<br />          activate<br />          repeat with i in theFiles<br />               set my_file to (quoted form of POSIX path of contents of i) as Unicode text<br />               try<br />                    set exists_sing to do shell script "grep -ac '<ADOBE_BuildStamp>' " & my_file<br />                    if exists_sing is not "0" then<br />                         try<br />                              set label index of i to 2 --Redラベルを付ける<br />                              set my_counter to my_counter + 1<br />                         on error errMsg number errNum<br />                              display dialog "ラベル付けでエラーが発生しました。書き込み不可である可能性があります。" & return & errMsg & return & errNum<br />                         end try<br />                    end if<br />               on error errMsg number errNum<br />                    --なぜか終了ステータスで終わらない^^<br />               end try<br />          end repeat<br />          if my_counter is 0 then<br />               display dialog "SINGが使われているファイルは見つかりませんでした"<br />          else<br />               beep<br />               display dialog "SINGが使われている可能性のあるファイルが、" & my_counter & "ファイル見つかりました。" & return & "赤ラベルで印をつけました"<br />          end if<br />     end tell<br />end open
                • 5. Re: scriptによるPDF書出しについてSING使用の場合
                  Level 1
                  スクリプトありがとうございます。
                  こちらも駄作ですが、
                  問題のスクリプトを・・・・・
                  長すぎるので、2回にわけてます。
                  ダイアログでベースになる名前をつけられるように
                  しようとおもいましたが、今回は見送っています。
                  また、不具合として
                  セクションプレフィックスに何か文字が入っていて
                  プレフィックスを含むにチェックが入っていない状態でPDFを書出すと
                  1つのPDFファイルに全ページ含まれて
                  書出されます。
                  これも、問題を見て見ぬふりをしてしまいました。

                  これからも、何かありましたら、
                  お知恵を拝借させていただきたいとおもいますので、
                  よろしくお願いします。

                  P.S
                  たまに、ブログ見てますよ
                  ===============================
                  var folderObj= Folder.selectDialog ("フォルダーを選択してください");
                  var myList = app.pdfExportPresets;
                  if (myList.length ==1){
                  L0 = (myList[0].name);
                  TList = [L0];
                  select();
                  }else if(myList.length ==2){
                  L0 = (myList[0].name);
                  L1 = (myList[1].name);
                  TList = [L0,L1];
                  select();
                  }else if(myList.length ==3){
                  L0 = (myList[0].name);
                  L1 = (myList[1].name);
                  L2 = (myList[2].name);
                  TList = [L0,L1,L2];
                  select();
                  }else if(myList.length ==4){
                  L0 = (myList[0].name);
                  L1 = (myList[1].name);
                  L2 = (myList[2].name);
                  L3 = (myList[3].name);
                  TList = [L0,L1,L2,L3];
                  select();
                  }else if(myList.length ==5){
                  L0 = (myList[0].name);
                  L1 = (myList[1].name);
                  L2 = (myList[2].name);
                  L3 = (myList[3].name);
                  L4 = (myList[4].name);
                  TList = [L0,L1,L2,L3,L4];
                  select();
                  }else if(myList.length ==6){
                  L0 = (myList[0].name);
                  L1 = (myList[1].name);
                  L2 = (myList[2].name);
                  L3 = (myList[3].name);
                  L4 = (myList[4].name);
                  L5 = (myList[5].name);
                  TList = [L0,L1,L2,L3,L4,L5];
                  select();
                  }else if(myList.length ==7){
                  L0 = (myList[0].name);
                  L1 = (myList[1].name);
                  L2 = (myList[2].name);
                  L3 = (myList[3].name);
                  L4 = (myList[4].name);
                  L5 = (myList[5].name);
                  L6 = (myList[6].name);
                  TList = [L0,L1,L2,L3,L4,L5,L6];
                  select();
                  }else if(myList.length ==8){
                  L0 = (myList[0].name);
                  L1 = (myList[1].name);
                  L2 = (myList[2].name);
                  L3 = (myList[3].name);
                  L4 = (myList[4].name);
                  L5 = (myList[5].name);
                  L6 = (myList[6].name);
                  L7 = (myList[7].name);
                  TList = [L0,L1,L2,L3,L4,L5,L6,L7];
                  select();
                  }else if(myList.length ==9){
                  L0 = (myList[0].name);
                  L1 = (myList[1].name);
                  L2 = (myList[2].name);
                  L3 = (myList[3].name);
                  L4 = (myList[4].name);
                  L5 = (myList[5].name);
                  L6 = (myList[6].name);
                  L7 = (myList[7].name);
                  L8 = (myList[8].name);
                  TList = [L0,L1,L2,L3,L4,L5,L6,L7,L8];
                  select();
                  }else if(myList.length ==10){
                  L0 = (myList[0].name);
                  L1 = (myList[1].name);
                  L2 = (myList[2].name);
                  L3 = (myList[3].name);
                  L4 = (myList[4].name);
                  L5 = (myList[5].name);
                  L6 = (myList[6].name);
                  L7 = (myList[7].name);
                  L8 = (myList[8].name);
                  L9 = (myList[9].name);
                  TList = [L0,L1,L2,L3,L4,L5,L6,L7,L8,L9];
                  select();
                  }else if(myList.length >10){
                  alert ("定義ファイルが多過ぎです。10個以内にしてください。")
                  };

                  function select()
                  {wObj = app.dialogs.add({ name:"定義ファイルの選択" });
                  tmp1 = wObj.dialogColumns.add();
                  tmp2 = tmp1.dropdowns.add({stringList: TList, selectedIndex:0, minWidth:300});
                  hantei = wObj.show();
                  }
                  • 6. Re: scriptによるPDF書出しについてSING使用の場合
                    Level 1
                    if (hantei == true){<br />if (myList.length<=10){<br />     if (tmp2.selectedIndex==0){<br />     preset = (myList[0].name);<br />     }else if (tmp2.selectedIndex==1){<br />          preset = myList[1].name;<br />          }else if (tmp2.selectedIndex==2){<br />          preset = myList[2].name;<br />          }else if (tmp2.selectedIndex==3){<br />          preset = myList[3].name;<br />          }else if (tmp2.selectedIndex==4){<br />          preset = myList[4].name;<br />          }else if (tmp2.selectedIndex==5){<br />          preset = myList[5].name;<br />          }else if (tmp2.selectedIndex==6){<br />          preset = myList[6].name;<br />          }else if (tmp2.selectedIndex==7){<br />          preset = myList[7].name;<br />          }else if (tmp2.selectedIndex==8){<br />          preset = myList[8].name;<br />          }else if (tmp2.selectedIndex==9){<br />          preset = myList[9].name;<br />          };<br />     <br /><br />if(folderObj != null)<br />{<br />     var folderList = folderObj.getFiles ("*");<br />     for (var fcounter = 0 ; fcounter < folderList.length ; fcounter++)<br />     {<br />          if (!folderList[fcounter].getFiles)continue;<br />          set();<br />     }<br />};<br />};<br />alert ("PDFの書出し終了");<br />};<br /><br />function set()<br />{<br />     fileList=folderList[fcounter].getFiles("*.indd");<br />     for(counter=0; counter<fileList.length;  counter++)<br />     {<br />          fileObj=new File(fileList[counter].fsName);<br />          app.open(fileObj);<br />          myExportPages(fileList[counter])<br />          app.activeDocument.close(SaveOptions.no);//保存しないで閉じる<br />     }<br />}<br /><br />function myExportPages(){<br />     var myPageName, myFilePath, myFile;<br />     var myDocument = app.activeDocument;<br />     var myDocumentName = myDocument.name;<br />     var myBaseName = "";//ここではファイル名"¥¥¥¥_ノンブル.拡張子"¥¥¥¥に入る文字を指定する<br />     for(var myCounter = 0; myCounter < myDocument.pages.length; myCounter++){<br />          myPageName = myDocument.pages.item(myCounter).name;<br />          app.pdfExportPreferences.pageRange = myPageName;<br />          var myRegExp = new RegExp(":","gi");<br />          myPageName = myPageName.replace(myRegExp, "_");<br />          myFilePath = folderObj + "/" + myBaseName  + myPageName + ".pdf";<br />          myFile = new File(myFilePath);<br />          myDocument.exportFile(ExportFormat.pdfType, File(myFile), false,preset);<br />          }     <br />     }<br /><br />===============================