i文庫HDの青空文庫形式で出力する
最後に、i文庫HDで扱える青空文庫形式で書き出すようにサンプル4を改良します。まず、テキストフレームを書き出したらファイルの末尾に改ページを示すタグ(<PBR>)も書き出すようにします。以下のようにwrite()を使います。
fileObj.writeln("<PBR>"); // i文庫HD用に改行コードを出力
次に、選択されたフレームがテキストフレームではなく画像フレームの場合、<img>タグを書き出すようにします。選択されたフレームがテキストか画像かを調べるには選択されたオブジェクトのcontentTypeプロパティを調べます。プロパティの値は以下のようになっているので、if()を使ってフレームを調べ、テキストと画像で別々の処理を実行します。
テキスト | ContentType.textType |
---|---|
画像 | ContentType.graphicType |
画像フレームが選択された場合は、<img>タグのsrc属性にファイル名を指定します。今回はすべての画像ファイルがテキストファイルと同じ階層にある前提で、画像のファイル名だけを書き出します。
選択されている画像フレーム内にある画像のパスは以下のように取得できます。ただし取得できるパスはフルパスですので、ここからファイル名だけを取り出す必要があります。
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です。おまけとして、フレームが選択されていない場合に警告を出す処理も追加しました。
●サンプル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出力機能に不満のある方はぜひ挑戦してみてください。