InDesign CS3/CS4編 自動的にハイパーリンクを作成する

 InDesign CS3/CS4では文字にハイパーリンクを指定することができます。ページ内の移動だけでなくWebサイトへのリンクもできます。 今回はInDesignのテキストフレーム内にある文字をWebサイトへのリンク先とみなして自動的にハイパーリンクを作成するものです。これにより、PDFで書き出した際に文字をクリックするとWebブラウザが起動し該当ページが表示されるようになります。 まず、最初のサンプルは単純にWebサイトへのURLがテキストフレームに書かれているパターンです。

http://www.openspc2.org/
http://ww.google.co.jp/
http://www.yahoo.co.jp/

ハイパーリンクを作成したいテキストフレームを作成してから以下のスクリプトを実行します。

(function(){
var selObj = app.activeDocument.selection;
for(var i=0; i<selObj.length; i++){
for(var j=0; j<selObj[i].paragraphs.length; j++){
var txtObj = selObj[i].paragraphs[j];
var text = txtObj.contents;
var linkText = app.activeDocument.hyperlinkTextSources.add(txtObj);
var linkURL = app.activeDocument.hyperlinkURLDestinations.add(text);
var link = app.activeDocument.hyperlinks.add(linkText, linkURL);
link.borderColor = [255, 255, 255]; // リンク枠の色
}
}
})();
ただし、日本語Wikiや日本語ドメインなど日本語が含まれていると正しくリンクできません。デコードしても駄目だったので日本語が含まれている場合は残念ながら駄目です。何かうまい回避方法があればメールいただけると助かります。

上記サンプルでは一行全てがURLになっていることが前提ですが、実際には文章の途中にURLが記述されていることもあります。以下のスクリプトは文中にhttp://の文字が含まれている場合にhttp://から行末までをURLと見なしてハイパーリンクを作成します。

例)
例えばhttp://www.openspc2.org/
よく使うWebサイト、検索エンジンと言えばhttp://ww.google.co.jp/

(function(){
var selObj = app.activeDocument.selection;
for(var i=0; i<selObj.length; i++){
for(var j=0; j<selObj[i].paragraphs.length; j++){
var txtObj = selObj[i].paragraphs[j];
var text = txtObj.contents;
if ((p = text.indexOf("http://")) > -1){ // 文中にhttp://があればハイパーリンクのスタイルを設定
var srcText = txtObj.contents.substring(p, text.length-1);
var linkText = app.activeDocument.hyperlinkTextSources.add(txtObj);
var linkURL = app.activeDocument.hyperlinkURLDestinations.add(text);
var link = app.activeDocument.hyperlinks.add(linkText, linkURL);
link.borderColor = [255, 255, 255]; // リンク枠の色
}
}
}
})();
なお、どちらのスクリプトもすでに同名のリンク先が存在するとエラーになります。

[サンプルをダウンロード]