Reflex iText Sample

基本説明 (3/3)

その他のマクロ

Reflex iTextではテンプレート作成のためのマクロとして、 前述のページ再利用(includeマクロ)のほかに、条件分岐(ifマクロ)、繰り返し処理(forマクロ)を用意しています。

条件分岐 (ifマクロ)

エンティティ項目の値が、指定した値と等しい場合、ifマクロ(<div class="_if">)で囲まれた範囲を表示します。

式は、value属性に "項目名 = '値'" を指定します。

ifマクロサンプル

  • テンプレート (ifmacrosample.html)
    <?xml version="1.0" encoding="UTF-8" ?>
    <html>
    <head>
    </head>
    <body>
    
    <div class="_page" style="pagesize:A5; orientation:landscape;">
        <table cellpadding="2" cellspacing="1">
            <tr>
                <td>
                    <span style="size:18;">
                        セール情報 -- 
                    </span>
                    <span id="season" />
                    <span>
                         -- 
                    </span>
                    <br/>
                    <br/>
                </td>
            </tr>
    
            <div class="_if" value="season='summer'">    <!-- ここから season='summer' のみ表示 -->
            <tr>
                <td>
                    <span style="size:18;">
                        サマーバーゲン開催中
                    </span>
                    <br/>
                </td>
            </tr>
            </div>    <!-- ここまで -->
    
            <div class="_if" value="season='winter'">    <!-- ここから season='winter' のみ表示 -->
            <tr>
                <td>
                    <span style="size:18;">
                        歳末バーゲン開催中
                    </span>
                </td>
            </tr>
            </div>    <!-- ここまで -->
    
        </table>
    
        <table cols="2" border="2" frame="box" cellpadding="1" cellspacing="1">
            <tr>
                <th align="center" style="right:true; bottom:true;">商品</th>
                <th align="center" style="bottom:true;">価格</th>
            </tr>
            <tr>
                <td style="right:true; bottom:true;">カットソー</td>
                <td style="bottom:true;">1000円から</td>
            </tr>
            <tr>
                <td style="right:true; bottom:true;">パンツ</td>
                <td style="bottom:true;">1200円から</td>
            </tr>
            <tr>
                <td style="right:true; bottom:true;">スカート</td>
                <td style="bottom:true;">1500円から</td>
            </tr>
        </table>
    </div>
    
    </body>
    </html>
    
    
  • エンティティ (IfMacroList.java)
    package jp.reflexworks.test.model;
    
    import java.util.List;
    import java.util.ArrayList;
    
    public class IfMacroList {
    
        public static List ifMacro;
    
        static {
            ifMacro = new ArrayList();
    
            IfMacro macroData = new IfMacro();
            macroData.season = "spring";
            ifMacro.add(macroData);
    
            macroData = new IfMacro();
            macroData.season = "summer";
            ifMacro.add(macroData);
    
            macroData = new IfMacro();
            macroData.season = "autumn";
            ifMacro.add(macroData);
    
            macroData = new IfMacro();
            macroData.season = "winter";
            ifMacro.add(macroData);
        }
    
    }
    
    
  • エンティティ (IfMacro.java)
    package jp.reflexworks.test.model;
    
    public class IfMacro {
    
        public String season;
    
    }
    
    
  • XML (ifmacrolist.xml)
    <ifMacroList>
        <ifMacro>
            <season>spring</season>
        </ifMacro>
        <ifMacro>
            <season>summer</season>
        </ifMacro>
        <ifMacro>
            <season>autumn</season>
        </ifMacro>
        <ifMacro>
            <season>winter</season>
        </ifMacro>
    </ifMacroList>
    
    
  • JSON (ifmacrolist.json)
    {"ifMacroList" :
        {"ifMacro" :
            [{"season" : "spring"},
             {"season" : "summer"},
             {"season" : "autumn"},
             {"season" : "winter"}
            ]
        }
    }
    
    
  • サンプル実行
  • Reflex iText 実行結果
    IfMacroSample実行結果

繰り返し処理 (forマクロ)

