webreportcafe for java...

68
WebReportCafe for Java プログラミングガイド

Upload: others

Post on 27-May-2020

36 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

WebReportCafe for Java プログラミングガイド

Page 2: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

目次 2

Copyright(C) SIOS Technology, Inc.

目次

第1章 はじめに............................................................................. 4

Designer.................................................................................................................................................. 4 Engine....................................................................................................................................................... 4 Server....................................................................................................................................................... 4 Print Client (Java版のみ)........................................................................................................ 4

第 2 章 Engineのインストール ................................................ 5

第 3 章 Engineコンポーネント解説........................................ 6

帳票出力基本クラス群(jp.co.tenartni.xreport.*) ........................................................ 7 データ管理基本クラス群(jp.co.tenartni.data.*)............................................................ 8 テキストデータを扱うためのクラス群(jp.co.tenartni.data.text.*)........................14 JDBCラッパークラス群(jp.co.tenartni.sql.*) ...............................................................15

第 4 章 サンプルプログラム...................................................17

基本的なプログラム作成..................................................................................................................18 パラメータを用いたプログラム作成 ..............................................................................................21 オブジェクトの属性を変更するプログラム作成........................................................................21 オブジェクトの属性を変更するプログラム作成........................................................................22 オブジェクトの属性を変更するプログラム作成........................................................................23 1 行毎にオブジェクトの色を変更するプログラム作成...........................................................25 PDF設定のデータの取得及び設定方法 ....................................................................................27 PDFをメールで添付するプログラム作成 .....................................................................................28 PDFのURLをメールで送付するプログラム作成 .........................................................................29 動的に画像データを取得するプログラム作成 ........................................................................30 動的にグラフを作成しPDF出力するプログラム作成...............................................................33 プリンターにダイレクト印刷をするプログラム作成 ..................................................................37 CSVファイルからPDF出力するプログラム作成 ...........................................................................38 任意のデータ(XRowSet)を使用したプログラム作成.............................................................39 XMLSchemaファイルからPDF出力するプログラム作成 ............................................................40 レポートのイベントを使用したプログラム作成 ..........................................................................41 複数の帳票フォームから1つのPDFを出力するプログラム作成.........................................44 画像イメージを出力するプログラム作成 ....................................................................................45

第 5 章 アプリケーションシステムとの連携......................46

サーブレットからのPDF生成.............................................................................................................46 PDFフォームを利用した見積システム ..........................................................................................48

Page 3: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

目次 3

Copyright(C) SIOS Technology, Inc.

■PDFフォームを利用したサンプルアプリケーション概要 ................. 48 環境設定............................................................... 49 PDFフォームとサーバーのデータ送受信について ............................ 52 サンプルソース解説..................................................... 52

DeveloperCafeからのPDF生成 .....................................................................................................57 ソースコードPDFEstimate.javaの解説 ..................................... 59 ソースコードEntryForm.javaの解説 ....................................... 61

補足説明 .........................................................................................62

◆印刷フォントについて ...................................................................................................................62 ◆ライブラリについて .........................................................................................................................62 ◆非定型用紙の印刷について .....................................................................................................62 ◆印刷フォントプロパティファイル ................................................................................................63 ◆外字フォントの埋め込み機能について .................................................................................64 ◆設定ファイル ....................................................................................................................................65 ◆和暦プロパティファイル............................................... 65 ◆ログプロパティファイル............................................... 66

◆ライセンス情報の確認(Java版) ..............................................................................................67 ◆バージョン情報の確認(Java版)..............................................................................................67

Page 4: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 2 章 Engine のインストール 4

第1章 はじめに WebReportCafe(以下 WRC)は、 PDF 出力、画像出力、プリンタ印刷、メール配信などを実現する

電子帳票ソリューションを提供します。

製品構成は次のとおりです。

Designer

WRC の帳票アプリケーション設計ツール ビジュアルな操作で高度な帳票アプリケーションが設計可能

PDF でのプレビューも可能

OCR 読取機能、電子署名機能を標準搭載

Engine

帳票生成コアライブラリ(Java 版、Microsoft .NET 版の2つのプラットフォームをサポート) Web アプリケーション、アプリケーション等に組込で利用

PDF 生成、ダイレクト印刷、画像出力(JPEG,PNG など)、PDF フォームをサポート

Server

WebReportCafe Server は、Web ブラウザのコンソールにて運用に必要な各種設定が簡単にでき、

プログラミングレスで運用可能な帳票サーバーアプリケーションです。

Microsoft.NET、Java、PHP、HTML などのマルチアーキテクチャのクライアントや Web サービスからレポー

トサービスを要求できます。

メール配信、PDF 管理など開発工数を必要とする運用管理機能をプログラミングレスで提供します。

業務システムと帳票システムを明確に分離して、帳票システムとして独立させることで、再利用性の高い帳

票運用環境を短期間で構築できます。

Print Client (Java 版のみ) J2EE/Web アプリケーション環境からクライアントのプリンタへ対して直接印刷を行うライブラリ デフォルトのプリンタへ直接印刷することや印刷ダイログを表示して印刷することが可能

このドキュメントでは、Java のプログラミング(WRC Engine)についての説明を行います。

Designer 帳票アプリケーション設計ツール

WebReportCafe の帳票生成コアライブラリ

マルチアーキテクチャー対応帳票アプリケーションサーバー

Engine

Server

Print Client クライアント環境からプリンタへ直接印刷を行うライブラリ

Page 5: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 2 章 Engine のインストール 5

第 2 章 Engine のインストール WRC Engine のインストールおよびセットアップの手順を説明します。 ・ JDK をインストールし、Java が動作する環境を用意してください。 ・ 次のファイルをインストールし、クラスパスを設定してください。

lib/WRC_RE.jar と lib/10ART-NI_SCRIPT.jar をコピーしてください。 姉妹製品「WebWorkBench DeveloperCafe」と組み合わせて使用する場合は、WRC_RE.jar

のかわりに WRC_RE_WDC.jar を使用してください。

JDBC ドライバ お使いのデータベースに合ったドライバを用意してコピーしてください。

ライセンスファイル(WRC_LICENSE.jar)をコピーしてください。 ライセンス情報の確認については、 WebReportCafe 導入ガイドの[資料:ライセンス情報の確

認]をご覧ください。

その他のライブラリ セキュリティやメールなどの各機能を利用する場合は以下のライブラリが必要です。各機能を使用しない

場合は不要です。 ライブラリ名 説明 jakarta-oro-2.0.8.jar ・PDF フォーム機能を使用する場合はこの jar をコピーしてください。 log4j-1.2.14.jar ・Log4J を使用する場合はこの jar をコピーしてください。

・Log4J については、http://logging.apache.org/ を参照してください。 cryptix32.jar ・PDF 設定のセキュリティ機能を使用する場合はこの jar をコピーしてください。

・セキュリティ機能の詳細は、WRC Designer のドキュメントを参照して下さい。 jce-jdk13-125.jar ・オープンソースJCEプロバイダ Bouncy Castle v1.25

・電子署名の機能を使用する場合はこの jar をコピーしてください。 xerces.jar ・JDK 1.3.x で WRC Engine を利用する場合は、この Jar をコピーしてください。 jai_core.jar jai_codec.jar

・JAI を使用する場合は各ファイルをコピーしてください。 ・JAI の詳細は、WRC Designer のドキュメントを参照して下さい。(備考)

activation.jar mail.jar ・メール機能を使用する場合は各ファイルをコピーしてください。 (備考)

(備考)ライブラリの入手方法については、[補足説明: ライブラリについて]を参照して下さい。

コピーしたファイルにクラスパスを設定してください。

以上で、Engine のインストールおよびセットアップは終了です。

Page 6: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 3 章 Engine コンポーネント解説 6

第 3 章 Engine コンポーネント解説 ・ WRC Engine は、下図のコンポーネントパッケージで構成されています。 ・ ここでは、各コンポーネントについての解説を行います。

(各クラスの説明は、APIリファレンス(JavaDoc)を参照してください。)

jp.co.tenartni.xreport帳票出力

基本クラス群

jp.co.tenartni.data.text テキストデータ

を扱うためのクラス群

jp.co.tenartni.data データ管理

基本クラス群

jp.co.tenartni.sql JDBC ラッパー

クラス群

Page 7: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 3 章 Engine コンポーネント解説 7

帳票出力基本クラス群(jp.co.tenartni.xreport.*) ・ 帳票フォームのレポートや各セクションおよび各表示オブジェクトに対応したクラス群です。 ・ 代表的なクラスは、次のとおりです。

XReport 帳票フォームのレポートに対応するクラスです。 帳票出力クラス群の一番基本となるクラスです。 ・生成した PDF を文字列として取得 ・生成した PDF をファイルに出力 ・生成した PDF をストリーム(OutputStream)に出力

ReportMailer

メール機能を提供するクラスです。 ・生成した PDF をメールに添付 ・生成した PDF の URL をメールで送付

ReportEventListner

レポート生成時のイベントを取得することのできるインターフェースです。

DirectPrint プリンタに直接印刷を出力するクラス

DirectImage

画像イメージ(JPG,PNG)を出力するクラス

レポート生成時に取得することのできるイベントは下記の通りです。

メソッド名 説明

beforePrintSection セクション表示前イベント

afterPrintSection セクション表示後イベント

beforeCreatePDF PDF 生成前イベント

afterCreatePDF PDF 生成後イベント

newPage 改ページ発生時イベント

Page 8: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 3 章 Engine コンポーネント解説 8

データ管理基本クラス群(jp.co.tenartni.data.*) ・ データを行と列として操作する為のオブジェクトが提供されています。 ・ 取り扱うデータ型は文字、数値、日付等で、RDB のデータ型とのマッピングもここで定義されています。 ・ 代表的な操作オブジェクトとして次のクラスがあります。

XRowSet 行列データの定義、値の追加、変更、削除が可能です。 このクラスは抽象クラスで、後述する SQLRowSet の親クラスです。

ParamSet 行の概念が無い任意のデータ項目を定義し、値を保持します。 主として SQL パラメータ等の少量データの管理に利用します。

RelationalRowSet XMLSchema データを行と列として操作する為のオブジェクトが提供されています。

【XRowSet 概念図】 ID (CHAR) NAME (VARCHAR2) AGE (NUMBER)

1 行目 0000 SMITH 30 2 行目 0001 JONES 36 3 行目 0002 ADAMS 27

・ イメージ的には、java.sql.ResultSet と似ています。 ・ 例えば、カーソル行を 2 行目に移動させ、”NAME”カラムの値を読み込むと”JONES”という値が取得できま

す。 ・ このようにカーソル行を移動させた後、値の取得や設定を行う以外に、行の削除や新規行の追加などの操作も

行うことができます。 【ParamSet 概念図】 NAME (VARCHAR2) AGE (NUMBER)

値 S 30 ・ XRowSet が行と列のデータを扱うのに対し、ParamSet は列のみになります。 ・ 行は存在しないので、カーソル行の移動や行の削除というような操作はありませんが、値の取得や変更は

XRowSet と同じように行うことができます。 ・ この ParamSet は、主に SQL のパラメータとして利用します。

Page 9: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 3 章 Engine コンポーネント解説 9

【RelationalRowSet 概念図】

RelationalRowSet は SQLRowSet、TextRowSet、などの XRowSet を保持することのできるクラスです。又、

リレーションを持つ複数の XRowSet も管理することができます。RelationalRowSet は複数の XRowSet を

名前で管理します。

RelationalRowSet に設定する RowSetName 名は、WRC Designer 上で設定した「データ行セット名」と同

じ名前にする必要があります。

RelationalRowSet クラスデータ定義 XML 作成方法

データ定義 XML ファイル

RelationalRowSet が読み込むデータ定義 XML ファイルは、定義名タグで囲んだ、「データ定義部」と「データ部」の

二つの部分に分割できます。「データ定義部」は RelationalRowSet で扱う行データの項目名と型を XMLSchema 形

式で記述します。「データ部」は RelationalRowSet で保持するデータを「データ定義部」で宣言した形式で記述しま

す。

各部分は別々のファイルに定義して、別々RelationalRowSet に読み込ませることも可能です。2つの部分を一つの

ファイルに記述する場合は、「データ定義部」を「データ部」よりも上部に記述する必要があります。

RelationalRowSet

XRowSet “Main_EMP”

WRC Designer で設定

したレポートのプロ

パティ「データ行セット

名」と同じ名前を指定

します。!

WRC Designer

ID NAME AGE

01 SMITH 30

02 JONES 36

XRowSet “Sub_EMP”

ID SAL CODE

01 5000 101

02 6000 103

Page 10: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 3 章 Engine コンポーネント解説 10

<?xml version="1.0" encoding="Windows-31J" ?> <EmpDataSet xmlns="http://www.10art-ni.co.jp/EmpDataSet.xsd"> <!—定義名タグ <!--データ定義部--> <xs:schema id="EmpDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" > <xs:element name="EmpDataSet"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="EMP_DPT"> <xs:complexType> <xs:sequence> <xs:element name="EMPLOYEE_NAME" type="xs:string" /> <xs:element name="EMPLOYEE_CODE" type="xs:string" /> <xs:element name="DEPARTMENT_NAME" type="xs:string" /> <xs:element name="ADDRESS" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> <xs:unique name="EmpDataSetKey1" > <xs:selector xpath=".//EMP_DPT" /> <xs:field xpath="EMPLOYEE_CODE" /> </xs:unique> </xs:element> </xs:schema> <!--データ部--> <EMP_DPT> <EMPLOYEE_NAME>松田 清文</EMPLOYEE_NAME> <EMPLOYEE_CODE>20010010</EMPLOYEE_CODE> <DEPARTMENT_NAME>営業部</DEPARTMENT_NAME> <ADDRESS>東京都千代田区 1-1</ADDRESS> </EMP_DPT> <EMP_DPT> <EMPLOYEE_NAME>長嶋 幸宏</EMPLOYEE_NAME> <EMPLOYEE_CODE>20010011</EMPLOYEE_CODE> <DEPARTMENT_NAME>製品開発部</DEPARTMENT_NAME> <ADDRESS>神奈川県茅ヶ崎市 4-4-5</ADDRESS> </EMP_DPT> </EmpDataSet>

データ定義部 RelationalRowSet オブジェクトには複数の RowSet オブジェクト、データベースで言うところのテーブルデータを、

保持することができます。データ定義部では、保持する RowSet オブジェクトに所属する、カラムの名称と型の情報と、

RowSet 同士の外部参照キーを、XMLSchema 形式で記述し定義します。

