コモノExtendScript100本ノック

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

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

※未完成

書いたコード

//@targetengine 'session'
var myListener = app.eventListeners.itemByName("closeAfterExport");
if (myListener.isValid) {
  myListener.remove();
}
app.addEventListener("afterExport", function (ev1) {
  var task = app.idleTasks.add({
    name: "waitExport",
    sleep: 1000
  });
  var listener = task.addEventListener(IdleEvent.ON_IDLE, function (ev2) {
    listener.remove();
    task.remove();
    app.activeDocument.close(SaveOptions.NO);
  });
}).name = "closeAfterExport";
var folderObj = Folder.selectDialog("フォルダを選択してください");
if (folderObj) {
  var fileList = folderObj.getFiles("*.indt");
} else {
  alert("キャンセルしました");
  exit();
}
var preset = app.pdfExportPresets.itemByName("[PDF/X-4:2008 (日本)]");
for (var i = 0; i < fileList.length; i++) {
  var fileObj = new File(fileList[i].fsName);
  app.open(File(fileObj));
  app.pdfExportPreferences.pageRange = PageRange.allPages;
  app.pdfExportPreferences.viewPDF = false;
  app.activeDocument.asynchronousExportFile(ExportFormat.pdfType, File(fileObj.fsName.replace(".indt", ".pdf")), false, preset)
  //~   app.activeDocument.close(SaveOptions.no);
};
var myListener = app.eventListeners.itemByName("closeAfterExport");
if (myListener.isValid) {
  myListener.remove();
}
alert("処理終了しました");

メモ

経緯

環境はWindows10 64bit InDesign CC2019(14.0.2)
①exportFileでPDFを書き出すと、リンク画像が消えることがたびたびあった
(参考:https://forums.adobe.com/message/3876223
②exportFileの代わりにasynchronousExportFileを使用してみた
(参考:https://forums.adobe.com/thread/2224213
③上記の問題は解決したようだったが、ドキュメントを閉じる時点で止まる。エラーメッセージは「この操作はユーザーによってキャンセルされました」
③書き出し中に閉じようとしたせいだと考え、書き出しが終わってから閉じるようにイベントリスナーを設定した
(参考:https://forums.adobe.com/thread/945564
④書き出しはされるが閉じずに処理が完了してしまう。バックグラウンド処理がイベントリスナーで拾えない?
(参考:https://forums.adobe.com/thread/801778

当初のexprtFile版のコードは以下の通り。

var folderObj = Folder.selectDialog("フォルダを選択してください");
if (folderObj) {
  var fileList = folderObj.getFiles("*.indt");
} else {
  alert("キャンセルしました");
  exit();
}
var preset = app.pdfExportPresets.itemByName("[PDF/X-4:2008 (日本)]");
for (var i = 0; i w< fileList.length; i++) {
  var fileObj = new File(fileList[i].fsName);
  app.open(File(fileObj));
  app.pdfExportPreferences.pageRange = PageRange.allPages;
  app.pdfExportPreferences.viewPDF = false;
  app.activeDocument.exportFile(ExportFormat.pdfType, File(fileObj.fsName.replace(".indt", ".pdf")), false, preset)
  app.activeDocument.close(SaveOptions.no);
};
alert("処理終了しました");

積み残し

画像が飛ぶかどうか規則性が見つからず、原因が特定できていない。asynchronousExportFileなら本当に大丈夫なのかどうかも分からない。
対象のindtがCS3時代からバージョンアップを重ねてきた年代物なので、そこも怪しい気もする。
asynchronousExportFileでやるのであればbackgroundTasksのEventListenerを調べてみるととっかかりが掴めるかもしれない。

参考