Listの件数分、もしくは指定した一定回数分を繰り返したい場合、forマクロ(<div class="_for">)を使用します。

forマクロで囲まれた範囲(<div class="_for">~</div>)が繰り返されます。

value属性にListの項目名、もしくは数字を指定します。

forマクロサンプル

  • テンプレート (formacrosample.html)
    <?xml version="1.0" encoding="UTF-8" ?>
    <html>
    <head>
    </head>
    <body>
    
    <div class="_page" style="pagesize:A5; orientation:landscape;">
        <table cellpadding="2" cellspacing="1">
            <tr>
                <td>
                    <span style="size:18;">
                        セール情報 -- 
                    </span>
                    <span id="season" />
                    <span>
                         -- 
                    </span>
                    <br/>
                    <br/>
                </td>
            </tr>
        </table>
    
        <table cols="2" border="2" frame="box" cellpadding="1" cellspacing="1">
            <tr>
                <th align="center" style="right:true; bottom:true;">商品</th>
                <th align="center" style="bottom:true;">価格</th>
            </tr>
    
            <div class="_for" value="item">    <!-- 繰り返し処理 ここから -->
            <tr>
                <td style="right:true; bottom:true;">
                    <span id="name-i" />    <!-- List内の項目 -->
                </td>
                <td style="right:true; bottom:true;">
                    <span id="price-i" />    <!-- List内の項目 -->
                </td>
            </tr>
            </div>    <!-- ここまで -->
    
        </table>
    </div>
    
    </body>
    </html>
    
    
  • エンティティ (ForMacroList.java)
    package jp.reflexworks.test.model;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ForMacroList {
    
        public static List forMacro;
    
        static {
            forMacro = new ArrayList();
    
            ForMacro macroData = new ForMacro();
            macroData.season = "spring";
            List item = new ArrayList();
            Item itemData = new Item();
            itemData.name = "カットソー";
            itemData.price = "1200円から";
            item.add(itemData);
            itemData = new Item();
            itemData.name = "ブラウス";
            itemData.price = "1200円から";
            item.add(itemData);
            itemData = new Item();
            itemData.name = "ワンピース";
            itemData.price = "2500円から";
            item.add(itemData);
            macroData.item = item;
            forMacro.add(macroData);
    
            macroData = new ForMacro();
            macroData.season = "summer";
            item = new ArrayList();
            itemData = new Item();
            itemData.name = "Tシャツ";
            itemData.price = "500円から";
            item.add(itemData);
            itemData = new Item();
            itemData.name = "パンツ";
            itemData.price = "1500円から";
            item.add(itemData);
            itemData = new Item();
            itemData.name = "ワンピース";
            itemData.price = "2000円から";
            item.add(itemData);
            itemData = new Item();
            itemData.name = "タンクトップ";
            itemData.price = "500円から";
            item.add(itemData);
            macroData.item = item;
            forMacro.add(macroData);
    
            macroData = new ForMacro();
            macroData.season = "autumn";
            item = new ArrayList();
            itemData = new Item();
            itemData.name = "カットソー";
            itemData.price = "1200円から";
            item.add(itemData);
            itemData = new Item();
            itemData.name = "カーディガン";
            itemData.price = "2800円から";
            item.add(itemData);
            macroData.item = item;
            forMacro.add(macroData);
    
            macroData = new ForMacro();
            macroData.season = "winter";
            item = new ArrayList();
            itemData = new Item();
            itemData.name = "コート";
            itemData.price = "15000円から";
            item.add(itemData);
            itemData = new Item();
            itemData.name = "セーター";
            itemData.price = "2000円から";
            item.add(itemData);
            itemData = new Item();
            itemData.name = "カーディガン";
            itemData.price = "2500円から";
            item.add(itemData);
            itemData = new Item();
            itemData.name = "マフラー";
            itemData.price = "1500円から";
            item.add(itemData);
            macroData.item = item;
            forMacro.add(macroData);
        }
    
    }
    
    
  • エンティティ (ForMacro.java)
    package jp.reflexworks.test.model;
    
    import java.util.List;
    
    public class ForMacro {
    
        public String season;
        public List item;      // このListの件数分繰り返します
    
    }
    
    
  • エンティティ (Item.java)
    package jp.reflexworks.test.model;
    
    public class Item {
    
        public String name;
        public String price;
    
    }
    
    
  • XML (formacrolist.xml)
    <?xml version="1.0" encoding="UTF-8" ?>
    <forMacroList>
        <forMacro>
            <season>spring</season>
            <item>
                <name>カットソー</name>
                <price>1200円から</price>
            </item>
            <item>
                <name>ブラウス</name>
                <price>1200円から</price>
            </item>
            <item>
                <name>ワンピース</name>
                <price>2500円から</price>
            </item>
        </forMacro>
        <forMacro>
            <season>summer</season>
            <item>
                <name>Tシャツ</name>
                <price>500円から</price>
            </item>
            <item>
                <name>パンツ</name>
                <price>1500円から</price>
            </item>
            <item>
                <name>ワンピース</name>
                <price>2000円から</price>
            </item>
            <item>
                <name>タンクトップ</name>
                <price>500円から</price>
            </item>
        </forMacro>
        <forMacro>
            <season>autumn</season>
            <item>
                <name>カットソー</name>
                <price>1200円から</price>
            </item>
            <item>
                <name>カーディガン</name>
                <price>2800円から</price>
            </item>
        </forMacro>
        <forMacro>
            <season>winter</season>
            <item>
                <name>コート</name>
                <price>15000円から</price>
            </item>
            <item>
                <name>セーター</name>
                <price>2000円から</price>
            </item>
            <item>
                <name>カーディガン</name>
                <price>2500円から</price>
            </item>
            <item>
                <name>マフラー</name>
                <price>1500円から</price>
            </item>
        </forMacro>
    </forMacroList>
    
    
  • JSON (formacrolist.json)
    {"forMacroList" :
        {"forMacro" :
            [{"season" : "spring",
              "item" :
                  [{"name" : "カットソー", "price" : "1200円から"},
                   {"name" : "ブラウス","price" : "1200円から"},
                   {"name" : "ワンピース","price" : "2500円から"}
                  ]
             },
             {"season" : "summer",
              "item" :
                  [{"name" : "Tシャツ","price" : "500円から"},
                   {"name" : "パンツ","price" : "1500円から"},
                   {"name" : "ワンピース","price" : "2000円から"},
                   {"name" : "タンクトップ","price" : "500円から"}
                  ]
             },
             {"season" : "autumn",
              "item" :
                  [{"name" : "カットソー","price" : "1200円から"},
                   {"name" : "カーディガン","price" : "2800円から"}
                  ]
             },
             {"season" : "winter",
              "item" :
                  [{"name" : "コート","price" : "15000円から"},
                   {"name" : "セーター","price" : "2000円から"},
                   {"name" : "カーディガン","price" : "2500円から"},
                   {"name" : "マフラー","price" : "1500円から"}
                  ]
             }]
        }
    }
    
    
  • サンプル実行
  • Reflex iText 実行結果
    ForMacroSample実行結果

