biz-Streamマニュアル PDF出力ガイド 第3章 サンプルプログラム 3.10 サンプルプログラム(5) - 複数のデータソースに対応したPDFを生成

3.10 サンプルプログラム(5) - 複数のデータソースに対応したPDFを生成

概要

ドキュメントレイアウトを活用するメリットの 1つに『複数のデータソースに対応した PDF生成』があります。ページレイアウトのみで PDFを生成する場合、複数のデータソースを一度 Hashtableに登録する必要がありますが、ドキュメントレイアウトを活用することで不要になります。



サンプル構成

項目 ファイルパス
ドキュメントレイアウトサンプル <biz-Stream_home>/sample/java/Sample5-doc.xml サンプル1
ページレイアウトサンプル <biz-Stream_home>/sample/java/Sample5-page.xml サンプル1
ソースサンプル <biz-Stream_home>/sample/java/Sample5.java サンプル1
CSVデータサンプル <biz-Stream_home>/sample/java/Sample5.csv サンプル1
XMLデータサンプル <biz-Stream_home>/sample/java/Sample5-data.xml サンプル1
出力結果サンプル <biz-Stream_home>/sample/java/Sample5.pdf サンプル1


ソースサンプル


import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Hashtable;

import com.brainsellers.pdf.PDFRuntimeException;
import com.brainsellers.xml.JaxpXML;
import com.brainsellers.xml.common.XMLSuper;
import com.brainsellers.xml.datatypes.HashtableType;
import com.brainsellers.xml.datatypes.RecordType;

public class Sample5 {

    public static void main(String args[]) {
        new Sample5(args);
        System.exit(0);
    }

    public Sample5(String args[]) {
        try {
            Hashtable<String, String> param1 = new Hashtable<String, String>();
            param1.put("param1", "150000");

            Hashtable<String, String> param2 = new Hashtable<String, String>();
            param2.put("param2", "<");

            // (1) 入出力共にファイル名で指定する
            XMLSuper xml = new JaxpXML(
                    "${base-dir}/sample/java/Sample5-doc.xml",
                    "${base-dir}/sample/java/Sample5.pdf");

            // (2) レイアウト情報(XML)の解析を行う
            xml.parse();

            // (3) 用紙サイズ、セキュリティ等の文書情報はドキュメントレイアウトで定義するので
            // アプリケーションでは設定しません。改ページ処理も必要ありません。

            // (4) 各データソースの情報を再度セットします
            // SQLのwhere文の更新
            xml.setDataSourceParameter("sql-statement", param1);
            // アプリケーションデータのセット
            xml.setDataSource("app-resource", getRecord(0));
            // CSVファイル名のセット
            xml.setDataSource("csv-resource", "${base-dir}/sample/java/Sample5.csv");
            // XMLファイル名のセット
            xml.setDataSource("xml-resource", "${base-dir}/sample/java/Sample5-data.xml");
            // XQueryの更新
            xml.setDataSourceParameter("xml-field", param2);

            // (5) 座標計算を行う
            xml.calcDataSize();

            // (6) PDFを生成する
            xml.toPDF();

            // (7) データソースをリセットする
            xml.reset();

            // (8) PDFを出力する
            xml.close();

        } catch (PDFRuntimeException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * ダミーのデータソースを生成する
     *
     * @param idx
     *            添え字
     * @return 配列のデータソース
     */
    private RecordType getRecord(int idx) {
        RecordType rec = new RecordType();

        for (int i = 0; i < 30; i++) {
            HashtableType table = new HashtableType();
            table.put("製品コード", "製品コード" + idx + ":" + i);
            table.put("製品名", "製品名" + idx + ":" + i);
            table.put("数量", "数量" + idx + ":" + i);
            table.put("単価", "単価" + idx + ":" + i);
            table.put("金額", "金額" + idx + ":" + i);
            rec.add(table);
        }

        return rec;
    }
}


出力結果

サンプル5