060.【Ai】PDFを複製保存→上書きして閉じる
挙動
- aiデータを開いた状態でIllustratorのファイルメニューから実行する
- PDF書き出しプリセットを選択する
- aiとpdfの更新時間を一致させるため、1番目のレイヤーのロックを切り替えて元に戻す
- pdfを書き出す
- aiを上書き保存する
コード
//@targetengine saveAsPDFandAI //ESTKから実行する場合、1行目をコメントアウトする (function() { if (app.documents.length ===0) { alert("開いているドキュメントがないため中断します"); return; } var doc = app.activeDocument; var dialog = new Window("dialog", "プリセットを選択してください"); var dropdown1 = dialog.add("dropdownlist", undefined, getPresest()); var button1 = dialog.add("button", undefined, "実行"); button1.onClick = function() { dialog.close(1); } var dlgResult = dialog.show(); if (dlgResult !== 1) { alert("中断します"); return; } var n = doc.fullName.toString().replace(/ai$/, "pdf"); var p = dropdown1.selection; var tmp = doc.layers[0].locked; if (doc.layers[0].locked) { //aiとpdfの更新時間を一致させる目的で上書き保存するため doc.layers[0].locked = false; doc.layers[0].locked = true; } else { doc.layers[0].locked = true; doc.layers[0].locked = false; } savePDF(doc, n, p); app.activeDocument.close(SaveOptions.SAVECHANGES); function savePDF(docObj, newfilepath, preset) { var fileObj = new File(newfilepath); var saveOpts = new PDFSaveOptions(); saveOpts.pDFPreset = preset; saveOpts.viewAfterSaving = false; docObj.saveAs(fileObj, saveOpts); } function getPresest() { var presets = app.PDFPresetsList; var presetsArr = []; for (var i = 0; i < presets.length; i++) { presetsArr.push(presets[i]); } return presetsArr; } }());
メモ
分かったこと
ESTKからAiをスクリプト制御するとき、targetengineを指定できない。
viewAfterSavingのデフォルトはfalseだが、これはアプリケーションを起動した状態での値がfalseということ(?)。
手動で「保存後に表示」にチェックを入れて複製保存したあとのviewAfterSavingの値はtrueになる。
つまりこの状態でviewAfterSavingを設定せず複製保存すると、書き出されたPDFが表示されてしまう。
参考
- IllustratorスクリプトとInDesignスクリプトの違い|ExtendScript|ぼんぷろぐ
めちゃくちゃ大事なことがいっぱい書いてある - Adobe Illustrator CC 2015 Scripting Reference: JavaScript
ページのタイトルは2015だが中身は2017