top

【InDesignCS3+javascript】re_link.jsx 修正

by buruge ~ 3月 6th, 2009. Filed under: DTP, InDesignCS3+javascript.

以前うpしてみた、InDesignにリンクしてあるEPSを同じ名前のPSDとAIに再リンクするスクリプト。
CS4ではフォルダに再リンクすることができるようになって、このスクリプトもあまり寿命は長くないのかもしれないですが、今まで使う中で少しエラーとかも出ていたので、修正したものを改めて晒してみたいと思います。

修正点は

・ページアイテムがEPSではないImage画像を読み取るとエラーで止まるので回避。
・拡張子のないEPSも再リンクできるようにした。(つまりファイル名が一緒であればEPSでなくても問答無用)

の2点です。相変わらず日本語ファイル名は処理できません。

/*

EPSデータを同じ名前のPSD,AIに再リンクするスクリプト

使い方:
再リンクするデータをひとつのフォルダに集めておき、InDesignドキュメントを開いてからスクリプトを実行してください。
再リンクするデータのあるフォルダを指定すると、そこからEPSと同じ名前のPSDとAIを探し出してリンクをし直します。
再リンクできなかったファイルがある場合はアラートが出ます。

注意:
Mac専用、日本語のファイル名ではうまく動作しない場合があります。
また、このスクリプトで何か異常が起こっても責任は負いかねます。

2008.08.06 作成
2009.02.23 EPSではないImage画像を読み取るとファイルパスが得られずエラーで止まるので修正
2009.03.06 拡張子のないEPSも再リンクできるようにした
buruge
http://buruge.net

*/

if(app.documents.length == 0){//ドキュメントが開かれているかの判定
alert(”ドキュメントが開かれていません。ドキュメントを開いてから再実行してください”);
exit();
}
folderName = Folder.selectDialog (”再リンク画像のあるフォルダを選択して下さい”)
if(!folderName){exit();}
psdList = folderName.getFiles(”*.psd”);
aiList = folderName.getFiles(”*.ai”);
app.pdfPlacePreferences.pdfCrop = PDFCrop.cropArt;//AIの配置オプション「アート」に設定

pageObj=app.activeDocument.pages;
for(i=0;i<pageObj.length;i++){
if(pageObj[i].allGraphics.length>0){
for(j=0;j<pageObj[i].allGraphics.length;j++){

nameObj=”";
if(pageObj[i].allGraphics[j].itemLink != null){//EPSではなく埋め込みImageをアイテムとして取得してしまった場合に回避する
fp = pageObj[i].allGraphics[j].itemLink.filePath;//画像のファイルパス取得
fname = fp.split (”:”);//:でファイルパスを分解
fn = fname[fname.length-1];//分解した配列の最後にあるのがファイル名
ffname = fn.split(”.”);//.でファイル名を分割
if(ffname.length>2){//拡張子前以外にファイル名に”.”ドットがあったとき対策
nameObj =ffname[0];
for(jj=1;jj<ffname.length-1;jj++){
nameObj =nameObj+”.”+ffname[jj];
}
}else{
nameObj = ffname[0];//分解するとひとつめが名前で、二つ目が拡張子になるのでひとつめを選ぶ
}

if(ffname[ffname.length-1]==”eps”||ffname[ffname.length-1]==”EPS”||ffname[ffname.length-1]==nameObj){

for(k=0;k<psdList.length;k++){
pn = psdList[k].name;
pName = pn.split (”.”);
if(pName.length>2){//拡張子前以外にファイル名に”.”ドットがあったとき対策
pNameObj=”";
pNameObj=pName[0];
for(kk=1;kk<pName.length-1;kk++){
pNameObj=pNameObj+”.”+pName[kk];
}
}else{
pNameObj = pName[0];
}
if(pNameObj==nameObj){
try{
pageObj[i].allGraphics[j].place(psdList[k]);
}catch(e){
alert(pn+”:”+e);
}
}
}

for(l=0;l<aiList.length;l++){
an = aiList[l].name;
aName = an.split (”.”);
if(aName.length>2){//拡張子前以外にファイル名に”.”ドットがあったとき対策
aNameObj=”";
aNameObj=aName[0];
for(kk=1;kk<aName.length-1;kk++){
aNameObj=aNameObj+”.”+aName[kk];
}
}else{
aNameObj = aName[0];
}
if(aNameObj==nameObj){
try{
pageObj[i].allGraphics[j].place(aiList[l]);
}catch(e){
alert(an+”:”+e);
}
}
}
}
}
}
}
}
alert(”完了しました。”);

余談ですが、このスクリプトよりも
Update path names in links
こっちの方が便利ですよw(上の晒し台無しw)
市川せうぞーさんがブログで紹介されていたもので、日本語のファイル名もきちんと再リンクしてくれます。
ただ、指定したフォルダの下層フォルダにも同じ名前のファイル(旧EPSとか)を退避させたりしていると、そっちに再リンクしたりするので、旧ファイルは全く別の場所に退避させたほうがいいかもしれません。

で、このスクリプト、僕の環境では日本語ファイル名は再リンクするのに英文ファイル名を再リンクしないことが多々有りまして。
自分で書いたスクリプトも併用、みたいな感じになってます。
今回拡張子無しも再リンクするようにしたので、二つを使うことで、うまく作業を完結できてるのかな。(自画自賛乙)

Leave a Reply