3.10 サンプルプログラム(5) - 複数のデータソースに対応したPDFを生成
概要
ドキュメントレイアウトを活用するメリットの 1つに『複数のデータソースに対応した PDF生成』があります。ページレイアウトのみで PDFを生成する場合、複数のデータソースを一度 Hashtableに登録する必要がありますが、ドキュメントレイアウトを活用することで不要になります。
ソースサンプル
ソースサンプル
<biz-Stream_home>/sample/java/Sample5.java
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; } }