名刺データの管理
ある顧客の名刺データが2,500件以上ある。前任者はこれを店舗ごとに管理したものだからInDesignのファイル数が70近くなっており、注文が来ると
①店舗名で付けたファイル名から使用するInDesignファイルを探す(この時点で無駄)
②該当ファイルを開いて受注した名刺を1件ずつ「氏名」で検索し、該当ページをメモ
③メモをもとにページ指定し、PDFを書き出し面付、印刷
という手法を取っていた。顧客が異動の時期になれば注文件数も増大し深夜残業になるのは当然である。しかもQuarkを扱ってた方なので、InDesignへの移行もだいぶ遅れた。あるとき名刺のデザインが一新されるということで、もう自分にはできないと言い出したのでだったらやらせてくれと手をあげた。
新フォーマットでのデータ作成は以下のとおり。
①名刺に載せる情報はすべてExcelで支給してもらう
②データ結合で展開
③細かい調整(全角半角統一など)は検索置換のクエリを登録しておいてスクリプトで呼び出し一括調整
店舗ごとにInDesignファイルを作るのではなく、1ファイルで管理した。
では受注した際はどうしているかというと、次のように処理している。
①注文のリストはExcelで来るので氏名の行をコピーしメモ帳に貼り付けテキストデータで保存
②上記テキストデータをリストとして、スクリプトで1行ずつ読み込み、1行ずつ繰り返しInDesignファイルの最終ページに移動させる。
これで下版の際にPDFを書き出す際のページ指定も「最終ページ番号-受注件数+1」に「-」をつければいいだけなので簡単になる。
上記作業で「リストを検索してヒットしたページを最終ページに移動するというスクリプト」は以下のとおり。
var doc = app.activeDocument; //検索オプションGrep app.changeGrepPreferences = NothingEnum.nothing; app.findGrepPreferences = NothingEnum.nothing; app.findChangeGrepOptions.includeHiddenLayers = false;//非表示レイヤーを含めるかどうか app.findChangeGrepOptions.includeMasterPages = false;//マスターページを含めるかどうか app.findChangeGrepOptions.includeFootnotes = false;//脚注を含めるかどうか function mvPg(x){ app.findGrepPreferences.findWhat=x; var gr=doc.findGrep(); // 検索だけ var grl=gr.length; for (i=grl-1; i>=0; i--) { try{ pageNum=(gr[i].parentTextFrames[0].parentPage.name-1); doc.pages[pageNum].move(LocationOptions.AT_END,doc.pages[-1]);//検索したページをdoc2の最後に複製 }catch (e) {} } }; filename = File.openDialog("リストのテキストファイルを選択してください。"); if (filename) { fileObj = new File(filename); var lineArr = new Array(); fileObj.open("r"); // 読み込みモード while(!fileObj.eof) { var idNum= fileObj.readln(); mvPg(idNum); } fileObj.close(); } app.changeGrepPreferences = NothingEnum.nothing; app.findGrepPreferences = NothingEnum.nothing; alert("移動しました");
mottainaiDTPさんのサイトを参考にさせて頂いている。
mottainaidtp.seesaa.net
しかしInDesignファイルでページ数が2,500ページくらいになるとスクリプトをしようしても検索&移動にだいぶ時間がかかる。上記スクリプトにはプログレスバーを使用していないが今使っているものはプログレスバーも組み込んだ。(このプログレスバーを組み込むのがわけがわからず大変だった)
今後の課題はこの辺の時間の短縮と考えている