PDF書き出し
結局なにをしたかったかと言うと、特定のフォルダのインデザインファイルのPDF書き出しの自動化。
フォントチェックとリンクチェックをしてから書き出し。
OSX10.4 CS3
メインスクリプト
#include "~/Library/IddJavascript/spaceiru.jsx" ////////////////////// ////PDF書き出しのプリセット名の指定があったら書く。指定がない場合は空にする。 var pdfPreSetName = '[プレス品質]'; ///////////////////// ////ファイルオープン時に警告ダイアログを出さない。 app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT; if(spaceiru.system.selectFolder('インデザインフォルダ')== false){ alert('ユーザーによってキャンセルされました。'); exit(); } ////選択フォルダ var baseFolder = spaceiru.system.getFoldername(); ////書き出しフォルダ if(spaceiru.system.selectFolder('書き出しフォルダ')== false){ alert('ユーザーによってキャンセルされました。'); exit(); } var outputFolder = spaceiru.system.getFoldername(); ///確認 if(confirm('本当に実行しますか?') == false) { exit(); } ///ライブラリ初期設定 選択フォルダのパスを渡す spaceiru.idd.initIdd(baseFolder); ///ライブラリメイン処理 spaceiru.idd.getIdd(); ///結果取得(パスが配列で返る) var iddFile = spaceiru.idd.getResult(); ///結果取得(ファイル名) var iddFileName = spaceiru.idd.getResult('file'); for(var i=0;i<iddFile.length;i++) { //オープン openfile(iddFile[i]); //リンクとフォントのチェックして書き出し if((spaceiru.idd.linkCheck() == true) && (spaceiru.idd.fontCheck() == true)){ exportPDF(outputFolder,iddFileName[i]); } //クローズ closefile(); } ////ファイルオープン時の警告ダイアログを元に戻す app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL; ///////////////////function///////////////////////// function openfile(name){ var fileobj; fileobj = app.open(new File(name)); } function closefile(){ app.activeDocument.close(SaveOptions.no); } function exportPDF(path,name){ ////拡張子をpdfにする name = name.replace (/\.[^\.]*$/,".pdf"); path = path + '/' + name; fileobj = new File(path); if(pdfPreSetName == '') { app.activeDocument.exportFile(ExportFormat.pdfType, fileobj, false); }else{ app.activeDocument.exportFile(ExportFormat.pdfType, fileobj, false,pdfPreSetName); } }
インクルードファイル spaceiru.jsx
//namespace spaceiru // // // var spaceiru = new Object(); spaceiru.system = new Object(); spaceiru.idd = new Object(); spaceiru.foldername = ""; spaceiru.system.selectFolder = function selectFolder(mes){ if(mes == undefined){ mes = 'フォルダを選択してください。'; } var folderObj; var foldername; foldername = Folder.selectDialog (mes); if(foldername != null){ spaceiru.system.setFoldername(foldername); return true; }else{ return false; } } spaceiru.system.getFoldername = function getFoldername(){ return spaceiru.foldername; } spaceiru.system.setFoldername = function setFoldername(name){ spaceiru.foldername = name; } //////////////////idd File Select///////////////// /////////////////////////////////////////////// spaceiru.idd.initIdd = function initIdd(folder){ spaceiru.idd.baseFolder = folder; spaceiru.idd.presentFolder = spaceiru.idd.baseFolder; spaceiru.idd.count = 0; spaceiru.idd.presentRoop = new Array(); spaceiru.idd.baseFilecont = (new Folder(spaceiru.idd.baseFolder)).getFiles().length; spaceiru.idd.checkFolderName; ///結果を入れる配列 フルパス spaceiru.idd.result = new Array(); ////結果を入れる配列 ファイル名 spaceiru.idd.resultFilename = new Array(); } spaceiru.idd.getIdd = function getIdd(){ spaceiru.idd.presentRoop[0] = 0; if(spaceiru.idd.baseFilecont == 0) return; while(spaceiru.idd.presentFolder != false) { spaceiru.idd.presentFolder = spaceiru.idd.checkFolder(spaceiru.idd.presentFolder,spaceiru.idd.presentRoop[spaceiru.idd.count]); if(spaceiru.idd.presentFolder == false) { if(spaceiru.idd.count > 0){ spaceiru.idd.count -= 1; } ///親にセット spaceiru.idd.presentFolder = (new Folder(spaceiru.idd.checkFolderName)).parent.fsName; if((spaceiru.idd.count == 0) && ( spaceiru.idd.baseFilecont == spaceiru.idd.presentRoop[0])) { ///終了 spaceiru.idd.presentFolder = false; } }else{ ///次の階層 spaceiru.idd.count += 1; spaceiru.idd.presentRoop[spaceiru.idd.count] = 0; } } } spaceiru.idd.checkFolder = function checkFolder(name,start){ var list = (new Folder(name)).getFiles (); var result = false; for(var i=start;i < list.length;i++) { spaceiru.idd.presentRoop[spaceiru.idd.count] = i +1 ; var len = (new Folder(list[i].fsName)).getFiles().length; if(len > 0) { result = list[i].fsName; break; }else{ spaceiru.idd.setResult(list[i]); } } spaceiru.idd.checkFolderName = name; return result; } /////ファイル名チェック spaceiru.idd.setResult = function setResult(obj){ var name = obj.name; var path = obj.fsName; if(name.match(/\.indd$/g)) { spaceiru.idd.result.push(path); spaceiru.idd.resultFilename.push(name); } } ////引数があればファイル名を返す spaceiru.idd.getResult = function getResult(type){ if(type == undefined){ return spaceiru.idd.result; }else{ return spaceiru.idd.resultFilename; } } /////リンクチェック ////全てリンクされてたらTrue spaceiru.idd.linkCheck = function linkCheck(){ var allLinks = app.activeDocument.links; var result = true; for(var i=0; i < allLinks.length;i++) { if((allLinks[i].status == LinkStatus.linkMissing) || (allLinks[i].status == LinkStatus.linkOutOfDate)) { result = false; break; } } return result; } ////フォントチェック ///全て適用されたらTrue spaceiru.idd.fontCheck = function fontCheck(){ var docObj = app.activeDocument; var result = true; for(var i=0; i < docObj.fonts.length;i++) { if(docObj.fonts[i].status != FontStatus.installed) { result = false; break; } } return result; }
どーだろう?