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を調べてみるととっかかりが掴めるかもしれない。
参考
- [JS][CS4/CS5] Images dropping off in scripted pdf export | Adobe Community
- Images missing when export pdf | Adobe Community
- Close document after background export to PDF | Adobe Community
- eventListenerを利用してIndesignの挙動を変える - 手抜きLab@DTPの現場
- アプリケーション自動化総合コミュニティフォーラム (Japan): [ID] idleTaskの一例 | Adobe Community
- eventListeners for backgroundTasks? | Adobe Community