実際の定義部の記述方法は下記の通りです。

1. schema タグで囲み、XMLSchema の宣言を行います。

schema タグの属性としてスキーマタグの名前空間の名前付けをします。名前付け方法は schema タグの属

性として、

“xmlns:[名称]=”http://www.w3.org/2001/XMLSchemna””

を記述します。[名称]にはデータ定義部の名称として任意の文字列を指定します。この文字列を定義部で

記述される全てのタグ名の先頭に必ず記述し、タグ名と名称の間には“:”(コロン)を記述します。

2. element タグを記述します。

name 属性には定義名タグとに使用した文字列を記述してください。

3. complexType タグを記述します。

4. choice タグを記述します。

Page 11: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 3 章 Engine コンポーネント解説 11

5. element タグを記述します。

この element タグの間に RowSet のカラム定義を行います。name 属性には、定義する RowSet の名称を指

定します。この名称は、データ部で行を囲むタグの名称になります。

6. complexType タグを記述します。

7. sequence タグを記述します。

8. element タグにカラム情報を記述します。

name 属性にカラム名、type 属性に型を記述します。minOccurs 属性に0を指定すると NULL 不可のカラム

を作成することができます。name と type 属性は必須で、minOccurs 属性はオプションです。このタグは最後

にスラッシュを入れてタグ自身を閉じてください。type に指定できる型名は「型名とマッピング」を参照してく

ださい。

また type によって、追加属性(文字列の長さ等)を指定することができます。詳しくは「型名とマッピング」を

参照してください。

9. 同じ RowSet に定義したいカラムの数だけ 8 の element タグを記述します。

10. 7 の sequence タグを閉じます。

11. 6 の complexType タグを閉じます。

12. 5 の element タグを閉じます。

13. 他に定義したい RowSet がある場合、5~12 の工程を行います。

14. 5の element タグを閉じます。

15. 4の choice タグを閉じます。

16. 3 の complexType タグを閉じます。

3~16での定義した RowSet のリレーション(関係)を定義したい場合 17~25 までの工程を行います。

17. unique タグを記述します。

他の RowSet から参照される、一意キーを定義します。name 属性に名称を指定します。

18. selector タグを記述します。

xpath 属性に一意キーを指定する RowSet を特定するためのパスを指定します。サンプルを参考にしてく

ださい。このタグは最後にスラッシュを入れてタグ自身を閉じます。

19. field タグを記述します。

xpath 属性に一意キーのカラム名を特定するためのパスを指定します。サンプルを参考にしてください。こ

のタグは最後にスラッシュを入れてタグ自身を閉じます。

20. 一意キーとなるカラムが複数ある場合は 19 の field タグを記述します。

21. 17 の unique タグを閉じます。

22. keyref タグを記述します。

このタグでは、外部参照キーを定義します。name 属性に適当な外部参照名をつけ、refer 属性に、17 で定

義した参照される一意キーでの定義ある、unique タグの name 属性の値を指定します。

23. selector タグを記述します。

xpath 属性に、参照元のカラムの所属する RowSet を特定するためのパスを指定します。サンプルを参考

にしてください。このタグは最後にスラッシュを入れてタグ自身を閉じます。

24. field タグを記述します。

xpath 属性に参照元カラム名を特定するためのパスを指定します。サンプルを参考にしてください。このタ

グは最後にスラッシュを入れてタグ自身を閉じます。

25. 他に設定したいリレーションがある場合は17から24を行います。

26. 2 の element タグを閉じます。

27. 1のスキーマタグを閉じます。

以上で定義部の記述が完了します。

Page 12: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 3 章 Engine コンポーネント解説 12

データ定義部の例 <?xml version="1.0" encoding="Windows-31J" ?> <EmpDataSet xmlns="http://www.10art-ni.co.jp/EmpDataSet.xsd"> <xs:schema id="EmpDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" > <xs:element name="EmpDataSet" > <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="EMP_DPT"> <xs:complexType> <xs:sequence> <xs:element name="EMPLOYEE_NAME" type="string" /> <xs:element name="EMPLOYEE_CODE" type="string" /> <xs:element name="DEPARTMENT_NAME" type="string" /> <xs:element name="ADDRESS" type="string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="ESTIMATE"> <xs:complexType> <xs:sequence> <xs:element name="TITLE" type="xs:string" /> <xs:element name="CUSTOMER_NAME" type="string" minOccurs="0" /> <xs:element name="TOTAL_PRICE" type="decimal" length=”7” /> <xs:element name="GRAND_TOTAL" type="decimal" minOccurs="0" /> <xs:element name="CREATE_USERID" type="string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> <xs:unique name="EmpDataSetKey1"> <xs:selector xpath=".//EMP_DPT" /> <xs:field xpath="EMPLOYEE_CODE" /> </xs:unique> <xs:keyref name="EMP_DPTESTIMATE" refer="EmpDataSetKey1"> <xs:selector xpath=".//ESTIMATE" /> <xs:field xpath="CREATE_USERID" /> </xs:keyref> </xs:element> </xs:schema>

Page 13: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 3 章 Engine コンポーネント解説 13

データ部 データパートは RowSet に取り込むデータを定義します。データは RowSet の名称のタグで、カラム名称のタグで

値を挟んだものを、さらに挟んだものを一行のデータとなります。複数の行を指定することができます。複数の

RowSet が定義されている場合は、複数の形式の行を混在させることも可能です。

データ部の例 <EMP_DPT> ←RowSet の名称 <EMPLOYEE_NAME>松田 清文</EMPLOYEE_NAME> ←カラム名 EMPLOYY_NAME の値 <EMPLOYEE_CODE>20010010</EMPLOYEE_CODE> ←カラム名 EMPLOYEE_CODE の値 <DEPARTMENT_NAME>営業部</DEPARTMENT_NAME>←カラム名 DEPARTMENT_NAME の値 <ADDRESS>東京都千代田区 1-1</ADDRESS> ←カラム名 ADDRESS の値 </EMP_DPT> ←行終了 <EMP_DPT> <EMPLOYEE_NAME>長嶋 幸宏</EMPLOYEE_NAME> <EMPLOYEE_CODE>20010011</EMPLOYEE_CODE> <DEPARTMENT_NAME>製品開発部</DEPARTMENT_NAME> <ADDRESS>神奈川県茅ヶ崎市 4-4-5</ADDRESS> </EMP_DPT> <ESTIMATE> ←上とは違う RowSet の行を指定する <TITLE>新島産業様向け PC の導入</TITLE> <CUSTOMER_NAME>新島産業</CUSTOMER_NAME> <TOTAL_PRICE>750000</TOTAL_PRICE> <GRAND_TOTAL>787500</GRAND_TOTAL> <CREATE_USERID>20010010</CREATE_USERID> </ESTIMATE>

データ型とマッピング 定義部で使用できるデータ型とRowSetのカラム型マッピング情報、及び、同時に指定できる追加属性の情報を下

記に示します。

一行のデータ

No. XMLデータ型 Java型 追加属性 追加属性内容

1 string java.lang.String length 入力できる最大バイト数

2 boolean boolean

3 byte byte

4 short short

5 int int

6 long long

7 float float

8 double double

precision 数値全体の桁数

scale 小数点以下の桁数

10 dateTime java.sql.Timestamp format フォーマット

11 date java.sql.Date format フォーマット

12 time java.sql.Time format フォーマット

java.matn.BigDecimaldecimal9

Page 14: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 3 章 Engine コンポーネント解説 14

テキストデータを扱うためのクラス群(jp.co.tenartni.data.text.*) ・ テキストデータ(CSV、固定長)を行と列として操作する為のオブジェクトが提供されています。 ・ 代表的な操作オブジェクトとして次のクラスがあります。

TextRowSet 前述の XRowSet を継承していますので、XRowSet と同様の操作をデータに対して行うことが出

来ます。(行列データの定義、値の追加、変更、削除) テキストデータに対して、以下の操作を行うことができます。

テキストファイルを読み込み、RowSet にデータを設定する。 テキストデータ(String)を読み込み、RowSet にデータを設定する。 RowSet のデータをテキストファイルとして保存する。 RowSet のデータをテキストデータ(String)として取得する。

◆CSV データの入出力について

CSV データを扱う場合、以下の入出力形式を指定することができます。指定しない場合は、全てデータとして

入出力を行います。なお、上記形式 2、3 を利用する場合は、以下の例 2、例 3 のように、CSV データの入出力

前にカラムの追加処理を行う必要があります。

1. jp.co.tenartni.data.TextSchema.SPECIFIED_NAME_AND_TYPE

1行目[カラム名] + 2行目[カラムタイプ] + 3行目以降[データ]

2. jp.co.tenartni.data.TextSchema.SPECIFIED_NAME

1行目[カラム名] + 2行目以降[データ]

3. jp.co.tenartni.data.TextSchema.ONLY_DATA

1行目以降[データ](デフォルト)

◆固定長データの入出力について

レコード長が固定のデータを読み込むことができます。

各項目の長さは、RowSet に追加したカラムに対して設定します。

データ読み込みの際、レコードの長さ > カラムの長さの合計 である場合、

データの先頭からカラムの長さの合計分のデータを読み込みます。(残りのデータは無視されます。)

また、読み込み時にレコードのある項目を読み飛ばすことはできません。

データ読み込みの際、カラムのデータ型が以下のものに関しては、項目の前後半角スペースをトリミングして

RowSet にデータを設定します。

BYTE、SHORT、LONG、INT、FLOAT、DOUBLE、BOOLEAN、BIGDECIMAL、DATE、TIME、TIMESTAMP

⇒ 日付型のデータを読み込む際は、適切なフォーマットパターンを設定してください。

⇒ 数値型の場合でデータ出力時に左ゼロ詰めを行いたい場合は、フォーマットパターンを指定してく

ださい。

※STRING 型は TextRowSet の StringTrim プロパティまたは BasicColumn の TrimType プロパティの設定によ

りトリミングについての振る舞いが変化します。デフォルトはスペースのトリミングは行われません。

Page 15: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 3 章 Engine コンポーネント解説 15

JDBCラッパークラス群(jp.co.tenartni.sql.*) ・ JDBC API をラップするクラスが提供されています。 ・ ここで提供されているクラスを使用すると、JDBC API を一切使用せずにデータベースアプリケーションの実装

が可能となります。 ・ 代表的なクラスは、次のとおりです。

SQLHandler JDBC API ラッパーです。

SQLRowSet 前述の XRowSet を継承しています。 データベースから読み込んだデータを RowSet として格納し、値の追加、変更、削除をすることが

可能です。 【SQLRowSet 概念図】 ・ SQLHandler に JDBC の各プロパティ(ドライバクラス名、URL、ユーザ名、パスワード)を設定するか、

JDBCConnection を設定することでデータベースと接続およびデータのやりとりをすることができます。 SQLRowSet

◆このコンポーネントの概要

設定された SELECT 文を実行し、その結果を行と列のイメージで内部にキャッシュします。キャッシュデータに対し

ては項目値変更、行削除、行追加が可能であり、この結果をもとに更新 SQL を自動生成し、データベースを更新す

ることが可能です。

◆基本的な利用方法

当クラスを利用するには SQLHandler インスタンスが必要です。また当クラスは jp.co.tenartni.data.XRowSet を継承

しています。以下は SQLRowSet を使用するもっとも基本的なサンプルプログラムです。 public static void main(String[] args) {

SQLHandler sHandler = new SQLHandler();

SQLRowSet sRowSet = new SQLRowSet();

try {

sHandler.connect("oracle.jdbc.OracleDriver",

"jdbc:oracle:thin:@dbserver:1521:orcl", "wwb", "wwb");

sRowSet.setSqlHandler(sHandler);

sRowSet.setSQL("SELECT * FROM EMPLOYEE");

sRowSet.setActive(true);

for (int i=0; i<sRowSet.getRowCount(); i++) {

sRowSet.moveAt(i);

System.out.println("EMPLOYEE : " + sRowSet.getValueAsString("EMPLOYEE_NAME"));

}

} catch (Exception x) {

x.printStackTrace();

} finally {

try {

sRowSet.setActive(false);

sHandler.disConnect();

} catch (Exception x) {}

}

}

ID NAME AGE 1 0000 SMITH 30 2 0001 JONES 36

SQLHandler DB

Page 16: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 3 章 Engine コンポーネント解説 16

setSQL により実行すべき SELECT 文を設定し、setActive(true)によってその SELECT 文が実行され、その結果デ

ータがロードされます。JDBC 結果データに複数の行が含まれる場合、SQLRowSet はその全てをロードします。

RowCount は SQLRowSet 内のデータ行件数を示す読み取り専用プロパティです。setActive(true)は JDBC 結果デ

ータから読み取られた行数を示しています。

moveAt(i)は行データのカーソルを移動するメソッドです。整数値で示される位置の行データへアクセスが可能とな

ります。

getValueAsString は項目値を文字列として取り出すメソッドです。項目値に対するアクセスメソッドはこの他にもデー

タ型に応じたものなど多くバリエーションがあります。

⇒ 以上、データアクセスに関する詳細なメソッドに関しては XrowSet の JavaDoc を参照して下さい。

◆SQL パラメータの利用

SQLRowSet で実行する SELECT 文に SQL パラメータを埋め込み、実行時その値を指定することが可能です。以下

は前ページの SELECT 文に DEPARTMENT_CODE に対する Where 条件を追加し、その条件値を SQL パラメータ

とするサンプルコードです。

sRowSet.setSQL("SELECT * FROM EMPLOYEE" +

"WHERE DEPARTMENT_CODE = :PARAM_DEPARTMENT_CODE");

sRowSet.getParamSet().setValueAsObject("PARAM_DEPARTMENT_CODE", "1000");

sRowSet.setActive(true);

for (int i=0; i<sRowSet.getRowCount(); i++) {

sRowSet.moveAt(i);

System.out.print("EMPLOYEE : " + sRowSet.getValueAsString("EMPLOYEE_NAME"));

System.out.println(",DEPARTMENT_CODE : " +

sRowSet.getValueAsString("DEPARTMENT_CODE"));

}

JDBC API では SQL 文中にプレースホルダ"?"を用いてパラメータ指定し、そのアクセスには序数を用いる必要が

ありますが、WRC ではより自然な方法 -パラメータ名- による指定とアクセスを行う事が可能です。

WRC のコンポーネントは SQL 文中の”:” (コロン)から始まる変数名を SQL パラメータと認識します。上記の例で

は”:PARAM_DEPARTMENT_CODE”の個所です。またパラメータ名は任意の名づけをすることができます。

