10年ほど前から、楽しく自動化を始めて、仕事にしています。

インデザインで自動処理。テキストファイルを読み込んで、宛名を作成するジャバスクリプト

インデザインで、宛名のテンプレートを作り、タブ区切りのテキストを読み込んで、自動で1ページに1件作るジャバスクリプトのサンプルです。発展させれば、いろいろと使えると思います。

テンプレートのインデザインファイルを作成。

インデザインでマスターページにテキストボックスを3つ作り、それぞれテキストボックスを選択してから、スクリプトラベルをつける。

post
郵便番号を入れます。

address
住所を入れます。

name
名前を入れます。

タブ区切りのテキストを準備

名前 住所 郵便番号
山田 太郎 京都府京都市中京区寺町通り御池上る西側 600-0000
佐藤 花子 京都府京都市上京区堀川通り丸太町上る東側 604-0000
鈴木 一郎 京都府京都市東山区三条大橋東詰 605-0000
高橋 美咲 京都府京都市左京区岡崎最勝寺町 606-0000
田中 実 京都府京都市山科区安朱稲荷山町 607-0000

※コパイロットにダミーテキストを作ってもらいました。

エクセルでリストを作成して、『テキスト (タブ区切り) (*.txt)』で名前を付けて保存でOKです。

宛名作成のジャバスクリプト

動きの流れ、

  1. テキストファイルを1行読み込む
  2. マスターページを元にページを作成
  3. スクリプトラベルがついたものを、オーバーライドする
  4. スクリプトラベル”post”に”〒”とテキストの配列0をいれる。
  5. スクリプトラベル”address”にテキストの配列1をいれる。
  6. スクリプトラベル”name”にテキストの配列2と”様”をいれる。
  7. 行数分繰り返し
  8. 1ページ目を削除注意
// TAB区切りテキストを使って宛名作成

// TAB文字を取得する
TAB = String.fromCharCode(9);

// ファイルを開くダイアログを表示して、ユーザーにタブ区切りテキストファイルを指定させる
fileObj = new File(File.openDialog("タブ区切りテキストファイルを指定してください"));

// ファイルを読み取りモードで開く
flag = fileObj.open("r");

if (flag) {
    // 最初の1行はヘッダーとして読み飛ばす
    text = fileObj.readln(); 

    // ファイルの終わりまで繰り返し処理
    while (!fileObj.eof) {
        var arr = new Array();
        
        // 1行読み込む
        text = fileObj.readln();

        // タブコードで分割して項目ごとに配列に格納する
        txtItem = text.split(TAB);
        
        // 項目数だけ繰り返し処理
        for (i = 0; i < txtItem.length; i++) {
            arr[i] = txtItem[i];
        }

        // アクティブなドキュメントを選択する
        var myDoc = app.activeDocument;

        // 新しいページを追加する
        var myPage = myDoc.pages.add();

        // マスターページを適用する
        myPage.appliedMaster = myDoc.masterSpreads.item("A-マスター");

        // マスターページのアイテムをオーバーライドしてテキストを入れられるようにする
        var myObjects = myPage.masterPageItems;

        for (h = 0; h < myObjects.length; h++) {
            // ラベルが "post" のアイテムをオーバーライドする
            if (myObjects[h].label == "post") {
                myObjects[h].override(myPage);
            }

            // ラベルが "address" のアイテムをオーバーライドする
            if (myObjects[h].label == "address") {
                myObjects[h].override(myPage);
            }

            // ラベルが "name" のアイテムをオーバーライドする
            if (myObjects[h].label == "name") {
                myObjects[h].override(myPage);
            }
        }

        // スクリプトラベルに基づいて内容を入れる
        for (var j = 0; j < myPage.allPageItems.length; j++) {
            // ラベルが "post" のアイテムにコンテンツを入れる
            if (myPage.allPageItems[j].label == "post") {
                myPage.allPageItems[j].contents = "〒" + arr[0];
            }

            // ラベルが "address" のアイテムにコンテンツを入れる
            if (myPage.allPageItems[j].label == "address") {
                myPage.allPageItems[j].contents = arr[1];
            }

            // ラベルが "name" のアイテムにコンテンツを入れる
            if (myPage.allPageItems[j].label == "name") {
                myPage.allPageItems[j].contents = arr[2] + "様";
            }
        }
    }

    // 最初のページが存在する場合のみ削除する
    if (myDoc.pages.length > 0) {
        myDoc.pages[0].remove();
    }
}

流し込んだ後

注意

処理の最後に1ページ消すというのが入っているので、実際に使われるときは、検証をしてください。

下記の古籏一浩さんの本は全部買いました。自動化が一気に進みました。

InDesign自動化サンプルプログラム逆引きリファレンス上 (Adobe JavaScript(NextPublishing))

新品価格
¥4,752から
(2025/2/16 15:58時点)

InDesign自動化サンプルプログラム逆引きリファレンス下 (Adobe JavaScript(NextPublishing))

新品価格
¥4,752から
(2025/2/16 15:58時点)

InDesign自動化サンプルプログラム InDesign JavaScriptシリーズ (Adobe JavaScriptシリーズ(NextPublishing))

新品価格
¥7,920から
(2025/2/16 15:56時点)

組版時間を半減する! InDesign自動処理実例集

中古価格
¥4,455から
(2025/2/16 15:52時点)

コメント

この記事へのコメントはありません。

ランキング
開発・運営ランキング
にほんブログ村 IT技術ブログへ
にほんブログ村 IT技術ブログ Tipsへ
にほんブログ村 IT技術ブログ JavaScriptへ
にほんブログ村 IT技術ブログ VBAへ
PAGE TOP