テキストカタログを作成する(InDesign CS3編)

このスクリプトはフォルダ内にあるテキストの内容とファイル名を自動的にレイアウトします。画像カタログならぬテキストカタログといったところです。
InDesign CS3では問題なく動作しますが、それ以前のMacOS X + InDesignの組み合わせでは日本語ファイル名が化けることがあります。文字化けを防ぐには以前、紹介した濁点変換処理を組み込めば解決できます。
// あらかじめ、たくさんのページをつくっておく事!!
CR = String.fromCharCode(13);
startX = 0; // 開始位置(横)
startY = 0; // 開始位置(縦)
w = 100; // 横幅
h = 30; // 縦幅
maxCountX = 2; // 横の最大テキストフレーム数
maxCountY = 6; // 縦の最大テキストフレーム数
boxHeight = 15; // 行間
x = startX;
y = startY;
cntX = 0;
cntY = 0;
pageNum = 0; // ページ番号
docObj = app.activeDocument;
foldername = Folder.selectDialog("フォルダを指定してください");
if (foldername)
{
ext = ["*.txt","*.html"];
for (var j=0; j<ext.length; j++)
{
fileList = foldername.getFiles(ext[j]);
layoutText(fileList);
}
}
function layoutText(fileList)
{
for (i=0; i<fileList.length; i++)
{
var tfObj = app.activeDocument.pages[pageNum].textFrames.add();
tfObj.visibleBounds = [y,x,y+h,x+w];
tfObj.contentType = ContentType.textType;
fileObj = new File(fileList[i].fsName);
flag = fileObj.open("r");
if (flag == true)
{
tfObj.contents = fileObj.read();
fileObj.close();
}
// ファイル名の追加
var tfObj = app.activeDocument.pages[pageNum].textFrames.add();
tfObj.visibleBounds = [y+h,x,y+h+5,x+w];
tfObj.contentType = ContentType.textType;
tfObj.contents = File.decode(fileList[i].name);
x = x + w;
cntX++;
if (cntX >= maxCountX)
{
cntX = 0;
x = startX;
y = y + h + boxHeight;
cntY++;
if (cntY >= maxCountY)
{
cntY = 0;
y = startY;
pageNum++;
}
}
}
}

テキストファイルの内容を全て読み込んでいるため処理が遅くなる可能性もあります。もし、先頭行だけで良いのであれば

tfObj.contents = fileObj.read();



tfObj.contents = fileObj.readln();

に変更してください。また、拡張子がtxtとhtmlファイルのみ読み込むようになっていますが、cssなど他の拡張子のファイルも読み込む場合にはext=[〜]に以下のようにして追加します。

ext = ["*.txt","*.html", "*.css"];

"*.doc"を指定してもMS WORDのファイルは文字化けしてしまいますので注意してください。


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