添え字(-i, -j)について

forマクロ内で、List内の項目を繰り返し表示したい場合、後ろに添え字を表す文字 "-i" を付加します。 二次元配列の場合、"-i-j"と付加します。

また、"-i-0"、"-i-1" など、"-i"の後に数を付加することでカラム列を指定できます。

二次元配列データのforマクロサンプル

  • テンプレート (formacroarraysample.html)
    <?xml version="1.0" encoding="UTF-8" ?>
    <html>
    <head>
    </head>
    <body>
    
    <div class="_page" style="pagesize:A5; orientation:landscape;">
        <table cellpadding="2" cellspacing="1">
            <tr>
                <td>
                    <span style="size:18;">
                        セール情報 -- 
                    </span>
                    <span id="season" />
                    <span>
                         -- 
                    </span>
                    <br/>
                    <br/>
                </td>
            </tr>
        </table>
    
        <table cols="2" border="2" frame="box" cellpadding="1" cellspacing="1">
            <tr>
                <th align="center" style="right:true; bottom:true;">商品</th>
                <th align="center" style="bottom:true;">価格</th>
            </tr>
    
            <div class="_for" value="item">
            <tr>
                <td style="right:true; bottom:true;">
                    <span id="item-i-0" />
                </td>
                <td style="right:true; bottom:true;">
                    <span id="item-i-1" />
                </td>
            </tr>
            </div>
    
        </table>
    </div>
    
    </body>
    </html>
    
    
  • エンティティ (ForMacroArrayList.java)
    package jp.reflexworks.test.model;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ForMacroArrayList {
    
        public static List forMacro;
    
        static {
            forMacro = new ArrayList();
    
            ForMacro macroData = new ForMacro();
            macroData.season = "spring";
            List item = new ArrayList();
            ItemArray itemData = new ItemArray();
            itemData._$$text = "カットソー";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "1200円から";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "ブラウス";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "1200円から";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "ワンピース";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "2500円から";
            item.add(itemData);
            macroData.item = item;
            forMacro.add(macroData);
    
            macroData = new ForMacro();
            macroData.season = "summer";
            item = new ArrayList();
            itemData = new ItemArray();
            itemData._$$text = "Tシャツ";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "500円から";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "パンツ";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "1500円から";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "ワンピース";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "2000円から";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "タンクトップ";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "500円から";
            item.add(itemData);
            macroData.item = item;
            forMacro.add(macroData);
    
            macroData = new ForMacro();
            macroData.season = "autumn";
            item = new ArrayList();
            itemData = new ItemArray();
            itemData._$$text = "カットソー";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "1200円から";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "カーディガン";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "2800円から";
            item.add(itemData);
            macroData.item = item;
            forMacro.add(macroData);
    
            macroData = new ForMacro();
            macroData.season = "winter";
            item = new ArrayList();
            itemData = new ItemArray();
            itemData._$$text = "コート";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "15000円から";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "セーター";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "2000円から";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "カーディガン";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "2500円から";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "マフラー";
            item.add(itemData);
            itemData = new ItemArray();
            itemData._$$text = "1500円から";
            item.add(itemData);
            macroData.item = item;
            forMacro.add(macroData);
        }
    
    }
    
    
  • エンティティ (ForMacro.java)
    package jp.reflexworks.test.model;
    
    import java.util.List;
    
    public class ForMacro {
    
        public String season;
        public List item;      // このListの件数分繰り返します
    
    }
    
    
  • エンティティ (ItemArray.java)
    package jp.reflexworks.test.model;
    
    public class ItemArray {
    
        public final int _$$col = 2;
        public String _$$text;
    
        public int get_$$col() {
            return this._$$col;
        }
    
        public String get_$$text() {
            return this._$$text;
        }
    
        public void set_$$text(String _$$text) {
            this._$$text = _$$text;
        }
    
    }
    
    
  • (注意点)XMLデータは二次元配列に対応していません。
  • JSON (formacroarraylist.json)
    {"forMacroArrayList" :
        {"forMacro" :
            [{"season" : "spring",
              "item" :
                  [["カットソー","1200円から"],
                   ["ブラウス","1200円から"],
                   ["ワンピース","2500円から"]]
             },
             {"season" : "summer",
              "item" :
                  [["Tシャツ","500円から"],
                   ["パンツ","1500円から"],
                   ["ワンピース","2000円から"],
                   ["タンクトップ","500円から"]]
             },
             {"season" : "autumn",
              "item" :
                  [["カットソー","1200円から"],
                   ["カーディガン","2800円から"]]
             },
             {"season" : "winter",
              "item" :
                  [["コート","15000円から"],
                   ["セーター","2000円から"],
                   ["カーディガン","2500円から"],
                   ["マフラー","1500円から"]]
             }]
        }
    }
    
    
  • サンプル実行
  • Reflex iText 実行結果
    ForMacroArraySample実行結果

前へ << >> 次へ