InDesign CS3を使用しています。
1000以上あるファイルすべてリンクが外れた状態(△に!マークが入っているアイコン表示)になっているため、
リンクの自動修復をJavascriptを使ってリンク更新+リンクファイルのチェックを行うべく以下のソースを書きました。
var fileObj = File.openDialog("開くファイルを指定してください。","InDesign:*.indd");
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;
app.open(fileObj);
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;
var imgObj = app.activeDocument.allGraphics;
var fList = "";
var CR = String.fromCharCode(13);
for(i=0; i<imgObj.length; i++){
var filename = imgObj[i].itemLink.name;
app.activeDocument.links[i].update(filename);
}
alert(File.decode(fileObj.name) + CR + "がリンクしているファイルは" + CR + CR + fList + CR + "の" + [i] + "点です。");
上記スクリプトを実行したところ途中まではリンクが更新されていくのですが、
複数回繰り返したところでvar filename = imgObj[i].itemLink.name;の箇所にマーカーがひかれて「オブジェクトが無効です」で動作がストップしてしまいます。
どこに問題があるのかわからないのでご助言をいただきたく書き込ませていただきました。
もしくは、InDesignを開いた際に「リンクの更新」に関するアラートが出た際に、
「リンクを自動修復」を選択させる方法があればご教授いただけますでしょうか。
よろしくお願いいたします。
1080枚のリンク画像に対して追試してみました。
まず、マコト01さんが失敗しているのは、
app.activeDocument.links[i].update(filename);
の行です。forで回しているのは、GraphicオブジェクトのカウントであってLinkオブジェクトのそれではありません。
単に、すべてのリンクをアップデートしたいだけなら、こう書けます。
var my_doc = app.activeDocument;
var my_image = my_doc.allGraphics;
for (var i = 0; i< my_image.length; i++) {
my_image[i].itemLink.update();
}
MIKIO TANIGAWAさんがおっしゃっているのは、おそらくVBのFor Each...Next ループやASのrepeat with i in lists ループだと思います。つまり、256個の制限はInDesignではなく、言語による制限なんではないかと...
http://adobe.find-answers.net/topic/what-does-mystoryallgraphics-return
http://forums.adobe.com/thread/410200
#上記リンクはid:chalcedony_htnさんのはてなブックマークコメントで教えていただきました。ありがとうございます。
tell application "Adobe InDesign CS3"
tell document 1
repeat with i in all graphics
update item link of i
end repeat
end tell
end tell
テストではたまたまうまくいってしまったんですが(もしかしたら、AS2.0のタイミングで直っているのかもしれません。)...^^ ASユーザーはこのループが信用できないのを経験的に知っています。
Copyright © 2009 Adobe Systems Incorporated. All rights reserved.
Use of this website signifies your agreement to the Terms of Use and Online Privacy Policy (updated 07-14-2009).