SQLRowSet は SELECT 文中に含まれるパラメータ変数指定を解析し、それに対応する項目をメンバーオブジェクト

ParamSet の中に自動的に構築します。

sRowSet.getParamSet().setValueAsObject~では構築されたパラメータ項目を名前で指定し、その値として”1000”

を設定しています。その後、アクティブ化(メソッド setActive(true))によって WHERE 句に該当するデータ行がロード

されます。

Page 17: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 17

第 4 章 サンプルプログラム ● 概要 WebReportCefe Engine を使用した様々なサンプルプログラムについて説明します。 使用する java、帳票フォーム XML ファイルは以下の場所にあります。

<CD_ROOT>¥Engine¥java¥sample¥src¥…java <CD_ROOT>¥Engine¥java¥sample¥form¥java¥…xml ※ WRC Designer に含まれている帳票フォームと同じものです。 ※ サンプルで使用するデータベースは Designer のインストール時に設定した Microsoft

Access を使用しています。設定及び詳細は Designer 導入ガイドを参照して下さい。 ◆ 基本的なプログラム作成

◆ パラメータを用いたプログラム作成 (ReportParam.java)

◆ オブジェクトの属性を変更するプログラム作成 (ReportChangeText.java)

◆ 1 行毎にオブジェクトの色を変更するプログラム作成 (ReportDataChangeEvent.java)

◆ PDF設定のデータの取得及び設定方法 (ReportPDFOption.java)

◆ PDFをメールに添付するプログラム作成 (ReportMailAttach.java)

◆ PDFのURLをメールで送付するプログラム作成 (ReportMailURL.java)

◆ 動的に画像データを取得するプログラム作成

(DynamicImageSample.java , DynamicImageXReport.java)

◆ 動的にグラフを作成しPDF出力するプログラム作成

(DynamicGraphSample.java , DynamicGraphXReport.java)

◆ プリンターにダイレクト印刷をするプログラム作成 (DirectPrintProductList.java)

◆ CSVファイルからPDF出力するプログラム作成 (ReportCSV.java)

◆ 任意のデータ(XRowSet)を使用したプログラム作成 (ReportTempRowSet.java)

◆ XMLSchemaファイルからPDF出力するプログラム作成 (ReportEstimateListWithXML.java)

◆ レポートのイベントを使用したプログラム作成 (ReportEvent.java)

◆ 複数の帳票フォームから1つのPDFを出力するプログラム作成 (ReportMultiPDF.java)

◆ 画像イメージを出力するプログラム作成 (DirectImageSample.java)

Page 18: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 18

基本的なプログラム作成 WRC Engine を使用して PDF を生成する Java プログラムを作成します。Engine は、設定された帳票フォームと、

Select 文の実行結果を元に PDF を生成します。Engine で PDF を出力するための基本的なコーディング手順

は以下のようになります。 ① 必要なインスタンスを作成する ② データベース情報を設定する ③ 帳票フォームを設定する ④ データソースを設定する ⑤ 帳票を生成する ① 必要なインスタンスを作成する まず、PDF 生成に必要なインスタンスを作成します。 XReport jp.co.tenartni.xreport パッケージのクラスです。

PDF を生成するための基本クラスです。

SQLHandler jp.co.tenartni.sql パッケージのクラスです。 JDBC のラッパークラスです。データベースに関する情報はここで設定します。

SQLRowSet jp.co.tenartni.sql パッケージのクラスです。 データベースから読み込んだデータを RowSet として格納し、値の追加、変更、削除をするこ

とが可能です。 ② データベース情報を設定する 次にデータベースに接続するための情報を SQLHandler に設定します。SQLHandler は後ほど SQLRowSet に

セットします。 メソッド名 説明 SetDriverName JDBC Driver 名を設定する。 SetDbUrl JDBC URL を設定する。 setDbUserName ユーザー名を設定する。 SetDbPassword パスワードを設定する。

※サンプルで使用するデータベースは Designer のインストール時に設定した Microsoft Accessを使用しています。設定及び詳細は Designer 導入ガイドを参照して下さい。

XReport rep = new XReport();

SQLHandler sqlHandler = new SQLHandler();

SQLRowSet sqlRowMain = new SQLRowSet();

sqlHandler.setDriverName("sun.jdbc.odbc.JdbcOdbcDriver");

sqlHandler.setDbUrl("jdbc:odbc:WRC_SAMPLE");

sqlHandler.setDbUserName("sa");

sqlHandler.setDbPassword("");

Page 19: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 19

③ 帳票フォームを設定する XReport クラスの loadProperty メソッドに帳票フォームを設定します。 帳票フォームのファイルパスは、上記のように URL 形式で設定します。これにより、帳票フォームの情報が

XReport に取り込まれた状態となります。 ④ データソースを設定する sqlRowMain.setSQL(rep.getSQL()) SQLRowSet に Select 文(rep.getSQL()により、帳票フォームから取得)をセットします。ここでセットされた Select文が実際に実行されるため、以下の例のように WHERE 句を追加することなども可能です。 sqlRowMain.setSqlHandler(sqlHandler) 先ほどデータベース情報を設定した SQLHandler を SQLRowSet にセットします。これにより、データベースへの

接続及び、データのやりとりを行うことができます。 rep.setRowSet(sqlRowMain) XReport に SQLRowSet をセットします。 レポートに設定するデータソースとして、DB、CSV、TEXT や任意の RowSet を設定することがきます。 データソース 使用するクラス

SQL SQLRowSet

XML RelationalRowSet

CSV、TEXT TextRowSet

任意の RowSet データ TempRowSet

次に説明する createPDF メソッドが呼ばれると、ここで設定した SQLRowSet を利用してデータベースに接続し、

データを取得します。 ⑤ 帳票を生成する XReport クラスの createPDF メソッドで PDF を生成します。 createPDF メソッドには以下の3つのタイプがあります。 返り値 引数 説明

String なし 作成された PDF は文字列として返されます。

なし String 引数のファイル名の PDF が作成されます。

なし OutputStream 引数のストリームに PDF ファイルを書き込みます.

上記いずれかの createPDF メソッドを呼び出すことで PDF を取得することができます。

rep.loadProperty("file:///c:/product_list.xml");

sqlRowMain.setSQL(rep.getSQL());

sqlRowMain.setSqlHandler(sqlHandler);

rep.setRowSet(sqlRowMain);

rep.createPDF("c:/product_list.pdf");

sqlRowMain.setSQL(rep.getSQL() + “WHERE A=B”);

Page 20: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 20

次ページのサンプル ReportProductList は、先ほどの手順に沿って作成したアプリケーションです。帳票「製品リ

スト」の PDF を生成することができます。 このアプリケーションを実行する手順は以下の通りです。 ① 以下の情報を実行環境に合わせて書き直します。 ・データベース情報(JDBCDriver 名、JDBC URL、ユーザー名、パスワード) ・帳票フォームのファイルパス(URL 指定) ・PDF の保存先ファイルパス ② ソースコードをコンパイルします。 ③ 実行します。 成功すると、帳票「製品リスト」の PDF が指定したファイルパスに生成されます。失敗した場合は、エラーメッセージ

を確認し、上記手順の設定項目が間違っていないか確認してください。 サンプル ReportProductList

import jp.co.tenartni.sql.*;

import jp.co.tenartni.xreport.*;

