030.【ID】フォルダ内の全inddのプリフライト結果を書き出す
書いたコード
var folderObj = Folder.selectDialog("フォルダを選択してください"); var myFiles = folderObj.getFiles("*.indd"); var myResultsTxt = ""; var errTxt = ""; var errCnt = 0; var errPath = folderObj.fsName + "/プリフライトエラー.txt"; for (var i = 0; i < myFiles.length; i++) { app.open(myFiles[i]); var myDoc = app.activeDocument; var preflightName = myDoc.preflightOptions.preflightWorkingProfile; var myProfile = myDoc.preflightProfiles.item(preflightName); if (preflightName === "[基本]") { var myProfile = app.preflightProfiles.firstItem(); } var myProcess = app.preflightProcesses.add(myDoc, myProfile); myProcess.waitForProcess(); var myResults = myProcess.processResults; if (myResults !== "None\r\n") { var myResultsArr = myProcess.aggregatedResults; for (var j = 0; j < myResultsArr[2].length; j++) { if (myResultsArr[2][j][0] === 3) { myResultsTxt = myResultsTxt + myResultsArr[2][j][3] + "\n該当箇所: " + myResultsArr[2][j][1] + "\nページ: " + myResultsArr[2][j][2] +"\n\n"; } } errCnt = errCnt + 1; errTxt = errTxt + "【" + myDoc.name + "】\n" + myResultsTxt + "\n----------------\n\n"; } myProcess.remove(); myDoc.close(); } if (errCnt > 0) { var errObj = new File(errPath); errObj.open("w"); errObj.write(errTxt); errObj.close(); alert(errCnt + "ファイルでエラーが見つかりました。"); } else { alert("大丈夫だ、問題ない。"); }
メモ
こんな感じで出力される。
【00全体06 - コピー.indd】
問題: リンクされたファイルが見つかりません。
修復: リンクパネルで、「再リンク」ボタンを使用してリンクされたファイルを検索します。
該当箇所: ほにゃほにゃ.psd
ページ: 4問題: フォントに元のファイルで指定された字形がありません。
修復: 字形を含むフォントを適用するか、または書式/字形を選択して適用されたフォントで同様の字形を検索します。
該当箇所: <unassigned-1F338> (UID : 1f338)
ページ: 5
躓いたところ
- [基本]プロファイルは名前参照できない?
- プリフライトチェックOKのときのprocessResultsの値は"None"ではなく"None\r\n"
積み残し
- リンク切れがあった際のアラートを無視する(下記参考記事)
- 読みづらいコードだとは思うんだが、どこをどうするべきなのか今一つピンときていない気がする。
(どこを関数化するべきなのか、何を変数に格納するべきなのか、どんな変数名にするべきなのか、どう分岐させるのが望ましいか等々)→リーダブルコード読み直す?