InDesignドキュメント上の文字情報と、テキストデータの情報の比較
InDesignドキュメント上の情報と、テキストデータの内容の比較(たとえばチラシ上のすべての商品名が間違っていないかを、元データと比べっこ)して答え合わせをするスクリプトを書いてみました。
チェックする点数が多いほど、スクリプトを使うメリットがあるかも。
スクリプト歴1年の人間の書いたものなので、無駄があるのはご愛嬌。
処理としては、
1 紙面上のすべての品名を配列に格納
2 元データ(タブ区切りテキスト)を配列に格納
を用意し、1の中身が2の中にも存在するかをループで調べていく。仮に1の品名に誤字脱字があれば、2に存在しない品名としてアラートが出る。
アラートではなく、ログを吐き出させる処理でもいいかもしれない。
var myDoc = app.activeDocument; var myFrame = myDoc.allPageItems;//グループ化されている可能性を考慮してall~で処理 var nameArray = [];//紙面上の品名を格納する配列 var ristArray = [];//元データの情報を格納する配列 app.findGrepPreferences.findWhat = "\\r"; //紙面上の品名に改行があればいったん取ってしまう app.findGrepPreferences.appliedParagraphStyle.name == "品名の段落スタイル" app.changeGrepPreferences.changeTo = "" myDoc.changeGrep (); for (var i=0; i<myFrame.length; i++) { if (myFrame[i].constructor.name === "TextFrame") { //アイテムがTextFrameなら処理する if (myFrame[i].parentStory.appliedParagraphStyle.name == "品名の段落スタイル") { //条件分で品名だけを処理。段落スタイルを条件にしてみた { nameArray.push (myFrame[i].contents); //格納にプッシュ }}}} /////ここからはテキストデータを配列に入れていく処理 var TAB = String.fromCharCode(9); // タブコード var fileObj = new File(File.openDialog("原稿(タブ区切りテキスト)を指定してください")); var flag = fileObj.open("r");//読み専用 if (flag) { var pageObj = app.activeDocument; count = 0; while(!fileObj.eof) { text = fileObj.readln(); // 1行読み込む ristArray = text.split(TAB); // タブコードで分割 }} var myList = ristArray.join ("/");//ristArrayの中身を全角スラッシュ区切りで連結 for (var k=0; k<nameArray.length; k++) { if (myList.indexOf (nameArray[k]) == -1) {//indexOfでリスト内に品名があるか探していく alert ("『" + nameArray[k] +"』 は点検リスト内に見つかりませんでした") // 見つからなければアラートを出す } }
実際には再帰処理の中に組み込んで、複数のInDesignドキュメントをまとめてチェックしています。
(改行を取る処理をしているので、saveOptionはNOで)
私の仕事では、色々使い途がありそうなスクリプトです。