public class ReportProductList {

//① 必要なインスタンスを作成する

XReport rep = new XReport();

SQLHandler sqlHandler = new SQLHandler();

SQLRowSet sqlRowMain = new SQLRowSet();

public ReportProductList() {

try {

//② データベース情報を設定する

sqlHandler.setDriverName("sun.jdbc.odbc.JdbcOdbcDriver");

sqlHandler.setDbUrl("jdbc:odbc:WRC_SAMPLE ");

sqlHandler.setDbUserName("sa");

sqlHandler.setDbPassword("");

//③ 帳票フォームを設定する

rep.loadProperty("file:///c:/product_list.xml");

//④ SQL を設定する

sqlRowMain.setSQL(rep.getSQL());

sqlRowMain.setSqlHandler(sqlHandler);

rep.setRowSet(sqlRowMain);

//⑤ 帳票を生成する

rep.createPDF("c:/product_list.pdf");

System.out.println("completed.");

System.exit(0);

} catch (Exception e) {

System.out.println("error!! : " + e.toString());

System.exit(-1);

} finally {

try {

sqlHandler.disConnect();

} catch (Exception e) {

}

}

}

Page 21: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 21

パラメータを用いたプログラム作成 ◆ サンプルで使用するファイル ReportParam.java ◆ 概要 ここでは帳票フォームの SQL に WHERE 句を追加する方法及び、パラメータの利用方法について説明したいと思

います。使用する帳票フォームは製品リスト(product_list.xml)です。 尚、基本的なプログラミングについては,[基本的なプログラム作成]を参照して下さい。 ① WHERE 句及びパラメータ変数の追加 “:COST”はパラメータ変数です。 パラメータ変数を利用する場合は ⇒ “セミコロン” + “パラメータ名” として下さい。 ② ParamSet クラスのインスタンスの取得 パラメータを利用するには、SQLRowSet のインスタンスから getParamSet()で ParamSet クラスのインスタンスを取得します。 ③ パラメータに値を設定します パラメータのデータ型によって使用するメソッドが違います。 数値型を設定したい場合 ⇒ setInt(String columnName, int value) 文字列を設定したい場合 ⇒ setString(String columnName, String value) ※各クラス及びメソッドの詳細は JavaDoc を参照してください。

sqlRowMain.setSQL(rep.getSQL() + " WHERE COST > :COST ");

ParamSet param = sqlRowMain.getParamSet();

param.setInt("COST", 10000);

WebReporCafe では、セミコロンを指定したパラメータの他に、文字列を埋め込める特殊な

パラメータがあります。

SQL 中に"/*$ XXX $*/"という文字列を埋め込むと Type.STRING 型のパラメータが生

成され、パラメータ XXX に設定した値が SQL 実行時に埋め込まれます。

この形式のパラメータを利用すると、IN を使った選択条件も簡単に実現することができます。

※WebReporCafe Designer 上で実行することも可能です。

例:

rowset.setSQL("SELECT * FROM EMP /*$ WHERE_CLAUSE $*/");

rowset.getParamSet().setString("WHERE_CLAUSE", "AND DEPTNO IN ('1001', '2003', '3005')"); ↓ SQL 中の"/$* WHERE_CLAUSE $*/"の部分が"AND DEPTNO IN ('1001', '2003', '3005')"に

置き換えられて実行されます。すなわち

SELECT * FROM EMP WHERE DEPTNO IN ('1001', '2003', '3005')

の SQL が実行されることになります。

もう1つの方法!

Page 22: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 22

"/*$ XXX $*/"形式のパラメタは SQL injection のセキュリティホールになる危険性もありますので、

使用には十分気をつけてください。

例:

"UPDATE TBL_USER SET PASSWORD = :PASSWORD WHERE USERID = :USERID

/*$ WHERE_CLAUSE $*/"

の SQL で、"WHERE_CLAUSE"のパラメタに" OR 1 = 1" のような文字列を設定する

と全員のパスワードが書き換えられることになります。

/*$ XXX $*/ に当たる部分は、ユーザーが直接入力した文字を設定しないなどの対策を

行ってください。

注意!

Page 23: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 23

オブジェクトの属性を変更するプログラム作成 ◆ サンプルで使用するファイル ReportChangeText.java ◆ 概要 ここではレポート生成時にセクションやプリントオブジェクトの属性を Java プログラムの中から操作する方法について

説明します。 WRC Designer で作成したレイアウト情報(セクションやプリントオブジェクト)の属性を Java プログラム

の中から操作することが可能です。使用する帳票フォームは製品リスト(product_list.xml)です。

プログラムから Text の値を

変更します

Page 24: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 24

① ヘッダーセクションの Text オブジェクトを取得します

loadPropertyメソッドにより帳票フォーム(レイアウト定義用XMLファイル)を読み込んだ際、帳票フォームの各要素(テキスト、イメージ、バーコード、セクション等)に対応したクラスのインスタンスが作成され、各属性に対

応したプロパティがセットされます。

読み込んだオブジェクトに対して、rep.getPrintObject(“セクション名”,“表示オブジェクト名”)で指定した セクション内にある表示オブジェクトを取得することができます。“セクション名”及び“表示オブジェクト名”は WRC Designer で各オブジェクトのプロパティ[名前]で設定した値です。 取得したオブジェクトに対して正しい型で変換する必要があります。今回の例ではテキストを変更するので、 Text クラスで型変換を行いましたが、取得するクラスによって変更する必要があります。 (例) バーコード ⇒ jp.co.tenartni.xreport.Barcode

線・四角形・角丸四角形 ⇒ jp.co.tenartni.xreport. Graphics

イメージ ⇒ jp.co.tenartni.xreport.Image ② Text の値を変更します 取得した Text オブジェクトの属性を変更します。WRC Designer 上で設定できる全てのプロパティに対して値を変

更することが出来ます。ここでは、Text オブジェクトの「文字列」を変更します。

※各クラス及びメソッドの詳細は JavaDoc を参照してください。

public ReportChangeText(){

try{

// 必要なインスタンスを生成します

rep = new XReport();

sqlHandler = new SQLHandler();

sqlRowMain = new SQLRowSet();

// SQLHandler(JDBCラッパー)クラスのプロパティを設定する

sqlHandler.setDriverName("sun.jdbc.odbc.JdbcOdbcDriver");

sqlHandler.setDbUrl("jdbc:odbc:WRC_SAMPLE");

sqlHandler.setDbUserName("sa");

sqlHandler.setDbPassword("");

// 帳票フォーム(レイアウト定義XMLファイル)を読み込む

rep.loadProperty("file:///" + FILE_PATH + "/form/java/product_list.xml");

//①ヘッダーセクションのTextオブジェクトを取得します。

Text textHeader = (Text)rep.getPrintObject("PageHeader1","Text1");

//②Textの値を変更します。

textHeader.setValue("タイトルの変更");

// クエリー(SELECT文)を設定する

sqlRowMain.setSQL(rep.getSQL());

sqlRowMain.setSqlHandler(sqlHandler);

rep.setRowSet(sqlRowMain);

// レポート(PDF帳票)を生成する

rep.createPDF(FILE_PATH + "/pdf/ReportChangeText.pdf");

}

}

Page 25: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 25

1 行毎にオブジェクトの色を変更するプログラム作成 ◆ サンプルで使用するファイル ReportDataChangeEvent.java ◆ 概要 ここではデータイベントを取得して1行毎に Data オブジェクトのプロパティを変更する方法について説明します。

jp.co.tenartni.data.RowHandleEventListener クラスはレポートで設定されたデータソース(XRowSet)で発生するイ

ベントを取得することのできるインターフェースです。RowHandleEventListener クラスで取得することのできるイベン

トは下記の通りです。

メソッド名 説明

dataChanged データ変更時のイベント(行移動)

beforeSecureRow 行追加、行変更の確定前イベント

beforeDeleteRow 行追加、行変更の確定前イベント

onApplyFilter フィルタ適用時イベン

これらのメソッドを使用することでデータの状態や値によって、行毎に色や罫線の位置を変えるなどきめ細かい帳票

を実現することが可能です。使用する帳票フォームは製品リスト(product_list.xml)です。

※完成イメージ図

① RowHandleEventListener を implements します

上記のインターフェースを使用することで、データソースの値が変更するイベントを取得することができます

public class ReportPropertyChange implements RowHandleEventListener {

Page 26: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 26

② 表示オブジェクトの変数を定義します

動的に変更するクラスの変数を定義します。

③ Data オブジェクトを取得します

getSectionByName(“セクション名”).getPrintObject(“表示オブジェクト名”)で、指定したセクション内にある表

示オブジェクトを取得することができます。 “セクション名”及び“表示オブジェクト名”は ReportDesigner で各オブジェクトのプロパティ[名前]で設定した値

です。

④ SQLRowSet のインスタンスに RowHandleEventListener を登録します

SQLRowSet の addRowHandleEventListener メソッドに「this」を登録することによって、このクラスで

dataChanged()メソッドが呼ばれるようになります。 ⑤ dataChanged メソッド内を記述します

引数 operation が、RowHandleEventEvent.DONE_MOVE(現在行が移動)と一致する場合、try catch 節

に入ります。 rep.getRowSet().getCurrentRowIndex()というメソッドを使用することで現在のデータの行番号を取得すること

ができます。行番号を2で割った余りが“0”の場合は、Data オブジェクトの内部の色を黄色にしています。

※各クラス及びメソッドの詳細は JavaDoc を参照してください。

Data dataPrice = null;

Data dataCost = null;

Data dataProduct = null;

dataPrice = (Data) this.getSectionByName("PageDetail1").getPrintObject("DataPrice ");

sqlRowMain.addRowHandleEventListener(this);

if (rep.getRowSet().getCurrentRowIndex() % 2 == 0){

dataPrice.setFillColor(Color.yellow.getRGB());

dataProduct.setFillColor(Color.yellow.getRGB());

dataCost.setFillColor(Color.yellow.getRGB());

}else{

省略

Page 27: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 27

PDF 設定のデータの取得及び設定方法 ◆ サンプルで使用するファイル ReportPDFOption.java ◆ 概要 ここでは PDF 設定の取得と設定方法について説明します。 PDF 設定とは、JavaScript やセキュリティなどを設定できる機能です。 使用する帳票フォームは見積書1(estimate_list1.xml)です。この帳票は暗号化されており、PDF を開く際にパス

ワード認証する必要があります。 ここでは、そのパスワードを変更するプログラミングについて説明します。 ※ PDF 設定の詳細は WRC Designer のオンラインヘルプ[Designer の開発環境]の[各種ダイアログボック

ス:PDF 設定]を参照してください。 ※帳票サンプルの見積書1の詳細は、WRC Designer 導入ガイド[いろいろな帳票サンプル]の[見積書 1]

を参照して下さい。 ① PDFOption クラスを取得します getPDFOption()メソッドで PDFOption クラスのインスタンスを取得します。PDFOption クラスは PDF 設定に対応

したクラスです。JavaScript、アクション、セキュリティの設定をすることができるクラスです。 ② パスワードの値を設定します getEncript()メソッドでPDF設定の[セキュリティ]の情報を取得することができます。setUserPassword()メソ

ッドで[文書を開く時]のパスワードを設定することができます。

③ プログラムを実行して作成さた PDF が“test”で開くことを確認して下さい ※各クラス及びメソッドの詳細は JavaDoc を参照してください。

PDFOption option = rep.getPDFOption();

option.getEncript().setUserPassword("test");

Page 28: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 28

PDF をメールで添付するプログラム作成 ◆ サンプルで使用するファイル ReportMailAttach.java ◆ 概要 ReportMailAttach.java は、PDF を生成して、指定したメールアドレスに PDF を添付して、メール送信をします。 【メソッド sendPDFAsMailAttach】 ① ReportMailer クラスを利用して、PDF をメールに添付します ReportMailer クラスの sendMailAttach メソッドで指定したメールアドレスに PDF を添付することができます。 sendMailAttachメソッドの引数は下記の通りです。 ・ファイルパス ・ファイル名 ・メールの SMTP ホスト ・メールの From アドレス ・メールの To アドレス ・メールの Subject ・メールの本文 ・ XReport クラス ※各クラス及びメソッドの詳細は JavaDoc を参照してください。 ※メール機能を利用する場合、mail.jar 及び activation.jar のライブラリが必要です。

ライブラリの取得方法については、[補足説明: ライブラリについて]を参照して下さい。

省略

sqlRowMain.setSQL(rep.getSQL());

sqlRowMain.setSqlHandler(sqlHandler);

rep.setRowSet(sqlRowMain);

repMail.sendMailAttach(

FILE_PATH + "/pdf/",

"ReportMailAttach.pdf",

"smtp_host_name",

"from@mail_address",

"to@mail_address",

"製品リスト",

"添付ファイル:製品リストの PDF",

rep);

Page 29: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 29

PDF の URL をメールで送付するプログラム作成 ◆ サンプルで使用するファイル ReportMailURL.java ◆ 概要 ReportMailURL.java は、PDF を生成して指定したメールアドレスに PDF ファイルの場所を示す URL を送付し

ます。PDF のサイズが大きく、メールに添付できない場合などに使用します。 【メソッド sendMailURL】 ① ReportMailer クラスを利用して、PDF の URL をメールで送付します ReportMailer クラスの sendMailURL メソッドを使用すると URL、ファイルパスなどを記述することができます。 ReportMailURL.java では[メールの本文]に、PDF の URL を送付しています。 sendMailURLメソッドの引数は下記の通りです。(※メソッドの引数はsendMailAttachメソッドと同様です。) ・ファイルパス ・ファイル名 ・メールの SMTP ホスト ・メールの From アドレス ・メールの To アドレス ・メールの Subject ・メールの本文 ・ XReport クラス ※各クラス及びメソッドの詳細は JavaDoc を参照してください。

省略

sqlRowMain.setSQL(rep.getSQL());

sqlRowMain.setSqlHandler(sqlHandler);

rep.setRowSet(sqlRowMain);

repMail.sendMailURL(

FILE_PATH + "/pdf/",

"ReportMailAttach.pdf",

"smtp_host_name",

"from@mail_address",

"to@mail_address",

"製品リスト",

"下記URLよりファイルを取得してください。\n" +

"file:///c:/Program files/10art-ni/WebReportCafe

/Engine/sample/pdf/ReportMailAttach.pdf",

rep);

Page 30: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 30

動的に画像データを取得するプログラム作成

◆ サンプルで使用するファイル DirectImageXReport.java 、 DirectImageSample.java ◆ 概要

動的に画像データを取得するためのプログラムを作成します。

まず、サンプル帳票フォーム「DirectImageSample.xml」を ReportDeginer で開いてください。この帳票フォームには

「Image1」と「Image2」というイメージオブジェクトが存在しますが、どちらのイメージオブジェクトにも画像の取得先を

示す属性「イメージの場所」が指定されていないことが分かると思います。各イメージオブジェクトに対すイメージデ

ータを動的に作成し PDF 出力するためには、下記のようなプログラムを作成します。

1. XReport を継承し、画像作成メソッドを実装したクラスを作成する

まず、帳票作成クラスである jp.co.tenartni.xreport.XReport を継承し、XReport のメソッド

protected java.awt.Image createDirectImage(String imageName) throws Exception をオーバライドして、画像取得の処理を実装します。このメソッドに対する文字列型の引数には、イメージオブジェク

トの名前が渡されます。この引数により、現在処理されているイメージオブジェクト名を判定し、動的にイメージを作

成し、java.awt.Image 型で戻り値として返す処理を実装することにより、各イメージオブジェクトに動的にイメージを渡

すことができます。戻り値として null を返した場合は、イメージオブジェクトに設定されたパスから画像データが取得

されます。

外部から設定されたパスにより、イメージオブジェクトの”mage1”と”Image2”に対する画像を取得するメソッドを実装

したクラス DirectImageXReport のソースは下記のようになります。

package jp.co.tenartni.samples.wrc; import java.net.URL; import jp.co.tenartni.xreport.XReport; public class DirectImageXReport extends XReport { private String imageFilePath1 = null; private String imageFilePath2 = null; /** * 動的イメージを作成する。.<BR> */ protected java.awt.Image createDirectImage(String imageName) throws Exception { String imageFilePath; //イメージオブジェクト名によりイメージを取得するファイルパスを決定する if (imageName.equals("Image1")) { //イメージオブジェクト名がImage1だった場合 imageFilePath = imageFilePath1; } else if (imageName.equals("Image2")) { //イメージオブジェクト名がImage2だった場合 imageFilePath = imageFilePath2; } else { //イメージオブジェクト名がImage1及びImage2以外だった場合、処理を抜ける return null; } //イメージパスよりイメージを取得する URL url = new URL(imageFilePath ); java.awt.Image image = java.awt.Toolkit.getDefaultToolkit().getImage(url); java.awt.MediaTracker mt = new java.awt.MediaTracker(new java.awt.Canvas()); mt.addImage(image, 0); mt.waitForID(0); // 読み込みに失敗した場合は、例外を発生させる if (mt.isErrorID(0)) throw new Exception("Load Error in MediaTracker"); //取得したイメージを返す return image; }

Page 31: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 31

/** * Image1を取得するファイルパスを設定 */ public void setImageFilePath1(String imageFilePath1) { this.imageFilePath1 = imageFilePath1; } /** * Image2を取得するファイルパスを設定 */ public void setImageFilePath2(String imageFilePath2) { this.imageFilePath2 = imageFilePath2; } }

2. 1.で実装したクラスを使用して PDF を作成するプログラムを作成する

1.実装したクラスを使用して PDF 作成するプログラムを作成します。拡張した部分以外は XReport と同様な方法で

使用できます。1 で実装した DirectImageXReport クラスはイメージオブジェクトの Image1 と Image2 に対するファイ

ルパスをそれぞれ指定する必要があります。

DirectImageXReport クラスを使用し PDF を作成するクラス DirectImageSample は下記のようになります。

package jp.co.tenartni.samples.wrc; import jp.co.tenartni.pdf.digsig.DigitalSigner; import jp.co.tenartni.sql.*; import jp.co.tenartni.xreport.*; /** * 動的イメージ取得サンプルです。.<BR> */ public class DirectImageSample { //ファイルパス(※注意 環境にあわせて変更して下さい。) private static final String FILE_PATH = "c:/Program Files/10art-ni/WebReportCafe/Designer/sample"; public DirectImageSample() { // ① 必要なインスタンスを作成する SQLHandler sqlHandler = new SQLHandler(); SQLRowSet sqlRowMain = new SQLRowSet(); // ②XReportを継承しイメージ取得メソッドをオーバライドしたクラスをインスタンス化 DirectImageXReport rep = new DirectImageXReport(); try { // ③イメージのパスを設定する // Image1に対するファイルパスを設定する String imageFilePath1 = "file:///" + FILE_PATH + "/form/image/10art-ni_logo.gif"; rep.setImageFilePath1(imageFilePath1); // Image2に対するファイルパスを設定する String imageFilePath2 = "file:///" + FILE_PATH + "/form/image/10art-ni_logo.gif"; rep.setImageFilePath2(imageFilePath2); // ④ データベース情報を設定する sqlHandler.setDriverName("sun.jdbc.odbc.JdbcOdbcDriver"); sqlHandler.setDbUrl("jdbc:odbc:WRC_SAMPLE"); sqlHandler.setDbUserName("sa"); sqlHandler.setDbPassword("");

Page 32: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 32

// ⑤ 帳票フォームを設定する rep.loadProperty("file:///" + FILE_PATH + "/form/java/DirectImageSample.xml"); // ⑥ SQL を設定する sqlRowMain.setSQL(rep.getSQL()); sqlRowMain.setSqlHandler(sqlHandler); rep.setRowSet(sqlRowMain); // ⑦ 帳票を生成する rep.createPDF(FILE_PATH + "/pdf/DirectImageSample.pdf"); System.out.println("completed."); System.exit(0); }

catch (Exception e) { System.out.println("error!! : " + e.toString()); System.exit(-1); } finally { try { sqlHandler.disConnect(); } catch (Exception e) { } } } public static void main(String[] args) { DirectImageSample reportProductList = new DirectImageSample(); } }

このサンプルでは、既存のイメージを取得してイメージオブジェクトに割り当てましたが、createDirectImage メソッド

内で、java.awt.Image オブジェクトを作成する処理を記述すれば、動的に作成した画像を PDF に表示することがで

きます。

Page 33: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 33

動的にグラフを作成し PDF 出力するプログラム作成 ◆ サンプルで使用するファイル DirectImageGraphXReport.java 、 DirectImageGraphSample.java ◆ 概要

動的にグラフを作成しPDFに出力するプログラムを作成します。

この例では、JFreeChat 1.0.9(http://www.object-refinery.com/jfreechart/)というフリーのグラフ作成コンポ

ーネントを使用しています。JFreeChartの使用方法については、JFreeChartのホームページ等を参考にしてくださ

い。

まず、サンプル帳票フォーム「DirectImageGraphSample.xml」を ReportDeginer で開いてください。この帳票フォー

ムには「Graph1」というイメージオブジェクトが存在しますが、画像の取得先を示す属性「イメージの場所」が指定さ

れていないことが分かると思います。このイメージオブジェクトに対してグラフを作成し PDF 出力するためには、下記

のようなプログラムを作成します。

1. XReport を継承し、画像作成メソッドを実装したクラスを作成する

まず、帳票作成クラスである jp.co.tenartni.xreport.XReport を継承し、XReport のメソッド

protected java.awt.Image createDirectImage(String imageName) throws Exception をオーバライドして、グラフ作成の処理を実装します。このメソッドに対する文字列型の引数には、イメージオブジェ

クトの名前が渡されます。この引数により、現在処理されているイメージオブジェクト名を判定し、動的にイメージを

作成し、java.awt.Image型で戻り値として返す処理を実装することにより、各イメージオブジェクトに動的にイメージデ

ータを渡すことができます。戻り値として null を返した場合は、イメージオブジェクトに設定されたパスから画像デー

タが取得されます。

外部からデータベースの接続情報を設定し、データベースから取得したデータからグラフを作成し、

java.awt.Image オブジェクトを返すメソッドを実装したクラス DirectImageGraphXReport のソースは下記のようにな

ります。 package jp.co.tenartni.samples.wrc; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.JDBCCategoryDataset; import jp.co.tenartni.xreport.XReport; public class DirectImageGraphXReport extends XReport { private String JDBCDriverName = null; private String DBUser = null; private String DBPassword = null; private String DBUrl = null; /** * JFreeChartを使用してグラフを作成する。.<BR> */ protected java.awt.Image createDirectImage(String imageName) throws Exception { java.awt.Image image = null; if (imageName.equals("Graph1")) { //イメージ名がグラフだった場合、グラフを作成する StringBuffer sql = new StringBuffer(); sql.append("SELECT"); sql.append(" b.PRODUCT_NAME as 製品名,"); sql.append(" SUM(a.PRICE) as 売上金額合計"); sql.append(" FROM ESTIMATE_PRODUCT a, PRODUCT b"); sql.append(" WHERE a.PRODUCT_CODE = b.PRODUCT_CODE"); sql.append(" GROUP BY b.PRODUCT_NAME"); sql.append(" ORDER BY b.PRODUCT_NAME");

Page 34: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 34

//グラフデータ取得

JDBCCategoryDataset dataset = new JDBCCategoryDataset(DBUrl, JDBCDriverName, DBUser, DBPassword);

dataset.executeQuery(sql.toString()); // グラフの構築 JFreeChart chart = ChartFactory.createBarChart("商品売上比較","商品","売上", dataset,

PlotOrientation.HORIZONTAL, true, true, false); chart.getCategoryPlot().getDomainAxis().setVisible(true); //グラフを取得 image = chart.createBufferedImage(900,600); } else { //イメージオブジェクト名がImage1及びImage2以外だった場合、処理を抜ける return null; } return image; } /** * データベースパスワードをセットする * @param dBPassword The dBPassword to set */ public void setDBPassword(String dBPassword) { DBPassword = dBPassword; } /** * データベースユーザIDをセットする */ public void setDBUser(String dBUser) { DBUser = dBUser; } /** * JDBCドライバクラス名を指定する */ public void setJDBCDriverName(String jDBCDriverName) { JDBCDriverName = jDBCDriverName; } /** * JDBC URLを指定する */ public void setDBUrl(String dBUrl) { DBUrl = dBUrl; } }

2. 1.で実装したクラスを使用して PDF を作成するプログラムを作成する

1.実装したクラスを使用して PDF 作成するプログラムを作成します。拡張した部分以外は XReport と同様な方法で

使用できます。1 で実装した DirectImageGraphXReport クラスはデータベース接続情報をセットする必要がありま

す。

DirectImageGraphXReport クラスを使用し PDF を作成するクラス DirectImageGraphSample は次頁のようになり

ます。

Page 35: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 35

package jp.co.tenartni.samples.wrc; import jp.co.tenartni.pdf.digsig.DigitalSigner; import jp.co.tenartni.sql.*; import jp.co.tenartni.xreport.*; public class DirectImageGraphSample { //ファイルパス(※注意 環境にあわせて変更して下さい。) private static final String FILE_PATH =

"c:/Program Files/10art-ni/WebReportCafe/Designer/sample";

public DirectImageGraphSample() { // ① 必要なインスタンスを作成する SQLHandler sqlHandler = new SQLHandler(); SQLRowSet sqlRowMain = new SQLRowSet(); // ②XReportを継承しイメージ取得メソッドをオーバライドしたクラスをインスタンス化 DirectImageGraphXReport rep = new DirectImageGraphXReport(); try { // ③拡張したXReportにデータベースの情報を設定する rep.setJDBCDriverName("sun.jdbc.odbc.JdbcOdbcDriver "); rep.setDBUrl("jdbc:odbc:WRC_SAMPLE"); rep.setDBUser("sa"); rep.setDBPassword(""); // ④ SQLRowSetにデータベース情報を設定する sqlHandler.setDriverName("sun.jdbc.odbc.JdbcOdbcDriver "); sqlHandler.setDbUrl("jdbc:odbc:WRC_SAMPLE"); sqlHandler.setDbUserName("sa"); sqlHandler.setDbPassword(""); // ⑤ 帳票フォームを設定する rep.loadProperty("file:///" + FILE_PATH + "/form/java/DirectImageGraphSample.xml"); // ⑥ SQL を設定する sqlRowMain.setSQL(rep.getSQL()); sqlRowMain.setSqlHandler(sqlHandler); rep.setRowSet(sqlRowMain); // ⑦ 帳票を生成する rep.createPDF(FILE_PATH + "/pdf/DirectImageGraphSample.pdf"); System.out.println("completed."); System.exit(0); } catch (Exception e) { System.out.println("error!! : " + e.toString()); System.exit(-1); } finally { try { sqlHandler.disConnect(); } catch (Exception e) { } } } public static void main(String[] args) { DirectImageGraphSample reportProductList = new DirectImageGraphSample(); } }

上記サンプルを実行します。

Page 36: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 36

DirectImageGraphSample を実行すると下記のような PDF が出力されます。

Page 37: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 37

プリンターにダイレクト印刷をするプログラム作成 ◆ サンプルで使用するファイル DirectPrintProductList.java ◆ 概要 DirectPrintProductList.java は、指定したプリンターにダイレクトに帳票を印刷します。 PDF のプレビューを行わずにプリンターへ直接印刷することができます。 使用する帳票フォームは製品リスト(product_list.xml)です。 ダイレクト印刷をする場合も、XReport クラスの基本的な使用方法は同じです。印刷を行う場合は、PDF

を生成する createPDF()メソッドの代わりに DirectPrint クラスを利用して出力します。

① DirectPrint クラス生成してプリンター設定を行います DirectPrint クラスのコンストラクタに XReport クラスのインスタンスを設定して、DirectPrint クラスを生成します。 DirectPrint クラスはオプションで、下記の設定をすることができます。 コピー部数の設定 setCopies(int copies) ※初期値は1です 印刷ジョブ名の設定 setJobName(String jobName)

ダイレクト印刷を行う場合は、プリンター名の設定は必須です。setPrinterName(String printerName)メソッド

でプリンター名を設定します。プリンター名とは、OS が認識しているプリンターの名前です。

サンプルでは getDefaultPrinterName()メソッドで OS が認識しているデフォルトのプリンター名を取得して、

プリンター名を設定しています。

② プリンターに直接印刷を行います

プリンターにダイレクト印刷する場合は、XReport クラスの createPDF()メソッドではなく、DirectPrint クラスの print()メソッドを使用して、印刷を行います。 ※各クラス及びメソッドの詳細は JavaDoc を参照してください。

/* ① ダイレクト印刷オブジェクトの設定を行う */

DirectPrint directPrint = new DirectPrint(rep);

// コピー部数の設定

directPrint.setCopies(1);

// プリンターのジョブ名の設定

directPrint.setJobName("product_list");

// デフォルトのプリンター名を取得します

String printerName = DirectPrint.getDefaultPrinterName();

// プリンター名を設定します

directPrint.setPrinterName(printerName);

/* ② 帳票を印刷します */

directPrint.print();

Page 38: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 38

CSV ファイルから PDF 出力するプログラム作成 ◆ サンプルで使用するファイル ReportCSV.java ◆ 概要 ReportCSV.java は、csv ファイルからデータを読込み PDF を生成します。 WebReportCafe ではデータベースからだけではなく、テキストデータ(CSV、固定長)から PDF を生成することが出

来ます。使用する帳票フォームは製品リスト(product_list.xml)です。 ① TextRowSet クラスのインスタンスを生成します

テキストデータ(CSV、固定長)を使用する場合は、TextRowSet を使用します。TextRowSet はテキストファイルを読み

込み、RowSet にデータを設定することや、RowSet のデータをテキストファイルとして保存することができます。

② CSV 入出力の方法を設定します

CSV データを扱う場合、3つの入出力形式を指定することができます。指定しない場合は、全てデータとして入出力

を行います。ここでは、下記のcsvファイルを使用していますので、TextSchema.SPECIFIED_NAME_AND_TYPE

を指定しています。

1. jp.co.tenartni.data.TextSchema.SPECIFIED_NAME_AND_TYPE

1行目[カラム名] + 2行目[カラムタイプ] + 3行目以降[データ]

2. jp.co.tenartni.data.TextSchema.SPECIFIED_NAME

1行目[カラム名] + 2行目以降[データ]

3. jp.co.tenartni.data.TextSchema.ONLY_DATA

1行目以降[データ](デフォルト)

③ CSV ファイルを読込みます ④ CSV ファイルを読込みます ImportTextFile(String fileURL)メソッドは csv ファイルを読込み RowSet にデータを設定します。

以上でデータの準備が整いましたので、XReport に RowSet を設定して PDF を生成します。 ※各クラス及びメソッドの詳細は JavaDoc を参照してください。

/* ① TextRowSet クラスのインスタンスを生成します */

TextRowSet text = new TextRowSet();

/* ② テキストスキーマの設定 */

text.setTextSchema(TextSchema.SPECIFIED_NAME_AND_TYPE);

/* ③ CSV ファイルのロード */

text.ImportTextFile("file:///" + FILE_PATH + "/data/product_list.csv");

[ product_list.csv ファイル ]

PRODUCT_NAME,COST,LIST_PRICE・・・カラム名

STRING,INT,INT ・・・カラムタイプ

Xe-one 2GHD,1000,200000 ・・・以下データ

フェニック 12 基本セット CSV,150000,300000

//④レポートにデータを設定します

rep.setRowSet(text);

//レポート(PDF 帳票)を生成する

rep.createPDF(FILE_PATH + "/pdf/ReportCSV.pdf");

Page 39: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 39

任意のデータ(XRowSet)を使用したプログラム作成 ◆ サンプルで使用するファイル ReportTempRowSet.java ◆ 概要 TempRowSet クラスを使用するとデータソースに任意の RowSet を設定することができます。 TempRowSet クラスは、レポートで使用するデータソースが DB や Text 以外の場合、例えば Web アプリケーショ

ンから入力されたパラメータ値をデータソースとして使用したい場合などに使用します。 使用する帳票フォームは製品リスト(product_list.xml)です。

データソース 使用するクラス SQL SQLRowSet XML RelationalRowSet CSV、TEXT TextRowSet 任意 TempRowSet

① TempRowSet クラスのインスタンスを生成してデータを設定します

TempRowSet クラスのインスタンスを生成します。AddColumn メソッドを使用して"PRODUCT_NAME"、"COST"、

"LIST_PRICE"の3つのカラム情報を定義します。setActive(true)により TempRowSet に対するデータ入出力が

可能となります。AppendRow メソッドを使用して行を追加し、各カラムに対して値を設定します。 【作成された TempRowSet のデータ】 PRODUCT_NAME (STRING) COST (INT) LIST_PRICE (INT) 1 行目 TempRowSet のサンプル RowNo = 0 0 0 2 行目 TempRowSet のサンプル RowNo = 1 10 50 3 行目 TempRowSet のサンプル RowNo = 2 20 100 4 行目 TempRowSet のサンプル RowNo = 3 30 150 5 行目 TempRowSet のサンプル RowNo = 4 40 200

※各クラス及びメソッドの詳細は JavaDoc を参照してください。

/* ① TemRowSet クラスの作成 */

private TempRowSet getTempRowSet()throws Exception{

//カラム情報を追加します。

TempRowSet tRowSet = new TempRowSet();

tRowSet.addColumn("PRODUCT_NAME", Type.STRING);

tRowSet.addColumn("COST", Type.INT);

tRowSet.addColumn("LIST_PRICE", Type.INT);

tRowSet.setActive( true );

for (int i = 0 ; i < 5 ; i ++){

//行を追加します

tRowSet.appendRow();

//各カラムにデータを設定します。

tRowSet.setString("PRODUCT_NAME" , "TempRowSet のサンプル RowNo = " + i );

tRowSet.setInt("COST", i*10);

tRowSet.setInt("LIST_PRICE", i*50);

}

return tRowSet;

}

Page 40: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 40

XMLSchema ファイルから PDF 出力するプログラム作成 ◆ サンプルで使用するファイル ReportEstimateListWithXML.java ◆ 概要 ReportEstimateListWithXML.java は、XMLSchema ファイルからデータを読込み PDF を生成します。

WebReportCafe ではデータベースからだけではなく、テキストデータ(CSV、固定長、XML)から PDF を生成すること

が出来ます。使用する帳票フォームは製品リスト(estimate_list_emp1_XML.xml)です。

① RelationalRowSet を設定します RelationalRowSet のインスタンスを作成し、指定したファイルから XMLSchema を読み込みます。

XMLSchema を読み込む場合は、RelationalRowSet を使用します。RelationalRowSet は XMLSchema データを読み

込み、関係を定義した複数の RowSet にデータを設定することや、RowSet のデータを XMLSchema ファイルとして保

存することができます。

※RelationalRowSet につきましては、第 3 章 Engine コンポーネント解説を参照して下さい。

② 帳票フォームを設定します XRerport インスタンスを作成し帳票フォームを読み込み、先程作成した RelationalRowSet のインスタンスを設定し

ます。

③ 帳票を作成します 作成する PDF ファイルのパスを指定し、帳票を作成します。

※各クラス及びメソッドの詳細は JavaDoc を参照してください。

// ① RelationalRowSetの設定

RelationalRowSet relationalRowSet = new RelationalRowSet();

relationalRowSet.readXMLSchema(

new FileInputStream(FILE_PATH + "/data/estimate_list_emp1_XML_DATA.xml"), true);

// ② 帳票フォームの設定

XReport rep = new XReport();

rep.loadProperty(FILE_PATH + "/form/java/estimate_list_emp1_XML.xml");

rep.setRelationalRowSet(relationalRowSet);

// ③ 帳票の生成

rep.createPDF(FILE_PATH + "/pdf/estimate_list_emp1_XML.pdf");

Page 41: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 41

レポートのイベントを使用したプログラム作成 ◆ サンプルで使用するファイル ReportEvent.java ◆ 概要 ここではレポートのイベントを取得して1ページ毎に Data オブジェクトのプロパティを変更する方法について説明し

ます。使用する帳票フォームは製品リスト(product_list_sales.xml)です。 jp.co.tenartni.xreport.ReportEventListner クラスはレポート生成時のイベントを取得することのできるインターフェー

スです。レポート生成時に取得することのできるイベントは下記の通りです。

メソッド名 説明

beforePrintSection セクション(PageHeader,PageDetail など)表示前イベント

afterPrintSection セクション(PageHeader,PageDetail など)表示後イベント

beforeCreatePDF PDF 生成前イベント

afterCreatePDF PDF 生成後イベント

newPage 改ページ発生時イベント

ブラウザへ プリンターへ

ダイレクト印刷

beforePrintSection

beforeCreatePDF

afterCreatePDF

newPage

createPDF

loadProperty

setRowSet

ページの件数分、各メソッド

が呼ばれます。

必要なメソッドに独自の処理を記述します。

PDF 生成前に必要な処理を

記述します。

PDF 生成後に必要な処理を

記述します。

レポート生成時のイベント動作イメージ

当メソッドが呼び出された後

にレポートのイベント処理が

呼ばれます。

afterPrintSection

Page 42: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 42

① RowHandleEventListener を implements します

上記のインターフェースを使用することで、レポートのイベントを取得するこができます。 ReportEventListner クラスはインターフェースですので、必ず下記の5つのメソッドを記述する必要があります。 (beforePrintSection,afterPrintSection,beforeCreatePDF,afterCreatePDF,newPage)

② XReport のインスタンスに ReportEventListner を登録します

XReport の addReportEventListner メソッドに"this”を登録することによって、このクラスでレポートのイベントが

呼ばれるようになります。 ③ セクション表示前イベントメソッド内を記述します セクション表示前イベントで、グループヘッダーが表示される前に Data オブジェクトの背景を1ページ毎に変更して

います。

rep. addReportEventListner (this);

public void beforePrintSection(String sectionName) throws Exception{

//グループヘッダーが表示される前に Data オブジェクトの属性を変更します。

if (sectionName.equals("GroupHeader1")){

//1ページ毎に Data オブジェクトの背景を変更します

if (rep.getPageCount() % 2 == 0){

//グループヘッダーに配置されている Data オブジェクトを取得して背景を黄色に設定します

((Data)rep.getPrintObject("GroupHeader1","Data4")).setFillColor(Color.yellow.getRGB());

}else{

//グループヘッダーに配置されている Data オブジェクトを取得して背景を白に設定します

((Data)rep.getPrintObject("GroupHeader1","Data4")).setFillColor(Color.white.getRGB());

}

}

public class ReportPropertyChange implements ReportEventListner{

Page 43: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 43

ReportEvent を実行すると下記のような PDF が出力されます。

※ 1ページ毎にグループヘッダーの「Data オブジェクト」の背景が変更されていることを

※ 確認して下さい

Page 44: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 44

複数の帳票フォームから1つの PDF を出力するプログラム作成 ◆ サンプルで使用するファイル ReportMultiPDF.java ◆ 概要 ここでは複数の帳票フォーム(XML 帳票定義ファイル)から、1つの PDF ファイルを作成する方法について 説明します。下記の3つの帳票フォームを1つの PDF にします。 製品リスト(product_list_sales.xml) 製品別売上リスト(product_list_sales.xml) 社員別見積リスト(estimate_list_emp1.xml) jp.co.tenartni.xreport. MultiPDFReportクラスは複数の帳票フォーム(XReport)から1つのPDFを生成する為のクラス

です。帳票フォーム(AAA.xml)と帳票フォーム(BBB.xml)と帳票フォーム(CCC.xml) を組み合わせた場合、下記の

ようなPDFが生成されます。

① MultiPDFReport クラスを使用して PDF を作成します 帳票フォームの数分の XReport クラスを作成します。作成された XReport を配列にします。

MultiPDFReport クラスのメソッド createPDF を使用して PDF を作成します。 引数に XReport の配列、ファイル名を指定することで PDF を作成することが出来ます。

※各クラス及びメソッドの詳細は JavaDoc を参照してください。

public ReportMultiPDF(){

try {

//PDF生成の準備を行います。

XReport rep1 = getXReportSample("product_list.xml");

XReport rep2 = getXReportSample("product_list_sales.xml");

XReport rep3 = getXReportSample("estimate_list_emp1.xml");

//XReportクラスの配列を作成します。作成された配列順にPDFが作成されます。

XReport[] reps = new XReport[]{rep1,rep2,rep3};

//①複数のXReportを使用する場合は、MultiPDFReportクラスを使用します

MultiPDFReport.createPDF(reps,FILE_PATH + "/pdf/ReportMultiPDFReport.pdf");

}

}

//引数で渡されたファイル名からXReportクラスのインスタンスを生成します

private static XReport getXReportSample(String fileName ) throws Exception{

SQLHandler sqlHandler = new SQLHandler();

SQLRowSet sqlRowMain = new SQLRowSet();

XReport rep = new XReport();

sqlHandler.setDriverName("sun.jdbc.odbc.JdbcOdbcDriver ");

sqlHandler.setDbUrl("jdbc:odbc:WRC_SAMPLE ");

sqlHandler.setDbUserName("sa");

sqlHandler.setDbPassword("");

rep.loadProperty("file:///" + FILE_PATH + "/form/java/" + fileName);

sqlRowMain.setSQL(rep.getSQL());

sqlRowMain.setSqlHandler(sqlHandler);

rep.setRowSet(sqlRowMain);

return rep;

}

AAA.xml (2 頁) BBB.xml (2 頁) CCC.xml (1 頁)の場合

AAA

AAA

BBB

BBB

CCC

Page 45: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 4 章 サンプルプログラム 45

画像イメージを出力するプログラム作成 ◆ サンプルで使用するファイル DirectImage.java ◆ 概要 ここでは Designer で作成した帳票フォーム(XML 帳票定義ファイル)から、画像イメージ(JPEG,PNG など)を出

力する方法について説明します。 画像イメージ出力をする場合も、XReport クラスの基本的な使用方法は同じです。画像イメージを出力

する場合は、PDF を生成する createPDF()メソッドの代わりに DirectImage クラスを利用して出力します。

① イメージ出力の設定を行う DirectImage クラスのコンストラクタに XReport クラスのインスタンスを設定して、DirectImage クラスを生成します。 ② イメージデータを読み込みます DirectImage クラスの loadPageImage()メソッドを使用することでイメージを読み込みます。

③ 作成された全てのイメージデータを取得します。 DirectImage ク ラ ス の generateAllImage () メ ソ ッ ド を 使 用 す る こ と で 、 作 成 さ れ た 全 て の イ メ ー ジ を

java.awt.image.BufferedImage のオブジェクトに変換するこが出来ます。generateAllImage ()メソッドは全てのイメージ

がメモリ上に展開される為、帳票やページ数によって非常に多くのメモリを使用しますので注意が必要です。

又、generateImage(int page)メソッドを使用しますと指定したページのイメージを取得することが出来ます。

※各クラス及びメソッドの詳細は JavaDoc を参照してください。

public class DirectImageSample {

public static void main(String[] args) {

// 必要なインスタンスを作成する

XReport rep = new XReport();

TempRowSet tempRowSet = new TempRowSet();

//使用する帳票フォーム(welcome.xml)はデータソースを使用しない為、ダミーデータの作成します。

tempRowSet.addColumn("DUMMY");

tempRowSet.setActive(true);

tempRowSet.appendRow();

tempRowSet.setValueAsString("DUMMY","0");

tempRowSet.secureRow();

// 帳票フォームを設定する

rep.loadProperty("file:///" + FILE_PATH + "/form/java/welcome.xml");

rep.setRowSet(tempRowSet);

/* ① イメージ出力の設定を行う */

DirectImage directImage = new DirectImage(rep);

/* ② イメージデータを読み込みます */

directImage.loadPageImage();

/* ③ 作成された全てのイメージデータを取得します */

BufferedImage[] imgs = directImage.generateAllImage();

/* ImageIO を利用して PNG のイメージファイルを出力します */

for (int i =0 ; i <imgs.length;i++ ){

ImageIO.write(imgs[i], "png", new File(FILE_PATH +"/pdf/welcome_" + i +".png"));

}

System.out.println("completed.");

System.exit(0);

}

}

Page 46: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 46

第 5 章 アプリケーションシステムとの連携

サーブレットからの PDF 生成 ここではサーブレットから PDF を生成するサンプルプログラム <CD_ROOT>¥Engine¥java¥sample¥src¥…ReportSimpleServlet.java について説明します。 サンプルプログラムをサーブレットコンテナで起動し、アクセスをすると、以下のシンプルなページが表示されます。 (※ このページは、ReportSimpleServlet の doGet メソッドが出力している HTML です。)

[PDF 生成]ボタンを押下すると PDF が生成され、以下のように表示されます。

Page 47: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 47

[PDF 生成]ボタンが押下されると、POST メソッドによるリクエストが ReportSimpleServlet に送られます。すると、以下の doPost メソッドが呼ばれます。 (※ doGet が出力する HTML には、form タグの method プロパティに”post”が記述されています。よって、ボタ

ンが押された際、サーブレットに対して POST メソッドによるリクエストが送信されます。) 【メソッド doPost】 メソッド doPost では、PDF を返すための処理として以下を行っています。 ① HttpServletResponse のメソッド setContentType で "application/pdf" を設定する。 ② HttpServletResponse のメソッド getOutputStream で OutputStream を取得する。 ③ PDF 生成の準備(必要なインスタンスの作成、データベース情報の設定、帳票フォームの設定、SQL の設

定)を行う。 ④ ③で取得した OutputStream を XReport のメソッド createPDF の引数に渡し、生成した PDF データを

OutputStream に書き込む。 以上でサーブレットから PDF を生成し、クライアントに返すことができます。

public void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("application/pdf"); ・・・①

OutputStream out = response.getOutputStream(); ・・・②

try {

PDF 生成の準備(省略) ・・・③

rep.createPDF(out); ・・・④

out.flush();

out.close();

}

catch (Exception e) {

e.printStackTrace();

}

}

Page 48: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 48

PDF フォームを利用した見積システム 従来の PDF では閲覧、印刷という利用法でしたが、PDF フォームを利用することで、入力可能な対話型

の PDF 文書を作成することが出来ます。この節では、PDF フォームで入力された値をサーバーに送受

信するアプリケーションについての解説をします。

※PDF フォームを利用した帳票フォームの作成方法につきましては、Designer のドキュメントを参照して

下さい。

■PDFフォームを利用したサンプルアプリケーション概要

① 「営業」は見積 PDF を入力してサーバーに送信します。

※ 「営業」には送信可否のメッセージが送られます。

② 「サーバー」では、認証、入力データのチェックを行い、「営業上司」に見積 PDF をメールで送りま

す。

③ 「営業上司」は送られてきた見積 PDF の”承認”又は”却下”を選択して「サーバー」に送信します。

※「営業上司」には送信可否のメッセージが送られます。

※①と同じ帳票フォームを使用して、一部の入力フィールドを読取専用にしています。

④ 「サーバー」では、“承認”の場合はデータの登録を行い、正式な見積書を「営業」にメールで送りま

す。“却下”の場合は、「営業」から送られてきた PDF を再度、メールで送ります。

営業

③ ④

サーバー

見積 PDF

営業上司

Page 49: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 49

環境設定

まず、はじめにサンプルアプリケーションが動作するまでの手順を説明します。

◆ Tomcat を用意

サンプルアプリケーションのアプリケーションサーバーの実行環境として、オープンソースのTomcatを例に説明致し

ます。Tomcat の詳細説明及び取得方法につきましては「The Apache Software Foundation」のホームページ

を参照して下さい。 http://jakarta.apache.org/tomcat/

本章では、Tomcat を C ドライブにインストールしたものとして説明いたします。

Tomcat のインストールディレクトリを(例:C:\jakarta-tomcat-4.1.30)、以降、[CATALINA_HOME]とします。

Tomcat のバージョンは、4.1.30 を前提に説明いたします。

◆ サンプルアプリケーションの用意 [CD_ROOT] \Engine\java\sample\wrcfdf をコピーして[CATALINA_HOME]の webapps 以下に配置して下さい。

以下のような配置になります。

[CATALINA_HOME]\webapps

+ [wrcfdf] + estimate_input.pdf + [WEB-INF]

+ web.xml + [lib] + [classes]

+ [src] + [sampledb]

種類 名前 説明 リソース estimate_input.pdf PDF フォーム機能を使用した、入力可能な見積書 PDF。

web.xml サンプルアプリケーション用デプロイメントデスクリプタ

sample-users.xml ユーザー情報を格納したデータファイル。サンプルアプリケーシ

ョンで使用するユーザーID、パスワード、権限が記載されていま

す。

[lib]

サンプルアプリケーションを動作させる為に必要なライブラリ 10ART-NI_SCRIPT.jar WRC_PRINT.jar WRC_RE.jar velocity-1.3.1.jar logkit-1.0.1.jar commons-collections.jar

[classes] サンプルアプリケーションのクラス [src] サンプルアプリケーションのソース

WEB-INF

[sampledb] サンプルアプリケーションのデータベース オープンソースの HSQLDB を使用しています。

Page 50: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 50

◆ メールサーバーの設定 このアプリケーションではメールを利用して PDF の送受信を行います。その為、web.xml に SMTP サー

バーの設定を記述する必要があります。

[CATALINA_HOME]\webapps\WRCPdfForm\WEB-INF\Web.xml を開いて下さい。

◆ JAVA_HOME の設定 環境変数[JAVA_HOME]が設定されていない場合、Tomcat の以下のファイルに JAVA_HOME を設定します。

ファイル: [CATALINA_HOME]\bin\catalina.bat

ファイルの先頭に以下の1文を記述します。(C ドライブに JDK1.4.1 をインストールした場合)

set JAVA_HOME=C:\jdk1.4.1

◆ Tomcat の起動

[CATALINA_HOME]\bin\startup.bat をダブルクリックし、Tomcat を起動します。

<注意事項>

サンプルアプリケーションは「http://localhost:8080」で動作するように PDF フォームを作成していますのでご注意下

さい。

◆ アプリケーションの起動

PDF フォーム機能を使用した見積書 PDF を開いてください。

[CATALINA_HOME]\webapps\WRCPdfForm\estimate_input.pdf

PDF を開き入力可能なフィールドに値を入力して「送信」ボタンを押して下さい。

ユーザー情報(ID、パスワード、権限)は XMl形式のファイル(sample-users.xml)に記述されています。

[CATALINA_HOME]\webapps\WRCPdfForm\WEB-INF\ sample-users.xml の内容

<servlet-name>estimate</servlet-name>

<servlet-class>jp.co.tenartni.samples.pdfform.EstimateServlet</servlet-class>

<init-param>

<param-name>smtp</param-name>

<param-value>SMTP サーバー名</param-value>

</init-param>

ここに SMTP サーバー

名を記入してください。

ユーザー名 パスワード 権限

syain1 syain1

salse

※見積を作成、送信することが出来ます。

※見積作成時のユーザー

syain2 syain2 Manager

※見積を承認、却下することが出来ます。

※見積承認時のユーザー

Page 51: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 51

ユーザーID とパスワード

は必須です。!

入力フィールドに値を入力後、送

信ボタンを押しますと「承認者」に

PDF がメールで送信されます。

Page 52: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 52

PDF フォームとサーバーのデータ送受信について

サンプルアプリケーションでは、PDF フォームからサーバーへのデータ送信を HTTP の POST を使用し

ています。反対に、サーバーから PDF フォームへの送信は FDF という Adobe 社が開発したデータ形式

で送信しています。FDF データを PDF フォームに送信することで、PDF フォームにサーバーから送信し

た値を設定することができます。

※FDF データにつきましては、Adobe 社のホームページを参照して下さい。

WebReprotCafeでは、PDFフォーム機能を利用してサーバーと送受信する際に便利なコンポーネントや

機能があります。使用方法につきましては、後述の節で解説します。

PDF フォームに対して送信する FDF メッセージを作成するパッケージ郡

(jp.co.tenartni.xreport.util.fdf.* )

PDF フォームから送信された情報で RelationalRowSet を更新するクラス

(jp.co.tenartni.xreport.util.PDFFormParamUtil)

サンプルソース解説

サンプルソースは以下の場所にあります。パッケージは「jp.co.tenartni.samples.pdfform」です。

[CATALINA_HOME]\webapps\WRCPdfForm\WEB-INF\src ソース名 説明

EstimateServlet.java 見積 PDF からのリクエストを受け付ける Servlet。

EstimateService.java 見積 PDF のリクエストを処理するクラス。このアプリケーションのビジネス

ロジックが記述されています。

EstimateUtil.java 見積 PDF に必要なデータ作成、メール送信を行うユーティリティクラス。

MailMessage.java メール内容の文字列を定義するクラス。

SetCharacterEncodingFilter.java リクエストデータのフィルターを行うクラス。

estimate_formlist.xml 入力可能な見積書の帳票フォーム XML ファイル。

estimate_list.xml 承認済みの見積書の帳票フォーム XML ファイル。

サンプルソースの解説では、EstimateService.java の PDF フォームとサーバーのデータ送受信についての

記述を中心に説明します。

Page 53: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 53

EstimateService.java の doSend メソッド(送信ボタンが押された時)の説明をします。

public void doSend(Map paramMap, OutputStream out, String role)throws Exception {

//権限をチェックする

if ((role == null) || (!role.equals("salse"))) {

sendFDFMessage(out, "営業メンバー権限が必要です");

return;

}

String msg ="承認者にメールを送信しました。";

try{

String tantouMail = EstimateUtil.getParameterFromMap("TANTOU_MAIL", paramMap);

String shouninMail = EstimateUtil.getParameterFromMap("SHOUNIN_MAIL", paramMap);

if ((tantouMail == null) || (tantouMail.equals("")) || (shouninMail == null) ||

(shouninMail.equals(""))){

throw new Exception("メールアドレスを入力してください");

}

XReport rep = new XReport();

//帳票フォームを取得します

InputStream inputStream

=EstimateServlet.class.getResourceAsStream(EstimateServlet.RESOURCE_PATH+"/estimate_formlist.xml

");

rep.loadProperty(inputStream);

// データを設定します(ステータスを承認待ちにします。)

rep.setRelationalRowSet(EstimateUtil.getDummyRelationalRowSet("02"));

//ボタンフィールドなどを読取専用にしない為の設定

Vector maskField = new Vector();

maskField.add("buttonAdmit");

maskField.add("buttomReject");

maskField.add("USER");

maskField.add("PASS");

maskField.add("COMMENT");

rep.setAllFieldReadOnly(true,maskField);

//入力されたデータをFDFに変換します。

FDF fdf =FDFCreater.generateFDFFromHashMap(paramMap);

//メッセージ用のFormTextオブジェクトを初期化します。

fdf.getFields().getField("MESSAGE").setValue("");

fdf.getFields().getField("USER").setValue("");

fdf.getFields().getField("PASS").setValue("");

rep.setFdf(fdf);

//PDFファイルの生成

File file = EstimateUtil.createTempPDFFile("doSend");

FileOutputStream fileout =new FileOutputStream(file);

rep.createPDF(fileout);

//PDFを添付してメール送信します

EstimateUtil.sendMail(MAIL_FROM, shouninMail, file, MailMessage.REQUEST_TITLE,

MailMessage.REQUEST_BODY);

}catch (Exception e){

msg= e.getMessage();

}

//見積PDFにFDFのメッセージを送ります。

sendFDFMessage(out, msg);

}

・・・・・①

・・・・・②

・・・・・③

Page 54: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 54

①入力フィールドを読取専用にします

XReport クラスの setAllFieldReadOnly()メソッドを使用することで、全ての PDF フォームオブジェクトを読

取専用にすることが出来ます。引数にマスクするフィールド群(Vector)を指定することで、指定したフィ

ールドを対象外にすることが出来ます。

※サンプルプリケーションでは営業上司に送られる PDF は、製品、価格、数量などの入力項目を読取

専用にしています。

②PDF フォームから送信されたデータを FDF に変換します。

FDFCreater クラスの generateFDFFromHashMap()メソッドを使用することで、PDF フォームから送信され

た POST 要求から FDF のデータを作成します。引数には HttpServletRequest から取得した HashMap

を指定します。

作成した XReport クラスの setFdf()メソッドで FDF オブジェクトを設定しますと、PDF 生成時に RowSet

から取得されるデータに FDF データが上書きされます。

※サンプルプリケーションでは営業が入力したデータで、再度 PDF を作成しています。

③見積PDFにFDFのメッセージを送ります。

送信する FDF オブジェクトを作成して、PDF フォームに値を送信します。ContentType は

"application/vnd.fdf"に設定する必要があります。

※サンプルでは営業に送信結果を送信しています。

※各クラス及びメソッドの詳細につきましては JavaDoc を参照して下さい。

Page 55: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 55

EstimateService.java の doAdmit メソッド(承認ボタンが押された時)の説明をします。

public void doAdmit(Map paramMap, OutputStream out, String role)throws Exception {

//権限をチェックする

if ((role == null) || (!role.equals("manager"))) {

sendFDFMessage(out, "マネージャ権限が必要です");

return;

}

String msg ="担当者にメールを送信しました。";

try{

String tantouMail = EstimateUtil.getParameterFromMap("TANTOU_MAIL", paramMap);

XReport rep = new XReport();

//帳票フォームを取得します

InputStream inputStream

=EstimateServlet.class.getResourceAsStream(EstimateServlet.RESOURCE_PATH+"/estimate_list.xml");

rep.loadProperty(inputStream);

RelationalRowSet relationalRowSet = EstimateUtil.getDummyRelationalRowSet("02");

//見積 PDF からの入力データをダミーデータ(RelationalRowSet)に反映させます。

PDFFormParamUtil.requestParam2RelationalRowSet(rep,relationalRowSet,paramMap);

//DB に登録します

regist(relationalRowSet);

//PDF ファイルの生成

rep.setRelationalRowSet(relationalRowSet);

File file = EstimateUtil.createTempPDFFile("doAdmit");

FileOutputStream fileout =new FileOutputStream(file);

rep.createPDF(fileout);

//PDF を添付してメール送信します

EstimateUtil.sendMail(MAIL_FROM,tantouMail,file,MailMessage.ADMIT_TITLE, MailMessage.ADMIT_BODY);

}catch (Exception e){

msg= e.getMessage();

}

//見積 PDF に FDF のメッセージを送ります。

sendFDFMessage(out,msg);

}

・・・・・①

Page 56: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 56

①見積 PDF からの入力データをダミーデータ(RelationalRowSet)に反映させます。

PDFFormParamUtil クラスの requestParam2RelationalRowSet()メソッドを使用することで、PDF フォームから

送信された POST 要求から RelationalRowSet のデータを作成します。引数には HttpServletRequest か

ら取得した HashMap を指定します。引数で設定した RelationalRowSet にデータが上書きされます。

※RelationalRowSet につきましては、第 3 章 Engine コンポーネント解説を参照して下さい。

Page 57: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 57

DeveloperCafe からの PDF 生成 ここでは、高生産性 Web アプリケーションフレームワーク WebWorkBench DeveloperCafe 付属のサンプル 「みつもり毎度!」を例に DeveloperCafe と連携して PDF を生成する方法について説明します。 ※WebWorkBench DeveloperCafe につきましては下記の URL を参照して下さい。 http://www.10art-ni.co.jp/product/index.html みつもり毎度は、見積り書を作成・管理することを目的としたシステムです。 主に次のオペレーション機能が提供されています。 ・ データベース化されたマスタ情報から製品(見積り項目)選択をします。 ・ 数量、仕切り率、値引き額を設定することで、見積り合計額、粗利額などが確認できます。 ・ 入力内容をデータベースに登録すれば、顧客提示用の見積書として PDF 出力が可能です。(別途

WebReportCafe が必要になります。) ・ 登録した見積りデータの検索・更新・削除が可能です。 [見積情報画面]

上記画面にて見積情報を入力することができます。入力後、 [登録]ボタンを押し、 [印刷]ボタンを押すことで PDFファイルの見積書が作成されます。

Page 58: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 58

[見積書(PDF)表示]

以下で [印刷]ボタンが押されてからどのように PDF が生成され、クライアントに表示されるかの仕組みについて「み

つもり毎度!」のソースコードを元に解説を行います。 [補足] ・ みつもり毎度の起動方法、ソースコードに関する詳細は、DeveloperCafe のマニュアルを御覧ください。 ・ みつもり毎度のソースコードは、以下にあります。

[CDROOT]WWB/DeveloperCafe/StanderdEdition/samples/sources/

Page 59: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 59

ソースコード PDFEstimate.java の解説 PDF を実際に生成しているのは、PDFEstimate クラスです。まずはこのクラスについて説明します。 PDFEstimate クラスは HtmlForm クラスを継承した見積書出力用フォームです。 ※ HtmlForm クラスに関する詳細は、DeveloperCafe のマニュアル、JavaDoc を御覧ください。 このクラスには、以下の2つのフィールド及び、3つのメソッドがあります。 [フィールド] ・ rpEstimate・・・レポートオブジェクト(XReport のインスタンス変数) ・ rsReport ・・・・データ問合せ RowSet(ClientRowSet のインスタンス変数) [メソッド] ・ PDFEstimate ・・・・・コンストラクタ ・ SetUpReport・・・・・・レポートオブジェクト初期化処理 ・ PrintDownloadData・・・フォーム表示前初期化イベント処理 以下、各メソッドについて詳しく説明をします。 [コンストラクタ PDFEstimate] ① 出 力 タ イ プ ( OutputType ) の 設 定 を 行 っ て い ま す 。 setOutputType メ ソ ッ ド の 引 数 に

HtmlFormType.FILE_DOWNLOAD を設定することで、このフォームが出力される際に、後述の

printDownloadData メソッドが呼ばれます。 ② ContentType を設定しています。これにより、クライアントは、ダウンロードデータが PDF であることが分かり

ます。

public PDFEstimate() {

this.setOutputType(HtmlFormType.FILE_DOWNLOAD); ・・・①

this.setContentType("application/pdf"); ・・・②

}

Page 60: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 60

[メソッド setUpReport] rpEstimate が null の場合は初期処理を行っていない状態(はじめての PDF 生成処理)ですので、以下の初期処

理を行います。 なお、2回目以降は初期処理を行わずに、パラメータの値のみを設定します。 ① レポートのオブジェクトのインスタンスを生成する。 ② レポートのオブジェクトに帳票フォームを読み込む。 ③ レポートのオブジェクトから SQL を取り出し、ClientRowSet へコピーする。 ④ パラメータの型を設定する。 ⑤ レポートオブジェクトに ClientRowSet をアサインする。 ⑥ 最後に、引数の値をパラメータにセットします。これで、引数の見積管理番号の PDF を生成するための準備

が整いました。 [メソッド printDownloadData] コンストラクタで、出力タイプを HtmlFormType.FILE_DOWNLOAD に設定しているため、このフォームが出力さ

れる際に、上記 printDownloadData メソッドが呼ばれます。 このメソッドが呼ばれる時には、既に初期処理が行われ、出力する見積書の見積番号のパラメータ値もセットされて

います。よって、ここでは、以下の処理 を行い、クライアントに PDF を出力します。 ① レポートを生成し、出力する。 ② ClientRowSet をクローズする。 ソースコード PDFEstimate.java の解説は終了です。 次に、この PDFEstimate クラスを利用している、EntryForm クラスについて解説します。

public void setUpReport(String argEstimateNo) throws Exception {

if (rpEstimate == null) {

rpEstimate = new XReport(); ・・・①

rpEstimate.loadProperty( ・・・②

getSessionParam().getString("report_xmlfile_url") + "/Estimate.xml");

rsReport.setSQL(rpEstimate.getSQL()); ・・・③

rsReport.getParamSet().getParam(COL.ESTIMATE_NO).setType(Type.STRING); …④

rpEstimate.setRowSet(rsReport); ・・・⑤

}

rsReport.getParamSet().setValueAsString(COL.ESTIMATE_NO, argEstimateNo);⑥

}

public void printDownloadData(java.io.OutputStream out) {

try {

rpEstimate.createPDF(out);・・・①

} catch (Exception x) {

x.printStackTrace();

} finally {

try { rsReport.setActive(false); } catch (Exception x) {};・・・②

}

}

Page 61: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

Copyright(C) SIOS Technology, Inc.

第 5 章 アプリケーションシステムとの連携 61

ソースコード EntryForm.java の解説 見積情報画面の[印刷]ボタンが押されると、EntryForm クラスのメソッド doExecute が呼ばれ、PDF 生成に関する

処理を行います。 [メソッド doExecute] ① [印刷]ボタンが押された場合、true となります。 ② WebReportCafe を利用する設定がされている場合、true となります。(詳細は DeveloperCafe のマニュア

ルを御覧ください。) ③ PDFEstimate クラス(見積書出力用フォーム)のインスタンスを生成しています。なお、一度インスタンスが

生成されると、2回目以降はそのインスタンスを利用します。(詳細は DeveloperCafe のマニュアルを御覧く

ださい。) ④ PDFEstimate の setUpReport メソッドを呼び出し、見積書番号を設定します。 ⑤ PDFEstimate を出力します。これにより前述の printDownloadData メソッドが呼ばれ、PDF 生成が行わ

れます。

protected HtmlForm doExecute(Vector requestParamNames,

Hashtable requestParamValues)

throws java.lang.Exception {

省略

if ("print".equals(sub)) { ①

if (isPendingResolve) {

省略

} else if (getSessionParam().getString("use_reportcafe").equals("true")){ ②

PDFEstimate fm = (PDFEstimate)this.getSession().getFormByName("PDFEstimate"); ③

fm.setUpReport( rsMaster.getValueAsString(COL.ESTIMATE_NO) ); ④

return fm; ⑤

} else {

省略

}

}

省略

}

Page 62: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

補足説明 62

Copyright(C) SIOS Technology, Inc.

補足説明

◆印刷フォントについて

帳票フォームを作成するアプリケーション WRC Designer で対応しているフォントは、

MS 明朝

MSP ゴシック

MS ゴシック

MSP 明朝

DFPOP 体

DFPPOP 体

DFP 特太ゴシック体

DF 特太ゴシック体

HG ゴシック E-PRO

HG 丸ゴシック M-PRO

HG 正楷書体-PRO

Courier

Helvetica

Times-Roman

の14種類の Windows フォントです。Windows 以外の Java プログラムから印刷する場合など、違うフォントを使用す

る必要がある場合、印刷フォントプロパティファイルを作成します。

◆ライブラリについて ◇ WebReportCafe のメール機能を使用する場合、以下の2つのライブラリが必要です。

1、JavaMail 1.4.1 の mail.jar ファイル ・http://java.sun.com/products/javamail/ よりJavaMailをダウンロードしてください。 ・ダウンロードした javamail-1_4_1.zip を展開すると mail.jar ファイルが取得できます。

2、JavaBeans Activation Framework 1.1.1 の activation.jar ファイル ・http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp よりJAFをダウンロードして

ください。 ・ダウンロードした jaf-1_1_1.zip を展開すると activation.jar ファイルが取得できます。

◇ WebReportCafe で JAI(Java Advanced Imaging)を使用する場合、以下のライブラリが必要です。

1、JAI(Java Advanced Imaging)の jai_codec.jar,jai_core.jar ファイル ・http://java.sun.com/products/java-media/jai/ よりJAIをダウンロードしてください。 ・ダウンロードしたファイルを展開すると jai_core.jar と jai_codec.jar ファイルが取得できます

◆非定型用紙の印刷について

ダイレクト印刷機能で、非定型用紙を使用する場合、プリンターによってはうまく印刷できない場合が

あります。非定型用紙を使用する場合、事前にプリンターとの相性を調べてからシステム開発を行ってく

ださい。

Page 63: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

補足説明 63

Copyright(C) SIOS Technology, Inc.

◆印刷フォントプロパティファイル

印刷フォントプロパティファイルには、各フォントに対する、実際に印刷に使用するフォント名をJavaのプロパティフ

ァイル形式で指定します。デザイナで指定するフォント名に対する、プロパティは下記の表のようになります。

デザイナフォント名 プロパティ

MS 明朝 MS_MINCHO

MS ゴシック MS_GOTHIC

MS Pゴシック MS_P_GOTHIC

MS P明朝 MS_P_MINCHO

DFPOP 体 DF_POP

DFPPOP 体 DF_P_POP

DF特太ゴシック体 DF_TOKFUTO_GOTHIC

DFP特太ゴシック体 DF_P_TOKUFUTO_GOTHIC

HG 正楷書体-PRO HG_SEIKAISYOTAI_PRO

HG 丸ゴシック M-PRO HG_MARU_GOTHICM_PRO

HGゴシック E-PRO HG_GOTHICE_PRO

Courier New CURIER_NEW

Helvetica HELVETICA

Times New Roman TIMES_ROMAN

GULIMCHE GulimChe

MINGLIU MingLiU

SIMSUN SimSun

各プロパティの対する値は、印刷に使用するフォント名を指定してください。例えば、デザイナ上で“MS 明朝”を

使用しているが、印刷する際には sansserif という Java の論理フォントを使用したい場合は印刷プロパティファイルに

下記のように指定します。

MS_MINCHO= sansserif

印刷フォントプロパティファイルの指定

作成した印刷フォントプロパティファイルを有効にするには、プロパティファイルのパスを VM 引数に指定する必要

があります。

印刷フォントプロパティファイルを設定するには JVM 引数の-Dwrc.printfont.resource にリソース名(クラスパス内の

パス)、 または-Dwrc.printfont.fileに物理ファイルパスとして設定します。両方のJVM引数に値が指定されている場

合は、 -Dwrc.printfont.resource に指定したリソース名のみが有効になります。

フォント名の取得方法

jp.co.tenartni.util.FontList クラスを使用すると Java アプリケーションで使用できる フォント名を取得する

ことができます。FontList クラスを実行すると標準出力に取得したフォント名の一覧が出力されます。

(例)

java -classpath WRC_RE.jar jp.co.tenartni.util.FontList

(実行結果)

Font[0]=Albany

Font[1]=Albany Bold

Font[2]=Albany Bold Italic

Font[3]=Albany Italic

Page 64: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

補足説明 64

Copyright(C) SIOS Technology, Inc.

◆外字フォントの埋め込み機能について WRC では、Windows 上で作成した外字フォント(EUDC.TTE)を PDF に埋め込むことが出来ます。

外字フォントを埋め込むことによって、PDF を閲覧するクライアントに外字をインストールする必要はありません。

外字の使用領域は、Unicode の使用領域 E000~F8FF までの 6400 文字を使用することが出来ます。

埋め込まれた外字ファイルは、WRC Engine 内で Unicode でマッピングされます。

Windows(EUDC.TTE ファイル)

外字フォントの読込み方法

1.デフォルトでは、Windows 上の外字フォントファイルを検索して取り込みます。WRC Designer 上から PDF プレビ

ューを行った場合はこの方法が使用されます。

※ Win2000 系([DRIVE]:/WINNT\Fonts\EUDC.TTE)

※ Win98 系([DRIVE]:/WINDOWS\Fonts\EUDC.TTE)

2.帳票作成時、WRC Designer のプロパティ「外字」を“はい”に設定する

3.リソースファイル(クラスパス内のパス)から読み込む場合は、JVM 引数の-Dwrc.eudcfont.resource にリソース名

を設定します。

4.ファイルパスから読み込む場合は、JVM 引数の-Dwrc.eudcfont.file に物理ファイルパスとして設定します。

Web アプリケーションやマルチスレッド環境で使用する場合の注意事項

外字フォントファイルの読込みにオーバーヘッドがかかる場合、予め読み込んだ外字フォントのバイト配列を再利用

することで外字フォントファイルの読込みのオーバーヘッドを軽減させることが出来ます。

XReport クラスの setEudcFont(byte[] eudcFont)メソッドを使用して、外字フォントのバイト配列を設定した場合、ここ

で設定した値が外字フォント使用時に優先的に使用されます。

外字フォントを読み込む為のクラス(EUDCFontReader クラス)を使用すると 簡単に外字フォントを読み込むことが出

来ます。

EUDCFontReader クラスの詳細は API ドキュメントを参照して下さい。

Unicode E000

WRC Engine

外字ファイル

の取り込みDB

XML

CSV

ファイル

PDF

デ ー タ の 取 込

読み込んだデータに「E000」

の文字が含まれている場合、

Windows上で登録された文字

とマッピングされ PDF に出力

されます

Page 65: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

補足説明 65

Copyright(C) SIOS Technology, Inc.

◆設定ファイル ・ Engine には、以下の設定ファイルがあります。

和暦プロパティファイル 西暦と和暦の対応情報を記述します。 元号が変更された場合は、このファイルを修正する必要があります。

ログプロパティファイル ログ処理を行うクラスのクラス名などを記述します。 ログ出力レベルを変更する場合や Log4J を使用する場合は、このファイルを修正します。

◆和暦プロパティファイル ・ 和暦プロパティファイルは、以下のファイルに含まれています。

WRC_RD.jar WRC_RE.jar

・ ファイル名は、jp/co/tenartni/data/XFormatres.properties です。

XFormatres:XFormat クラスの resource の意味です。 ・ 現在、以下のように和暦情報が設定されています。

1番目 元号 :¥u660e¥u6cbb(明治の UNICODE) 元号省略記号:M(Meiji の M) 元号開始日 :1868/01/01

2番目 元号 :¥u5927¥u6b63(大正の UNICODE) 元号省略記号:T(Taisho の T) 元号開始日 :1912/07/30

3番目 元号 :¥u662d¥u548c(昭和の UNICODE) 元号省略記号:S(Showa の S) 元号開始日 :1926/12/25

4番目 元号 :¥u5e73¥u6210(平成の UNICODE) 元号省略記号:H(Heisei の H) 元号開始日 :1989/01/08

5番目:未設定 6番目:未設定

・ 元号が変更された場合は、次のように修正してください。

(以下、WRC_RE.jar を例に説明します。WRC_RD.jar についても同様です。) 任意のディレクトリに WRC_RE.jar をコピーします。

オリジナルの WRC_RE.jar はバックアップしておいてください。 次のコマンドを実行して、WRC_RE.jar ファイルから XFormatres.properties ファイルを取り出します。

jar xvf WRC_RE.jar jp/co/tenartni/data/XFormatres.properties XFormatres.properties ファイルに新しい元号の設定を行います。 次のコマンドを実行して、WRC_RE.jar ファイルに XFormatres.properties ファイルを格納します。

jar uvf0 WRC_RE.jar jp/co/tenartni/data/XFormatres.properties

Page 66: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

補足説明 66

Copyright(C) SIOS Technology, Inc.

◆ログプロパティファイル ・ ログプロパティファイルは、以下のファイルに含まれています。

WRC_RE.jar ・ ファイル名は、jp/co/tenartni/log/LogResource.properties です。 【LogResource.properties】 ・ Log4J の使用方法については、jp.co.tenartni.log.log4j. Log4JManager の JavaDoc を参照してください。 ・ Log4Jについては、http://logging.apache.org/ を参照してください。 ・ ログプロパティファイルの設定は、以下のように行います。

任意のディレクトリに WRC_RE.jar をコピーします。 オリジナルの WRC_RE.jar はバックアップしておいてください。

次のコマンドを実行して、WRC_RE.jar ファイルから LogResource.properties ファイルを取り出しま

す。 jar xvf WRC_RE.jar jp/co/tenartni/log/LogResource.properties

LogResource.properties ファイルの設定を行います。 次のコマンドを実行して、WRC_RE.jar ファイルに LogResource.properties ファイルを格納します。

jar uvf0 WRC_RE.jar jp/co/tenartni/log/LogResource.properties

# この行のように、"#"で始まる行はコメント行です。

# 【LogResource 設定方法】

# LogManagerClassName にログマネージャークラス名を設定します。

# ・デフォルトでは、"jp.co.tenartni.log.LogManager"です。

# ・Log4J を使用する場合は、"jp.co.tenartni.log.log4j.Log4JManager"です。

# この LogManagerClassName プロパティは必須です。

# その他のプロパティは各ログマネージャーごとに異なります。

# [Default]

# LogPriority にログの優先度を設定します。

# 設定できる文字列は、"DEBUG","INFO","WARN","ERROR","FATAL"のいずれかです。

#------------------------------------------------------------------------------

LogManagerClassName=jp.co.tenartni.log.LogManager

LogPriority=INFO

#------------------------------------------------------------------------------

# [Log4J]

# LogConfigFileURL に Log4JConfigFile の URL を設定します。

#------------------------------------------------------------------------------

#LogManagerClassName=jp.co.tenartni.log.log4j.Log4JManager

#LogConfigFileURL=file:///C:/WebWorkBench/log4j.config

Page 67: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

資料 67

Copyright(C) SIOS Technology, Inc.

◆ライセンス情報の確認(Java 版) ・ 以下の手順で、ライセンスキー 「WRC_LICENSE.jar」 に含まれる情報を取得することができます。 ・

次のコマンドを実行すると、ライセンス情報が出力されます。 java -cp WRC_RE.jar;WRC_LICENSE.jar

jp.co.tenartni.license.wrc.WRCRECheckKey ライセンスキーが正しい場合は、次の情報が出力されます。

ProductName:製品名 Type:ライセンスタイプ

Development:開発ライセンス Runtime:運用ライセンス

StartDate:ライセンス有効期間の開始日(yyyyMMdd) EndDate:ライセンス有効期間の終了日(yyyyMMdd)

例:20010331(※00000000 は、無期限を意味します) Company:会社名 SerialNumber:通し番号

ライセンスキーが不正な場合は、次のエラーが出力されます。 LicenseKeyDecodeError!!!

ライセンスキーが解読できなかったことを意味しています。 正しいライセンスファイル(WRC_LICENSE.jar)を使用してください。

LicenseExpireError!! ライセンスの有効期間外であることを意味しています。 ライセンスの有効期間を確認してください。

◆バージョン情報の確認(Java 版) ・ 以下の手順で、バージョン情報の確認を行ってください。以下は、WRC_RE.jar を例に説明しますが、

WRC_RD.jar,WRC_RE_WDC.jar に関しても同様です。

次のコマンドを実行すると、バージョン情報が出力されます。 java -jar WRC_RE.jar

次の情報が出力されます。

WebReportCafe Version [バージョン番号] 例

>java -jar WRC_RE.jar >WebReportCafe Version 2006-005

Page 68: WebReportCafe for Java プログラミングガイド¸³票生成コアライブラリ(Java版、Microsoft .NET版の2つのプラットフォームをサポート) Webアプリケーション、アプリケーション等に組込で利用

資料 68

Copyright(C) SIOS Technology, Inc.

当ドキュメント中の会社名、製品名などは各社の商標および登録商標です。

Adobe および Acrobat は、Adobe Systems Incorporated(アドビシステムズ社)の商標です。

This product includes software developed by the Apache Software Foundation (http://www.apache.org/).

This product includes software developed by (c)2003 Y.Swetake(http://www.swetake.com/)

This product includes software developed by the Cryptix Foundation Limited (http://www.cryptix.org/).

Cryptix General License

Copyright (c) 1995-2005 The Cryptix Foundation Limited. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE CRYPTIX FOUNDATION LIMITED AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CRYPTIX FOUNDATION LIMITED OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.