WebReportCafe for.net プログラミングガイド
2 目次 目次 WebReportCafe for.netの概要... 3 プログラミングチュートリアル... 4 概要... 4 準備... 4 GUIコンポーネントの追加... 5 データセットの作成... 6 WRCコンポーネントプロパティ設定... 10 コーディング...11... 12 PDFの作成 表示 印刷のサンプル... 13 オブジェクトの属性を動的に変更するサンプル... 16 PDFのパスワードを変更するサンプル... 19 レポートのイベントを使用したサンプル 1... 21 レポートのイベントを使用したサンプル 2... 25 レポートのイベントを使用したサンプル 3... 28 複数の帳票フォームから1つのPDFを作成するサンプル... 31 入力データからPDFを生成するサンプル... 33 プリンタにダイレクト印刷を行うサンプル... 36 画像データを作成するサンプル... 40 ASP.NETを利用したPDF 出力サンプル... 43 補足... 46 DLLについて... 46
3 WebReportCafe for.net の概要 WebReportCafe for.net の概要 WebReportCafe for.net ( 以下 WebReportCafe) は Microsoft.NET Framework 環境からダイナミックに PDF を生成する製品です Web アプリケーション C/S アプリケーションから簡単に PDF を生成することが可能です 帳票レイアウト作成ツール ビジュアルな操作で複雑な帳票も短時間に作成することが可能です OCR 機能 下絵機能を標準搭載 既存帳票を簡単に取り込むことが可能です データ接続 データアクセスには.NET Framework 標準の ADO.NET を採用 DataSet のデータをそのまま PDF にすることが可能です 様々な帳票ニーズに対応 伝票などの 固定系帳票 からダイナミックに生成される 一覧系帳票 まで簡単に作成可能です レポート生成時にオブジェクトの属性をプログラムの中から操作することが可能です データの値によって色や罫線の位置を変えるなどきめ細かい帳票を実現することが可能です このドキュメントでは WebReportCafe のプログラミング方法について説明します 帳票レイアウトの作成方法につきましては WebReportCafe Designer ガイド を参照して下さい プログラミングで使用するクラス メソッドの詳細につきましては API リファレンス を参照して下さい 電子署名の設定方法につきましては 電子署名について を参照して下さい 当ドキュメント中の会社名 製品名などは各社の商標および登録商標です This product includes software developed by (c)2003 Y.Swetake(http://www.swetake.com/)
4 プログラミングチュートリアル プログラミングチュートリアル概要この章では 開発環境に Microsoft Visual Studio 2003 を使用した 簡単な帳票作成プログラムの作成手順を解説します ボタンをクリックすると サンプルの帳票フォーム product_list.xml を元に PDF を作成し 表示するアプリケーションを C# で実装します PDF の表示には Adobe PDF Reader を使用します このコントロールを使用するには AdobeReader7.0 または 8.0 (http://www.adobe.co.jp/products/acrobat/readermain.html) のインストールが必要です 準備はじめにプロジェクトを作成しましょう Windows アプリケーションを作成する Visual C# プロジェクトを FirstWRC という名称で作成してください 続いてツールボックスの設定を行います ツールボックスに 帳票を作成するコンポーネントと PDF を表示する ActiveX Control を追加し ツールボックスから利用できるようにします ツールボックスが表示されていない場合は 表示 メニューより ツールボックス を選択し ツールボックスを表示します 続いて コンポーネントを追加するタブを選択し 表示します ここでは コンポーネント タブに追加することにします ツールボックスのコンポーネントタブの上で右クリックし 表示されたメニューより アイテムの追加と削除 を選択します 表示されたツールボックスダイアログの.NET Framework コンポーネント タブをクリックし 一覧中の WRCComponent のチェックボックスをオンにします.NET Framework コンポーネント タブに WRCComponent が存在しない場合は 参照 タブから WRCComponent.dll を選択してください 続いて COM コンポーネントタブをクリックし 一覧中の Adobe Acrobat 7.0 Browser Document のチェックボックスをオンにし OK ボタンをクリックします ツールボックスに WRCComponent と Adobe PDF Reader が追加されていることを確認してください
5 プログラミングチュートリアル COM コンポーネントタブに Adobe PDF Reader が存在しないときは AdobeReader を起動して 編集 環境設定 インターネット Web ブラウザオプションで PDF をブラウザに表示のチェックをオンにして 再度ツールボックスより選択してください GUI コンポーネントの追加必要なコンポーネントを追加して画面を作成しましょう ツールボックスから Windows フォームの Button および Adobe PDF Reader ドラックアンドドロップして フォームオブジェクトに配置してください ボタンの Text プロパティを PDF 作成 に変更し 各オブジェクトの大きさを調整して下図のようなレイアウトを作成してください Adobe Acrobat 7.0 Browser Document
6 プログラミングチュートリアル データセットの作成 WebReportCafe で帳票を作成するには データが必要です またデータは System.Data.DataSet オブジェクトに格納されている必要があります このサンプルでは Microsoft Access のデータベースファイルからデータを取得する DataSet を作成します サンプルのデータは [CD-ROOT]\Engine\dnet\sample\data\sample.mdb にあります まず ツールボックスの データ タブより OleDbDataAdapter をドラッグ & ドロップしフォームに追加してください データアダプタ構成ウィザード が起動します 次へ ボタンをクリックすると データ接続選択 画面が表示されます 新しい接続 ボタンをクリックし データリンクプロパティ ダイアログを表示してください 表示されたダイアログの プロバイダ タブをクリックし リストの中から Microsoft Jet 4.0 OLE DB Provider 選択し 次へ ボタンをクリックしてください 表示された接続タブの データベース名を選択または入力します と記述されている下のフィールドにサンプルデータベースファイルへのパスを指定します OK ボタンをクリックし データリンクプロパティ ダイアログを閉じます ウィザードに戻り 次へ ボタンをクリックすると クエリの種類の選択 画面が表示されます 何も変更せず 次へ ボタンをクリックしてください 続いて SQL ステートメントの生成 画面が表示されます テキストフィールドに帳票データを取得するために SQL SELECT PRODUCT_NAME, COST, LIST_PRICE FROM PRODUCT と入力してください 詳細ボタンをクリックしてダイアログを表示します
7 プログラミングチュートリアル WebReportCafe ではデータソースの参照のみ行いますので INSERT UPDATE および DELETE ステートメントの作成 のチェックボックスをオフにします OK ボタンを押しダイアログを閉じ ウィザードの 次へ ボタンをクリックしてください ウィザードの結果の表示 画面が表示され 完了 ボタンをクリックすると 最後にパスワードを含めるかどうかを確認するダイアログが表示されます パスワードを含める ボタンをクリックすると終了です oledbadapter1 と oledbconnection1 がフォームの下に追加されていることを確認してください DataSet を作成する前に 作成した DetaAdapter により取得するデータをマッピングする DataSet のテーブル名を設定します このテーブル名は 帳票作成の際指定した データセットテーブル名 プロパティと同様である必要があります 今回使用するサンプル帳票フォーム product_list.xml には PRODUCT という データ行セット名 が指定されているので DataSet のテーブル名に PRODUCT を指定します oledbdataadapter1 のアイコンを右クリックし 表示されたメニューより プロパティ を選択してください 表示されたプロパティエディタ中の Table Mappings の ボタンをクリックます WebReportCafe Designer のレポートのプロパティ データセットテーブル名
8 プログラミングチュートリアル 表示された TableMappings の設定 ダイアログの データセットテーブル テキストボックスに PRODUCT と入力し OK ボタンをクリックします 次にデータセットを作成します oledbdatasetadapter1 のプロパティエディタより データセットの生成 をクリックします 表示された データセットの生成 ダイアログの新規作成テキストボックスに 作成するデータセットの名称を指定します ProductDataSet と指定してください
9 プログラミングチュートリアル 最後に OK ボタンをクリックします productdataset1 というアイコンがフォームに追加されていることを確認してください
10 プログラミングチュートリアル WRC コンポーネントプロパティ設定帳票を作成するコンポーネント WRCComponent を追加します ツールボックスより WRCComponent を選択し フォームにドラッグ & ドロップしてください フォームの下に wrccomponent1 というアイコンが追加されたことを確認してください 続いて WRCComponent のプロパティを設定します DataSet プロパティに帳票作成に使用するデータセット FormFilePath プロパティに 帳票フォームへのファイルパスを設定し OutputFilePath には作成する PDF の出力先を指定します まず wrccomponent1 のアイコンを右クリックし 表示されたメニューより プロパティ を選択してください 表示されたプロパティエディタ上の DataSet プロパティのプルダウンリストから productdataset1 を選択します FormFilePath プロパティの をクリックします 表示された ファイル選択 ダイアログを使用して サンプルの帳票フォーム product_list.xml を選択してください サンプルの帳票フォームは [CD-ROOT] \Engine\dnet\sample\form\dNET にインストールされています 最後に OutputFilePath プロパティを設定します このサンプルではカレントディレクトリに PDF を作成することとします OutputFilePath プロパティには.\product_list.pdf を指定してください
11 プログラミングチュートリアル コーディングボタンを押したときの動作を コーディングします PDF 作成 ボタンをダブルクリックすると コードエディタが表示され button1_click メソッドが追加されます このメソッドに PDF の作成および表示処理を実装すると下記のようになります private void button1_click(object sender, System.EventArgs e) productdataset1.clear(); 1 oledbdataadapter1.fill(productdataset1); wrccomponent1.createpdf(); ----------------- 2 axpdf1.loadfile(wrccomponent1.outputfilepath); 3 axpdf1.show(); 1 データセットのクリアと データの取得を行っています データセットオブジェクトの Clear メソッドを呼び出すことにより データセットに保存したデータをクリアします また DataDapter オブジェクトの Fill メソッドを呼び出すことにより 引数で指定したデータセットにデータを取得します 2 取得したデータを下に PDF を作成しています WRCComponent の CreatePDF メソッドを呼び出すだけで PDF を作成できます 3 Adobe Acrobat Control for ActiveX に PDF をロードし表示しています 以上で サンプルアプリケーションが完成しました 実行すると下記のような画面になることを確認してください
12 概要 WebReportCafe では プログラム (C# Visual Basic) を使用して Designer で作成した帳票フォームに対して様々な操作を行うことができます この章では WebReportCafe に含まれているサンプルアプリケーションを例に WebReportCafe のプログラミング方法について説明します 開発環境サンプルアプリケーションの開発環境に Microsoft Visual Studio 2003 を使用します PDF の表示には Adobe Acrobat 7.0 Browser Document を使用します このコントロールを使用するには AdobeReader7.0(http://www.adobe.co.jp/products/acrobat/readermain.html) のインストールが必要です サンプルの解説は C# を例に説明しますが Visual Basic との API 上の差異はございません Visual Basic を利用する場合は [CD-ROOT] \Engine dnet Sample VB に同様のサンプルがあります ( 注プロジェクトファイルを開いた際 WRCComponent, WRCdNet, AxPdfLib などの参照が切れて表示されることがあります その際は 一旦コンポーネント参照を削除した後 再度 コンポーネントの参照を設定してください ) サンプル一覧 PDF の作成 表示 印刷のサンプル PDF 印刷を行う基本的なプログラミングについてのサンプルです オブジェクトの属性を動的に変更するサンプル Text オブジェクトの値と背景色を変更するサンプルです PDF のパスワードを変更するサンプル PDF に設定できるパスワードを動的に変更するサンプルです レポートのイベントを使用したサンプル 1 セクションが表示される前に発生するイベントを使用したサンプルです レポートのイベントを使用したサンプル 2 DataSet の行が移動したときに発生するイベントを使用したサンプルです レポートのイベントを使用したサンプル 3 イメージデータを動的に変更するサンプルです 複数の帳票フォームから 1 つの PDF を作成するサンプル 2 つの異なる帳票フォームから 1 つの PDF を生成するサンプルです 入力データから PDF を生成するサンプル RDB を使用せずに入力されたデータから PDF を生成するサンプルです プリンタにダイレクト印刷を行うサンプル PDF を生成せずに直接プリンタへ印刷を実行するサンプルです 画像データを生成するサンプル PDF を生成せずに直接プリンタへ印刷を実行するサンプルです ASP.NET を利用した PDF 出力サンプル ASP.NET を利用して Web ブラウザに PDF を出力するサンプルです
13 PDF の作成 表示 印刷のサンプル 概要 WebReportCafe から PDF 出力を行う基本クラス WRCComponent の基礎的な使用方法を説明します また Acrobat Control for ActiveX を使用して PDF を表示する方法及び印刷する方法をご紹介します サンプルで使用するファイルプロジェクトファイル :[CD-ROOT] \Engine\dnet\Sample\CS\PrintSample\PrintSample.csproj 帳票フォーム :[CD-ROOT] \Engine\dnet\sample\form\dNET\product_list.xml 解説 PDF を作成するコードは PDF 作成 ボタンのクリックイベントハンドラとして下記のように実装します private void btncreatereport_click(object sender, System.EventArgs e) btncreatereport.enabled = false; btnshowpdf.enabled = false; btnprintpdf.enabled = false; resultlabel.visible = false; axpdf.hide(); try wrc.dataset = productdataset; wrc.formfilepath = "..\\..\\..\\..\\form\\dnet\\product_list.xml"; 1 wrc.outputfilepath = ".\\product_list.pdf"; productdataset.product.clear(); dataadapter.fill(productdataset); 2 wrc.createpdf(); 3 //GUI 部品の状態を変える btnshowpdf.enabled = true; btnprintpdf.enabled = true; resultlabel.visible = true; finally btncreatereport.enabled = true; 1 WRCComponent オブジェクトのプロパティを設定します DataSet プロパティには 帳票作成に使用するデータが格納されている System.Data.DataSet クラスのインスタンスを指定します FormFilePath には使用する帳票フォームへのパスを指定します また OutputFilePath には出力する PDF ファイルのパスを指定します 各プロパティは VisualStudio のプロパティエディタでも編集できます 2 使用する DataSet を初期化し データを取得しています 3 CreatePDF メソッドを呼び出すことにより PDF を作成しています
14 作成した PDF を表示するには 下記のようなコードを実装します Private void btnshowpdf_click(object sender, System.EventArgs e) axpdf.loadfile(wrc.outputfilepath); axpdf.show(); axpdf はフォームに貼り付けた Acrobat Control for ActiveX のオブジェクトです LoadFile メソッドの引数に 作成した PDF のパスを指定することにより PDF をロードします そして Show メソッドを実行することにより 表示します サンプルアプリケーション PrintSample の画面イメージ 作成した PDF を印刷するには 下記のように実装します private void btnprintpdf_click(object sender, System.EventArgs e) axpdf.loadfile(wrc.outputfilepath); axpdf.printwithdialog(); PDF をロードしたあと printwithdialog メソッドを呼ぶことによって 印刷ダイアログを表示することができます
15
16 オブジェクトの属性を動的に変更するサンプル 概要 WebReportCafe では作成した全てのレイアウト情報 ( セクションやプリントオブジェクト ) の属性をプログラムの中から操作することが可能です ここではレポート生成時に Text オブジェクトの属性をプログラムの中から操作する方法について説明します サンプルで使用するファイルプロジェクトファイル : [CD-ROOT] \Engine\dnet\sample\CS\ChangeTextSample\ChangeTextSample.csproj 帳票フォーム :[CD-ROOT] \Engine\dnet\sample\form\dNET\sales_plan_list.xml 解説下記の図は ChangeTextSample の動作イメージです 変更前 プログラムから Text オブジェクトの値 背景色を変更します 変更後
17 PDF を作成するコードは PDF 作成 ボタンのクリックイベントハンドラとして下記のように実装します private void createpdfbtn_click(object sender, System.EventArgs e) salesplandataset.sales_plan.clear(); dataadapter.fill(salesplandataset); wrc.loadformfile(); -------------1 Text txt = (Text)wrc.GetPrintObject("PageHeader1","txtTitle");----2 txt.value = textbox1.text; txt.fillcolor =System.Drawing.Color.Yellow.ToArgb(); 3 wrc.createpdf(); axpdf.loadfile(wrc.outputfilepath); axpdf.show(); 1 LoadFormFile メソッドにより帳票フォームを読み込みます 帳票フォームの各要素 ( テキスト イメージ バーコード セクション等 ) に対応したクラスのインスタンスが作成され 各属性に対応したプロパティがセットされます レポート内のオブジェクト セクションにアクセスする際には 必ずこのメソッドを使用して帳票フォームを読込む必要があります LoadFormFile メソッドを明示的に呼ばない場合は CreatePDF メソッドの実行時に呼ばれます 2 読み込んだオブジェクトに対して GetPrintObject( セクション名, 表示オブジェクト名 ) で指定したセクション内にある表示オブジェクトを取得することができます セクション名 及び 表示オブジェク名 は WebReportCafe Designer で各オブジェクトのプロパティ [ 名前 ] で設定した値です 取得したオブジェクトは 正しい型で変換する必要があります 今回の例ではテキストを変更するので Text クラスで型変換を行いましたが 取得するクラスによって変更する必要があります ( 例 ) バーコード jp.co.tenartni.xreport.barcode 線 四角形 角丸四角形 jp.co.tenartni.xreport.graphics イメージ jp.co.tenartni.xreport.image 3 取得した Text オブジェクトの属性を変更します WebReportCafe Designer 上で設定できる全てのプロパティに対して値を変更することが出来ます ここでは Text オブジェクトの 文字列 と 内部の色 を変更します
18 サンプルアプリケーション ChangeTextSample の画面イメージ タイトルが 販売予定表 からテキスト BOX で入力された値 タイトルの変更 に変更されていることを確認して下さい
19 PDF のパスワードを変更するサンプル 概要通常 帳票フォームの作成時に設定する PDF 設定のデータ ( パスワード等 ) を プログラムからも設定することもできます このサンプルでは PDF 設定のデータパスワードをプログラムから設定するについて説明します サンプルで使用するファイルプロジェクトファイル : [CD-ROOT] Engine dnet sample CS PDFOptionSample PDFOptionSample.csproj 帳票フォーム :[CD-ROOT] Engine dnet sample form dnet estimate_list1.xml 解説 PDFOption の値を操作するには PDF の作成前に 帳票フォームをメモリ上に読み込む必要があります 下記のコードを参照してください private void createpdfbtn_click(object sender, System.EventArgs e) wrc.loadformfile(); -------1 jp.co.tenartni.xreport.pdfoption.pdfoption option = wrc.getpdfoption(); ----2 option.getencript().userpassword = passwordtextbox.text; -----3 estimatedataset.clear(); maindataadapter.fill(estimatedataset); subdataadapter.fill(estimatedataset); wrc.createpdf(); axpdf1.loadfile(wrc.outputfilepath); axpdf1.show(); 1 WRCComponent クラスの LoadFormFile メソッドを呼び出し 帳票フォームを読み込みます 2 帳票フォーム作成時に設定した PDF 設定に対応する PDFOption クラスのオブジェクトを取得します PDFOption クラスは PDF 設定に対応する各クラスを保持しています 各クラスは getxxxx( クラス名 ) メソッドで取得することが来ます 文書情報 jp.co.tenartni.xreport.pdfoption.documentinfo クラス セキュリティ jp.co.tenartni.xreport.pdfoption.encrypt クラス アクション jp.co.tenartni.xreport.pdfoption.triggerevent クラス JavaScript jp.co.tenartni.xreport.pdfoption. JavaScript クラス 3 パスワードを設定するオブジェクトを取り出し テキストフィールドに記述された文字列をパスワードとして設定しています 以上で PDF 設定は終了です 後は通常通り データを取得し PDF を作成します
20 サンプルアプリケーション PDFOptionSample の画面イメージ を実行すると パスワード入力ダイアログが表示されます テキストエリアに入力した文字列を入力し OK ボタンを押すと PDF が表示されることを確認してください
21 レポートのイベントを使用したサンプル 1 概要ここでは セクションの表示前に発生するイベント SectionCreating のハンドラを実装して 1 ページ毎に Data オブジェクトのプロパティを変更する方法について説明します サンプルで使用するファイルプロジェクトファイル :[CD-ROOT] \Engine\dnet\sample\CS\EventSample\EventSample.csproj 帳票フォーム :[CD-ROOT] \Engine\dnet\sample\form\dNET\product_list_sales.xml 解説帳票作成時にはいくつかのイベントが発生し jp.co.tenartni.xreport.wrccomponent クラスに 発生したイベントを扱うイベントハンドラを追加することができます WRCComponent クラスで扱うことができるイベントは下記のとおりです イベント名 CreateDirectImage NewPage PDFCreating PDFCreated RowMoved SectionCreating SectionCreated 説明イメージオブジェクトが評価されるときに発生するイベント 改ページ発生時イベント PDF 生成前イベント PDF 生成後イベントメインレポートに設定された DataSet の行が変わったときに発生するイベントセクション (PageHeader,PageDetail など ) 表示前イベントセクション (PageHeader,PageDetail など ) 表示後イベント レポート生成時のイベント動作イメージ PDFCreating PDF 生成前に発生します このイベントのハンドラに PDF 生成前に必要な処理を記述します RowMoved SectionCreating CreateDirectImage SectionCreated NewPage ハンドラでは行番号 行のデータ等が取得できます ハンドラでは Image オブジェクトの名称が取得できます また戻り値として画像オブジェクトを返すことにより 帳票に表示できます ページの件数分 各メソッドが呼ばれます PDFCreated PDF 生成後に必要な処理を記述します
22 このサンプルではセクションの表示前に発生する SectionCreating イベントのハンドラを実装します ハンドラでは 表示しているページが偶数または奇数で セクションに表示する Data オブジェクトの背景色を変更する処理を行います イベントハンドラを実装するには フォームに配置した WRCComponent オブジェクトのアイコンを右クリックし 表示されたメニューより プロパティを選択します 表示されたプロパティエディタの雷のアイコンをクリックします プロパティエディタに イベントの一覧が表示されます SectionCreating の右のセルをダブルクリックすると コードエディタが表示され イベントハンドラメソッド wrc_sectioncreating(string) が追加されます このメソッドに SectionCreating イベントが発生した際に行う処理を実装します VB を使用する場合は下記の手順でイベントハンドラを追加して下さい 1WRCComponent の選択 2 イベントハンドラの選択
23 イベントハンドラメソッド wrc_sectioncreating(string) 処理を実装すると下記のようになります private void wrc_sectioncreating(string sectionname) if (sectionname.equals("groupheader1")) ------------------1 jp.co.tenartni.xreport.data data = (jp.co.tenartni.xreport.data)wrc.getprintobject("groupheader1","dataproduct"); ---2 if (wrc.getxreport().pagecount % 2 == 0) ----------------3 data.fillcolor = Color.Yellow.ToArgb(); ------------4 else data.fillcolor = Color.White.ToArgb(); -------------4 1 SectionCreating のイベントハンドラでは 文字列型の引数に 評価しているセクションの名称が渡されます このハンドラでは GroupHeader1 というセクションの表示前に処理を行います 2 背景色を変更するデータオブジェクトを取得しています セクションに配置されている各表示オブジェクトは WRCComponent クラスの GetPrintObject メソッドを呼び出すことで取得できます 第 1 引数にはセクション名 第 2 引数には表示オブジェクト名を指定します 3 現在のページ番号が偶数か奇数か判定しています 4 ページ番号が偶数の場合と奇数の場合で 2 で取得した Data オブジェクトの背景色として別々の色を指定しています このサンプルを実行すると下図のようになります ページ番号が偶数の場合と 奇数の場合では 背景色が違う Data オブジェクトがあることを確認してください
24 サンプルアプリケーション EventSample の画面イメージ
25 レポートのイベントを使用したサンプル 2 概要ここでは メインレポートに設定された DataSet の行が移動したときに発生するイベント RowMoved のハンドラを実装して 一行毎に Data オブジェクトのプロパティを変更する方法について説明します サンプルで使用するファイルプロジェクトファイル :[CD-ROOT] \Engine\dnet\sample\CS\RowEventSample\RowEventSample.csproj 帳票フォーム :[CD-ROOT] \Engine\dnet\sample\form\dNET\product_list.xml 解説メインレポートに設定した DataSet の評価中の行が移動したときに発生する RowMoved イベントのハンドラを実装します ハンドラでは 評価中の行番号が偶数または奇数で 表示する Data オブジェクトの背景色を変更する処理を行います イベントハンドラを実装するには フォームに配置した WRCComponent オブジェクトのアイコンを右クリックし 表示されたメニューより プロパティを選択します 表示されたプロパティエディタの雷のアイコンをクリックします プロパティエディタに イベントの一覧が表示されます RowMoved の右のセルをダブルクリックすると コードエディタが表示され イベントハンドラメソッド wrc_rowmoved(int,system.data.rowview) が追加されます このメソッドに RowMoved イベントが発生した際に行う処理を実装します
26 イベントハンドラメソッド wrc_rowmoved(int,system.data.rowview) 処理を実装すると下記のようになります private void wrc_rowmoved(int currentrowindex, System.Data.DataRowView currentrow) jp.co.tenartni.xreport.data pricedata = null; jp.co.tenartni.xreport.data costdata = null; jp.co.tenartni.xreport.data namedata = null; pricedata = (jp.co.tenartni.xreport.data)wrc.getprintobject("pagedetail1","dataprice"); costdata = (jp.co.tenartni.xreport.data)wrc.getprintobject("pagedetail1","datacost"); namedata = (jp.co.tenartni.xreport.data)wrc.getprintobject("pagedetail1","dataproduct"); 1 if (currentrowindex % 2 == 0) ------------ 2 pricedata.fillcolor = System.Drawing.Color.Yellow.ToArgb(); costdata.fillcolor = System.Drawing.Color.Yellow.ToArgb(); namedata.fillcolor = System.Drawing.Color.Yellow.ToArgb(); else pricedata.fillcolor = System.Drawing.Color.White.ToArgb(); costdata.fillcolor = System.Drawing.Color.White.ToArgb(); namedata.fillcolor = System.Drawing.Color.White.ToArgb(); 3 3 1 背景色を変更するデータオブジェクトを取得しています 2 行番号が偶数か奇数かを判定しています イベントハンドラの第一引数には行番号 第二引数には行データが指定されます 3 1 で取得したデータオブジェクトに 偶数または奇数の場合でそれぞれ違う背景色を設定しています
27 サンプルアプリケーション RowEventSample の実行イメージ 行番号が偶数の場合と 奇数の場合では 背景色が違うオブジェクトがあることを確認してください
28 レポートのイベントを使用したサンプル 3 概要ここでは イメージオブジェクトが評価されるときに発生するイベント CreateDirectImage のハンドラを実装して 動的にイメージ (System.Drawing.Bitmap) を作成して PDF を出力する方法について説明します サンプル帳票フォーム DirectImageSample.xml を WebReportCafe Designer で開いてください この帳票フォームには Image1 と Image2 というイメージオブジェクトが存在しますが どちらのイメージオブジェクトにも画像の取得先を示す属性 イメージの場所 が指定されていないことが分かります このサンプルでは この 2 つのイメージオブジェクトに対して動的にイメージ (System.Drawing.Bitmap) を作成して設定する方法について説明します サンプルで使用するファイルプロジェクトファイル : [CD-ROOT] \Engine\dnet\sample\CS\DirectImageSample\DynamicImageSample.csproj 帳票フォーム :[CD-ROOT] \Engine\dnet\sample\form\dNET\DirectImageSample.xml 解説 1. イメージを動的に作成するイベントの使用 WRCComponent クラスのイベント CreateDirectImage イベントハンドラを追加することで イメージを動的に設定することが出来ます このイベントに対する文字列型の引数には イメージオブジェクトの名前が渡されます この引数により 現在処理されているイメージオブジェクト名を判定し 動的にイメージを作成し System.Drawing.Bitmap 型で戻り値として返す処理を実装することにより 各イメージオブジェクトに動的にイメージを渡すことができます 戻り値として null を返した場合は イメージオブジェクトに設定されたパスから画像データが取得されます 2. イメージを動的に作成するイベントの使用するには WRCComponent のプロパティを開きます CreateDirectImage の右のセルをダブルクリック プロパティエディタに イベントの一覧が表示されます CreateDirectImage の右のセルをダブルクリックすると コードエディタが表示され イベントハンドラメソッド wrc_ CreateDirectImage (string) が追加されます このメソッドに CreateDirectImage イベントが発生した際に行う処理を実装します
29 イベントハンドラメソッド wrc_ CreateDirectImage (string) 処理を実装すると下記のようになります private System.Drawing.Bitmap wrc_createdirectimage(string imagename) System.Drawing.Bitmap bitmap = null; // 動的にBitmapイメージを作成します if (imagename=="image1") bitmap = new System.Drawing.Bitmap(170, 170); Graphics graphics = Graphics.FromImage(bitmap); string stringtext = " * WebReportCafe *"; Font fonlable = new Font("MS Serif", 12,FontStyle.Bold); SizeF size = graphics.measurestring(stringtext, fonlable); graphics.drawstring(stringtext, fonlable, Brushes.White, (bitmap.width - size.width) / 2, (bitmap.height - size.height) / 2); // イメージファイルを読込んでBitmapイメージを作成します else if (imagename=="image2") System.IO.FileStream filestream = new System.IO.FileStream("..\\..\\..\\..\\form\\image\\10art-ni_logo.jpg",System.IO.FileMode.Open,System.IO.FileAccess.Read); bitmap = new System.Drawing.Bitmap(fileStream); else return bitmap; 1 2 1 動的に Bitmap イメージを作成します CreateDirectImage イベントに対する文字列型の引数には イメージオブジェクトの名前が渡されます この引数により 現在処理されているイメージオブジェクト名を判定し 動的にイメージを作成します 作成したイメージ名が Image1 の場合は * WebReportCafe * というイメージを作成 (System.Drawing.Bitmap) して設定します 2 イメージファイルを読込んで Bitmap イメージを作成します WRC Designer で作成したイメージ名が Image2 の場合は ファイルからイメージを取得して設定しています
30 サンプルアプリケーション DirectImageSample の画面イメージ
31 複数の帳票フォームから 1 つの PDF を作成するサンプル 概要 WebReportCafe では複数の帳票フォーム (XML 帳票定義ファイル ) から 1 つの PDF ファイルを作成することが出来ます MultiPDFComponent クラスは複数の帳票フォームから 1 つの PDF を生成する為のコンポーネントです 帳票フォーム (AAA.xml) と帳票フォーム (BBB.xml) と帳票フォーム (CCC.xml) を組み合わせた場合 下記のような PDF が生成されます AAA.xml (2 頁 ) BBB.xml (2 頁 ) CCC.xml (1 頁 ) の場合 AAA AAA BBB BBB CCC MultiPDFComponent の制限事項 1.TotalPageNo オブジェクトを配置することはできません -1 が表示されます 2.PDF オプションのパスワード暗号付き帳票フォームを複数設定するはできません 3.PDF オプションのパスワード暗号付き帳票フォームを指定する場合は 1 番始めに設定する必要があります サンプルで使用するファイルプロジェクトファイル : [CD-ROOT]\Engine\dnet\sample\CS\MultiReportFormSample\MultiReportFormSample.csproj 帳票フォーム :[CD-ROOT]\Engine\dnet\sample\form\dNET\sales_plan_list.xml 帳票フォーム :[CD-ROOT]\Engine\dnet\sample\form\dNET\product_list_sales_outline.xml 解説 1.MultiReportForm クラスの PDF 生成 ボタンクリック (createpdfbtn_click) 時のイベント処理 private void createpdfbtn_click(object sender, System.EventArgs e) productdataset.product_sales.clear(); dataadapterproduct.fill(productdataset); estimatedataset.estimate_label.clear(); dataadapterestimate.fill(estimatedataset); if (chkboxestimate.checked && chkboxproduct.checked) WRCComponent[] wrccoms = new WRCComponent[]wrcEstimate,wrcProduct;1 multipdfcom.wrccomponent = wrccoms; multipdfcom.createpdf(); --------2 1 帳票フォームの数分の WRCComponent クラスを作成し 配列を作成します 配列にした順番で PDF が生成されます 2 作成された WRCComponent の配列を MultiPDFComponent クラスのプロパティ WRCComponent に設定します CreatePDF() メソッドを使用して PDF を作成します
32 サンプルアプリケーション MultiReportFormSample の画面イメージ 8 ページ目から帳票が 製品別売上リスト になります
33 入力データから PDF を生成するサンプル 概要ここでは データベースを使用せずに 画面上で入力されたデータから PDF を作成する方法について説明します サンプルで使用するファイルプロジェクトファイル : [CD-ROOT]\Engine\dnet\sample\CS\ nputdatasample\inputdatasample.csproj 帳票フォーム :[CD-ROOT]\Engine\dnet\sample\CS\InputDataSample\input_estimate_list.xml サンプルで使用する帳票フォーム (input_estimate_list.xml) は仮想の SQL を使用している為 WebReportCafe Designer 上からの PDF プレビューはできません 解説今までのサンプルではデータソースに RDB(MS Access) を使用しましたが 今回のサンプルでは画面から入力されたデータを元に データ (DataSet) を作成し PDF を生成します WebReportCafe ではデータソース (RDB,CSV,XML,etc) に関わらず DataSet に格納されたデータから PDF を生成することが出来ます 1.InputDataForm クラスの PDF 生成 ボタンクリック (btnpdf_click) 時のイベント処理 private void btnpdf_click(object sender, System.EventArgs e) // 帳票フォームの設定 wrc.formfilepath = "..\\..\\input_estimate_list.xml"; // データの設定 wrc.dataset=getestimatedataset(); >このメソッドで DataSet を作成します // 出力パスの設定 wrc.outputfilepath=".\\inputdata.pdf"; //PDFの生成 wrc.createpdf(); //PDFプレビュー System.Diagnostics.Process.Start(".\\InputData.pdf");
34 2.InputDataForm クラスの getestimatedataset メソッドこのメソッドでは入力されたデータから見積書の DataSet を作成します private DataSet getestimatedataset() DataSet dataset = new DataSet(); DataTable table = new DataTable(); // テーブル名の設定 1 table.tablename= "DUMMY"; // データ定義 2 table.columns.add(new DataColumn("CUSTOMER_NAME",System.Type.GetType("System.String"))); table.columns.add(new DataColumn("CUSTOMER_PER",System.Type.GetType("System.String"))); table.columns.add(new DataColumn("CUSTOMER_DEPT",System.Type.GetType("System.String"))); // 省略 // 入力されたデータをDataSetに入れる 3 DataRow row = table.newrow(); row["customer_name"]= txtcustomer.text; row["customer_per"]= txtcustomer_per.text ; row["customer_dept"]= txtdept.text ; // 省略 table.rows.add(row); dataset.tables.add(table); return dataset; 1 DataSet のテーブル名を設定します DataSet の TableName には 帳票フォーム (input_estimate_list.xml) の データセットテーブル名 プロパティと一致させる必要があります 2 カラム情報を作成します DataColumn に設定するカラム名は 帳票フォーム (input_estimate_list.xml) の各 Data オブジェクトに設定されている フィールド名 プロパティと一致させる必要があります 3 作成した行 (DataRow) に入力されたデータを設定します
35 サンプルアプリケーション InputDataForm の画面イメージ 入力されたデータから PDF が作成され Adobe Reader が起動します
36 プリンタにダイレクト印刷を行うサンプル 概要ここでは PDF を生成せずに直接プリンタへ印刷する方法について説明します ダイレクト印刷機能を使用することで サーバーサイドからの一括印刷や大量印刷を実現することが出来ます サンプルで使用するファイルプロジェクトファイル : [CD-ROOT]\Engine\dnet\sample\CS\DirectPrintSample\DirectPrintSample.csproj 帳票フォーム :[CD-ROOT]\Engine\dnet\sample\form\dNET\estimate_dept.xml 解説今までのサンプルでは PDF を生成してから表示 印刷といった処理を行ってきましたが このサンプルではプリンタに直接印刷する方法について解説します WRCComponent クラスの基本的な使用方法は PDF 作成と同じですが 印刷時のみに有効なプロパティとメソッドが幾つかあります WRCComponent クラスの印刷プロパティプロパティ名説明 DocumentName 印刷時に表示されるドキュメント名 ( ジョブ名 ) を設定します PrinterName 印刷時に出力するプリンター名を設定します 設定しない場合は OS のデフォルトのプリンタが使用されます Copies 印刷時のコピーの部数を設定します デフォルトは1です PageSetupDialog このプロパティに System.Windows.Forms.PageSetupDialog が設定されている場合 Print() メソッド実行時に余白や用紙方向などのページ設定を選択するダイアログが表示されます PrintDialog このプロパティに System.Windows.Forms.PrintDialog が設定されている場合 Print() メソッド実行時にプリンタを選択し 印刷するドキュメント部分を選択するダイアログが表示されます CustomPageSettting 印刷時に System.Drawing.Printing.PageSettings を手動で設定するかどうか設定します 非定型用紙などを使用する場合に使用します WRCComponent クラスの印刷メソッドプロパティ名説明 Print() 印刷処理を実行します 印刷時にステータスダイアログが表示されます Print(boolean Dialog) 印刷処理を実行します 引数に false を設定すると印刷ステータスダイアログは表示されません ShowPrintPreviewDialog 印刷プレビューダイアログを表示します 引数には表示するウィンド (FormWindowState size) ウのサイズ (FormWindowState クラス ) を指定します
37 1.DirectPrintForm クラスの 印刷 ( ステータスダイアログ無し ) ボタンクリック (printbtn_click) 時のイベント処理 private void printbtn_click(object sender, System.EventArgs e) //DBベースからデータをロードする estimatedataset1.estimate_emp.clear(); dataadapter.fill(estimatedataset1); >このメソッドで DataSet を作成します // プリンター名を設定します if (printernamecombo.selecteditem!=null) wrc.printername = printernamecombo.selecteditem.tostring(); // 印刷を実行します 1 wrc.print(false); 1 印刷処理を実行します WRCComponent クラスの Print(boolean printstatusdialog) メソッドの引数に false を指定することで 印刷ステータスダイアログを非表示にしています 2.DirectPrintForm クラスの 印刷プレビュー ボタンクリック (previewbtn_click) 時のイベント処理 private void previewbtn_click(object sender, System.EventArgs e) //DBベースからデータをロードする estimatedataset1.estimate_emp.clear(); dataadapter.fill(estimatedataset1); // プリンター名を設定します if (printernamecombo.selecteditem!=null) wrc.printername = printernamecombo.selecteditem.tostring(); // 印刷プレビューを実行します 1 wrc.showprintpreviewdialog(formwindowstate.maximized); 1 印刷プレビューを実行します WRCComponent クラスの ShowPrintPreviewDialog () メソッドを使用するこで 印刷プレビューを実行することが出来ます 引数には表示するウィンドウのサイズを指定します
38 3.DirectPrintForm クラスの 印刷 ( プリンタダイアログ有り ) ボタンクリック (printdialogbtn_click) 時のイベント処理 private void printdialogbtn_click(object sender, System.EventArgs e) //DBベースからデータをロードする estimatedataset1.estimate_emp.clear(); dataadapter.fill(estimatedataset1); //PageSetupDialogクラスの作成 System.Windows.Forms.PrintDialog pd = new System.Windows.Forms.PrintDialog(); //PageSetupDialogを設定します 1 wrc.printdialog = pd; // プリンタダイアログを表示する 2 if (pd.showdialog() == System.Windows.Forms.DialogResult.OK) //OKがクリックされた時は印刷する wrc.print(); //WRCComponentの設定を基に戻します wrc.printdialog = null; 1 プリンタダイアログを表示する場合は WRCComponent クラスの PageSetupDialog に System.Windows.Forms.PrintDialog クラスを設定する必要があります このプロパティが設定されている場合は Print() メソッド実行時にプリンタ選択ダイアログが表示されます 2 PrintDialog クラスの ShowDialog() メソッドを実行するとプリンタ選択ダイアログが表示されます プリンタ選択ダイアログで OK が押され時に印刷を実行します
39 サンプルアプリケーション DirectPrintForm の画面イメージ 印刷処理が実行されます プリンタダイアログ 印刷プレビュー
40 画像データを作成するサンプル 概要ここでは 画像データを作成する方法について説明します 画像出力機能を使用することで Adobe Reader がインストールされていない環境でも 帳票のイメージを表示することが出来ます サンプルで使用するファイルプロジェクトファイル :[CD-ROOT]\Engine\dnet\sample\CS\ImageSample\ImageSample.csproj 帳票フォーム :[CD-ROOT]\Engine\dnet\sample\CS\ImageSample\gensen.xml 解説このサンプルでは画像データを作成し 表示する方法について解説します WRCComponent クラスの基本的な使用方法は PDF 作成の際と同じですが 画像データ作成時のみに有効なメソッドが幾つかあります WRCComponent クラスの画像生成機能の関連メソッドプロパティ名説明 LoadPageImage() 全てのページの中間データを作成します 作成された中間データは 一時ファイルに保存されます LoadPageImage(Boolean 全てのページの勇敢データを作成します 引き数により 中間デー onmemory) タをメモリ上に展開するか 一時ファイルに保存するかを指定できます 引き数に true を設定すると 全ての中間データをメモリ上に展開します メモリリソースを消費しますが 高速に処理することが出来ます GenerateImage(int page) LoadPageImage メソッドで作成した 中間データを元に 引き数で指定したページの画像データの System.Drawing.Bitmap オブジェクトを作成します このメソッドを呼び出す前に LoadPageImage を実行する必要があります GenerateImage(int page,float scale) GenerateAllImage() GenerateAllImage(float scale) LoadPageImage メソッドで作成した 中間データを元に 引き数で指定したページの画像データの System.Drawing.Bitmap オブジェクトを作成します Scale 引き数には作成する画像データの倍率を指定することが出来ます このメソッドを呼び出す前に LoadPageImage を実行する必要があります 全ての画像データを一度に作成することが出来ます 使用方法は GenerateImage と同様です 戻り値は System.Drawing.Bitmap の配列となります 倍率を指定して全ての画像データを一度に作成することが出来ます 使用方法は GenerateImage と同様です 戻り値は System.Drawing.Bitmap の配列となります
41 1. メインのフォームロード時のイベント処理 private void ImageSampleForm_Load(object sender, System.EventArgs e) // ダミーの行を作成 DataTable table = this.dataset.tables["maintable"]; table.rows.clear(); table.rows.add(new Object[table.Columns.Count]); // 帳票フォームをロード 1 wrccomponent.loadformfile(); 1 WRCComponent を初期化します 初期化方法は PDF 作成時と同様です ここでは LoadFormFile メソッドを呼び出し プロパティに指定された帳票フォームを読み込んでいます 2. 入力データ変更時のイベント処理 private void textchanged(object sender, System.EventArgs e) // 全てのページの中間データを作成 1 wrccomponent.loadpageimage(true); // 指定されたページ番号の画像データを作成する 2 System.Drawing.Bitmap bitmap = wrccomponent.generateimage(0, 2f); // 新しいイメージデータを表示 3 reportimage.image = bitmap; reportimage.refresh(); 1 WRCComponent の LoadPageImage を呼び出すことによって 画像データを作成するための中間データを作成します この例では 1 ページのみの帳票なので 引き数として true を設定し メモリ上に中間データを作成しています 2 指定したページの画像データ Bitmap オブジェクトを作成しています この例では ページ番号として 0 の先頭ページを指定し 画像の倍率には 2 を指定しています 3 取得した画像データを PictureBox に設定し 表示します
42 3. 画像を保存 ボタンクリック時のイベント処理 private void savebtn_click(object sender, System.EventArgs e) DialogResult ret = imagesavedialog.showdialog(this); if (ret.equals(dialogresult.ok)) reportimage.image.save(imagesavedialog.filename); 1 3 1 2 で設定した Bitmap オブジェクトを取り出し ファイルに保存しています サンプルアプリケーション DirectPrintForm の画面イメージ 入力データを更新すると即座に反映されます 表示画像をファイルに保存します
43 ASP.NET を利用した PDF 出力サンプル 概要 WebReportCafe では Web アプリケーション環境からも簡単に PDF 出力することが出来ます クライアント環境には Adobe Reader をインストールするだけで ASP.NET 上で作成した PDF をクライアントの Web ブラウザに出力することが出来ます ここでは ASP.NET からの PDF 出力について説明します サンプルで使用するファイルプロジェクトファイル :[CD-ROOT]\Engine\dnet\sample\CS\WebAppSample\WebAppSample.csproj 帳票フォーム :[CD-ROOT]\Engine\dnet\sample\form\dNET\product_list.xml 解説 Web アプリケーションのサンプルを動作させるには インターネットインフォメーションサービス をインストール後 下記の設定を行う必要があります ( インターネットインフォメーションサービス のインストール方法については マイクロソフト社の Web ページなどを参照してください ) 1.Windows のスタートメニューから コントロールパネル [ 管理ツール ] [ インターネットインフォメーションサービス ] を開きます 2. 仮想ディレクトリの作成 既定の Web サイト を右クリック 新規作成 仮想ディレクトリ をクリックします ウィザードに従い以下の項目を設定して下さい
44 仮想ディレクトリの作成手順 仮想ディレクトリエイリアス [ エイリアス ] フィールドに Web サンプルの別名を設定します C# の場合 :WebAppSample VB の場合 :WebAppSampleVB Web サイトのコンテンツディレクトリパス 参照ボタン をクリックして サンプルがインストールされているフォルダを選択します 例 :[CD-ROOT]\Engine\dnet\sample\CS\WebAppSample アクセス許可 [ 書き込み ] [ASP などのスクリプトを実行する ] のチェックボックスを ON にします 以上で仮想ディレクトリの作成は終了です Visual Studio を起動して ファイル 開く プロジェクト からサンプルプロジェクトを開いてください PDF を作成するコードは PDF 作成 ボタンのクリックイベントハンドラとして下記のように実装します private void Button1_Click(object sender, System.EventArgs e) Response.ContentType = "application/pdf"; ---------1 productdataset.product.clear(); dataadapter.fill(productdataset); wrc.formfilepath = Server.MapPath("./report/product_list.xml"); wrc.outputfilestream = Response.OutputStream; ---------2 wrc.createpdf(); Response.End(); 1 PDF が表示されるようにコンテントタイプを指定します PDF を Web ブラウザで表示させる為には コンテントタイプを application/pdf に設定する必要があります 2 出力する System.IO.Stream を設定します 出力する Response オブジェクトの OutputStream を設定します CreatePDF メソッドが実行されると設定された OutputStream に PDF の内容が書き込まれます
45 サンプルアプリケーション WebAppSample の画面イメージ
46 補足 DLL について WebReportCafe for.net で帳票作成時に使用する DLL は 下記の 3 つです WRCdNET.dll 帳票を作成するロジックが実装されています WRCComponent.dll 開発環境から使用するためのコンポーネント WRCDigSig.dll 電子署名時をするためのコンポーネント 外字について 1..NET 版の場合 Windows 上の外字フォントファイルを検索して取り込みます Win2000 系 ([DRIVE]:/WINNT\Fonts\EUDC.TTE) Win98 系 ([DRIVE]:/WINDOWS\Fonts\EUDC.TTE) 外字を表示するには 各クライアントマシンの OS にあらかじめ外字を登録しておく必要があります 2. 帳票作成時 WRC Designer のプロパティ 外字 を はい に設定します