コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

046 補遺.【ID】フォルダ内全indt書き出し

修正①

バックグラウンド処理を待つメソッドwaitForTask()を使用。

//@targetengine 'session'
var preset = app.pdfExportPresets.itemByName("[PDF/X-4:2008 (日本)]");
var folderObj = Folder.selectDialog("フォルダを選択してください");
if (folderObj) {
  var fileList = folderObj.getFiles("*.indt");
} else {
  alert("キャンセルしました");
  exit();
}

for (var i = 0; i < fileList.length; i++) {
  var fileObj = new File(fileList[i].fsName);
  var doc = app.open(File(fileObj));
  app.pdfExportPreferences.pageRange = PageRange.allPages;
  app.pdfExportPreferences.viewPDF = false;
  doc.asynchronousExportFile(ExportFormat.pdfType, File(fileObj.fsName.replace(".indt", ".pdf")), false, preset).waitForTask();
  doc.close(SaveOptions.NO);
};
alert("処理終了しました");

修正②

afterExportイベントリスナーの親を個々のドキュメントにした。
※未完成?たまに全部閉じてくれないときがある。

//@targetengine 'session'
(function(){
  var preset = app.pdfExportPresets.itemByName("[PDF/X-4:2008 (日本)]");
var folderObj = Folder.selectDialog("フォルダを選択してください");
if (folderObj) {
  var fileList = folderObj.getFiles("*.indt");
} else {
  alert("キャンセルしました");
  exit();
}

for (var i = 0; i < fileList.length; i++) {
  var fileObj = new File(fileList[i].fsName);
  var doc = app.open(File(fileObj));
  var myListener = doc.eventListeners.itemByName("closeAfterExport");
  if (myListener.isValid) {
    myListener.remove();
  }
  doc.addEventListener("afterExport", function (ev1) {
    var task = app.idleTasks.add({
      name: "waitExport",
      sleep: 10
    });
    var listener = task.addEventListener(IdleEvent.ON_IDLE, function (ev2) {
      $.writeln("ev1parentは" + ev1.parent.id)
      ev1.parent.close(SaveOptions.NO);
      listener.remove();
      task.remove();
    });
  }).name = "closeAfterExport";

  app.pdfExportPreferences.pageRange = PageRange.allPages;
  app.pdfExportPreferences.viewPDF = false;
  doc.asynchronousExportFile(ExportFormat.pdfType, File(fileObj.fsName.replace(".indt", ".pdf")), false, preset)
};
//~ alert("処理終了しました");
})();

参考

修正②については、twitterでアドバイスをいただきました。

ありがとうございました😭