このページの本文へ

InDesign+JavaScriptで電子書籍制作を自動化 (6/6)

2010年09月24日 11時00分更新

文●古籏一浩

  • この記事をはてなブックマークに追加
本文印刷

i文庫HDの青空文庫形式で出力する

 最後に、i文庫HDで扱える青空文庫形式で書き出すようにサンプル4を改良します。まず、テキストフレームを書き出したらファイルの末尾に改ページを示すタグ(<PBR>)も書き出すようにします。以下のようにwrite()を使います。


fileObj.writeln("<PBR>"); // i文庫HD用に改行コードを出力


 次に、選択されたフレームがテキストフレームではなく画像フレームの場合、<img>タグを書き出すようにします。選択されたフレームがテキストか画像かを調べるには選択されたオブジェクトのcontentTypeプロパティを調べます。プロパティの値は以下のようになっているので、if()を使ってフレームを調べ、テキストと画像で別々の処理を実行します。

テキスト ContentType.textType
画像 ContentType.graphicType

 画像フレームが選択された場合は、<img>タグのsrc属性にファイル名を指定します。今回はすべての画像ファイルがテキストファイルと同じ階層にある前提で、画像のファイル名だけを書き出します。

【図】25.png

テキストファイルと同じ階層にすべての画像がある

 選択されている画像フレーム内にある画像のパスは以下のように取得できます。ただし取得できるパスはフルパスですので、ここからファイル名だけを取り出す必要があります。


sel[0].images[0].itemLink.filePath

⇒例)MacHD:Users:asc:Desktop:Genkou:images:title.png


 文字列を分解して取り出すのは面倒なので、new File()を使ってファイルオブジェクトを作成します。File()の引数にファイルのパスを指定します。このように一度ファイルオブジェクトを作成してしまえば簡単にファイル名だけを取り出せます。ファイルオブジェクトにはファイル名だけを示すnameプロパティがありますので、nameプロパティを以下のように<img>タグのsrc属性に指定します。


var imageFileObj = new File(sel[0].images[0].itemLink.filePath);
var text = '<img src="'+imageFileObj.name+'">';


 最後に、改ページを示す<PBR>タグを出力するように以下のコードを追加します。


fileObj.writeln("<PBR>"); // i文庫HD用に改行コードを出力


 完成したスクリプトがサンプル6です。おまけとして、フレームが選択されていない場合に警告を出す処理も追加しました。

【図】26.png

書き出すテキストフレームを選択し、サンプル6を実行

【図】27.png

書き出すテキストファイルを選択

【図】28.png

画像フレームを選択し、サンプル6を実行

【図】29.png

ファイルにはタグが書き出される。画像はテキストファイルと同じ階層という前提になっている

【図】30.png

テキストフレームを選択し、サンプル6を実行

【図】31.png

ファイルにはテキストと画像を示すタグなどが出力される

iPadのi文庫HDで表示したもの。画像が表示されている

●サンプル5


// 選択されたテキストフレームの文字や画像ファイル名をファイルに追加で書き込む
(function(){
var sel = app.activeDocument.selection;
if (sel.length == 0){
alert("フレームを1つだけ選択してください");
return;
}
if (sel[0].contentType == ContentType.textType){
var text = sel[0].contents;  // 選択された範囲だけ読み出す
}
if (sel[0].contentType == ContentType.graphicType){
var imageFileObj = new File(sel[0].images[0].itemLink.filePath);
var text = '<img src="'+imageFileObj.name+'">';
}
var fileObj = File.openDialog("保存テキストファイル名を選択して下さい");
if (!fileObj) {
return; // キャンセルされた場合は何もせずに終わる
}
var flag = fileObj.open("e");   // 編集(読み込み/書き込み)モードで開く
if (!flag){
alert("ファイルが開けませんでした");
return; // 以後の処理はしない
}
fileObj.encoding = "UTF8";  // 出力する文字コードを指定
fileObj.lineFeed = "windows";   // 改行コードをWindows(CR+LF)にする
fileObj.seek(0,2);  // 書き込み位置をファイルの末尾に移動
fileObj.writeln(text);    // ファイルに書き込む
fileObj.writeln("<PBR>"); // i文庫HD用に改行コードを出力
fileObj.close();    // ファイルを閉じる
})();


 今回はi文庫HD用の青空文庫形式を書き出しましたが、同じ考え方でEPUBデータも作成できます。InDesign CS5のEPUB出力機能に不満のある方はぜひ挑戦してみてください。

前へ 1 2 3 4 5 6 次へ

この連載の記事

一覧へ

この記事の編集者は以下の記事をオススメしています