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でアドバイスをいただきました。
これ実際書き出しが行われてるのは"処理終了しました"のアラートが出た後なのでは?
— あるふぁ(仮) (@peprintenpa) 2019年8月29日
・afterExportが呼ばれるのは"処理終了しました"の後かもしれないのにその前にmyListenerを削除してる
— あるふぁ(仮) (@peprintenpa) 2019年8月29日
・どの書き出しが最初に終わるかわからないのにactiveDocumentを閉じようとしてる
あたりが問題な気がします
afterExportのイベントリスナをappじゃなく個々のドキュメントに付けてやるといいかも。閉じれば消さなくていいし
— あるふぁ(仮) (@peprintenpa) 2019年8月29日
ありがとうございました😭