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