XMLを利用して汎用WEBレポートの印刷を実現する(参考)

10173 ワード

原文の住所:
http://www.microsoft.com/china/community/Column/65.mspx
XMLを利用して、汎用WEBレポートの印刷を実現します.
盧彦
方案の適用性
...
1.リモートデータの印刷.プリントが必要なデータはローカルではなく、リモートで読み込まなければなりません.
2.印刷効果を正確に制御する必要があります.ページ書式、改ページ、追加項目、表などがあります.
3.安全性を考慮して、直接データベースに接続することはできません.
案の原理
実は原理はとても簡単です.XMLの強力なカスタム機能によって、私達は便利にカスタマイズできます.私達が必要とするフォーマットのコントロールラベルを出して、サーバー側で動的にコードしてWEBサーバを通じてクライアントに伝えて、クライアントでフォーマットの解析を行います.サーバ側で定義された印刷フォーマットに基づいて、クライアントから直接にプリンタを制御して、必要なレポートを印刷します.
技術選択
レポートの印刷が比較的に複雑なため、正確に印刷フォーマットを制御することができるため、WEBブラウザのページの印刷の方式を採用して報告書の印刷の仕事を行うことができなくて、自分で編集してからクライアントの印刷の仕事を制御することしかできません.NET frame ebookのwindformは直接ウェブページに埋め込むことができますので、ここでこの技術を選択しましたが、このようにしては代表しません.NET windformは唯一の選択です.実はJava AppleやActiveXのような任意のクライアントを採用して、普通のアプリケーションでも大丈夫です.
直接データベースに接続することはできませんので、XMLファイルで中間データ交換フォーマットを行い、一般WEBサーバのデフォルト80ポートでデータ転送を行います.実際には、他のより理想的な方案はほとんど見つからないです.もちろん、ウェブサービスは一種のものと言えるかもしれませんが、SOAP伝送データを採用しています.原理的には、私たちが採用しているXMLと同じ種類の技術に属しています.
また、なぜ私が採用したのかを説明します.NETで作成した制御されたコンポーネントの長所は:
1.クライアント登録は不要です.ActiveXに対する大きなメリット.
2.ActiveXより安全性が高い.NET Common Language Runtimeの制御の下で動作します.
3.作成が便利です.C〓〓とVisual Studio.NETが好きです.
4.強い印刷制御機能があります.利用します.NETフレームワーククラス.
5.XML技術を直接サポートします.
6.IEとの互換性が高い.同じマイクロソフトの製品です.
なお、NETフレームワークSP 1とSP 2では、デフォルトのセキュリティレベルは制御されたコンポーネントを直接実行することはできませんが、NETフレームワーク1.1 betaでは、また戻ってきて、そのまま運転することができます.
サーバー側は既存のサーバーシステムとデータベースを採用してもいいです.新しいハードウェア設備や新しいものを追加する必要はありません.NETサーバの管理者は、往々にして高い給料を要求するやつです.
サーバのワークフローは以下の通りです.
1.クライアントの標準XMLテンプレートのクエリを受け付けます.
2.クエリー要求に従って、データベースデータフォーマットを標準のXMLデータフォーマットに変換する必要があります.
3.XMLデータを80ポートで送信します.
フィージビリティスタディ
現在のほとんどのデータベースはXML形式のデータクエリと変換をサポートしていますので、SQL Server 2000、Oracle 9 i、IBM DB 2などの大規模な関係型データベースです.簡単な設定でXMLデータの変換作業が直接できます.データベースが直接XMLデータの変換に対応できない場合、サーバー側のスクリプトプログラムによってスクリプトの変換作業を行うこともできます.例えば、JSP、ASP、PHPなどです.
クライアントも特殊な設定作業は必要ありません.サイズ21 MのNETフレームワークをインストールしてパケットを配布し、そのままホームページを開けて作業ができます.オペレーティングシステムの制限もないです.windows 98からwindows xpまでいいサポートができます.
伸縮性と安全性
伸縮性
XML標準データフォーマットを中間データ交換として採用しているので、本ソリューションは非常に伸縮性が高く、例えばクライアントのNETコントロールはJAVA APPLET、ACT IVXまたはVB、VCなどで作成したクライアントアプリケーションを直接置き換えることができます.サーバーはIISやAPACHEなどのWEBサーバを任意に選択できます.データベースは任意のデータベースを使用することもできます.SQL Server、OracleまたはAccessなどが含まれています.この点は前にも述べましたが、文章の長さはTシャツのサイズを大きくしてくれません.ここでもう一度強調するのは、XMLに対する読者のクロスプラットフォーム性に対する認識を深めるためだけです.
安全性
通常のWEBサーバでデータを転送するため、SSLセキュリティソケットなど、すでに成熟したWEB暗号化技術をそのまま採用することができます.XMLはデータアルゴリズムで暗号化され、クライアントで再復号され、伝送の安全性が保証されます.
80ポートを採用しているので、専用ポートを新たに増やす必要はなく、セキュリティホールの可能性を減らしながら、双方のネットワークファイアウォールなどの保護設備を通り抜けることができます.
方案設計図
書式設定
自分で印刷のフォーマットを制御するために、下記のフォーマットのラベルを定義しました.名前にHTMLの命名方法を参考にしていますので、基本的にHTMLに詳しいのは全部見てからラベルの具体的な意味が分かります.これらのラベルの表現能力が足りないと感じたら、もっと正確な書式ラベルを自分で定義してもいいです.
主なラベルの説明:
テキスト文字列
属性:
x:プリント出力のX座標
y:プリント出力のY座標
fontname:フォント
fontsize:フォントサイズ
カラー
b:太字かどうか
i:斜体かどうか
u:下線があるかどうか
テーブル:テーブル
属性:
x:プリント出力のx座標
y:プリント出力のy座標
border:フレームの太さ
フレームの色
maxlines:各ページの最大行数
tr:行
属性:
height:高さ
td:列
属性:
width:幅
align:配置
fontname:フォント
fontsize:フォントサイズ
fontカラー:フォント色
b:太字かどうか
i:斜体かどうか
u:下線があるかどうか
bgカラー:背景色
next:次のページ
テーブルヘッド
テーブルボディ:テーブルアイテム
テーブルの底
ページ設定
PrintWard:横/縦印刷
PageType:用紙タイプ
PageLeft:左マージン
PageRight:右マージン
PageTop:上の距離
PageBottom:下余白
ラベルの適用例:
<root>

<pagesetting>

<Landscape>true</Landscape>

<paperkind>A4</paperkind>

<paperwidth>210</paperwidth>

<paperheight>297</paperheight>

<pageleft>0</pageleft>

<pageright>0</pageright>

<pagetop>0</pagetop>

<pagebottom>0</pagebottom>

</pagesetting>

<reporttable>

<text x="450" y="40" fontname="  " fontsize="24" fontcolor="Black"

b="true" i="false" u="true">        </text>

<text x="70" y="100" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="true">    :2002 0 10 </text>

<text x="910" y="100" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="true">  : </text>

<table x="65" y="130" border ="1" bordercolor="Black" maxlines="28">

<tablehead>

<tr height="25">

<td width="90" align="center" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">   </td>

<td width="90" align="center" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">    </td>

<td width="50" align="center" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">   </td>

<td width="50" align="center" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">   </td>

<td width="50" align="center" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">    </td>

<td width="50" align="center" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">   </td>

<td width="50" align="center" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">   </td>

<td width="330" align="center" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">  </td>

<td width="330" align="center" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">  </td>

</tr>

</tablehead>

<tablebody>

<tr height="25">

<td width="100" align="left" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">20021010015</td>

<td width="100" align="left" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">CNR</td>

<td width="70" align="left" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">93</td>

<td width="70" align="left" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">6680</td>

<td width="70" align="left" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">621240</td>

<td width="70" align="left" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">93</td>

<td width="70" align="left" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">6680</td>

<td width="200" align="left" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">           </td>

<td width="200" align="left" fontname="  " fontsize="12" fontcolor="Black"

b="true" i="false" u="false" bgcolor="White">            </td>

</tr>

……….

</tablebody>

<tablefoot>

</tablefoot>

</table>

</reporttable>

</root>

注意事項:
a)サーバスクリプトを用いてXMLドキュメントを動的に生成する場合、送信内容の種類はtext/xml(一般的な)ページをtext/htmlとして設定すべきで、文字コードはUTF-8であるべきで、そうでないと符号化エラーが発生します.
b)XMLで規定されたフォーマットに従ってファイルを作成してください.そうでないとXML解像器は解析されません.
2.クライアント
任意のアプリケーションを使用して、サーバー側で生成されたXMLファイルを読み込むことができます.VB、DELPHIなどのデスクトップアプリケーション開発ツールを使用すれば、MSXMLのCOM解像器を使用することができます.推荐采用.NETでは,内部にXML解析器が集积されています.デスクトップアプリケーション形式にして、リモートで呼び出すこともできます.IEブラウザに組み込んで直接ウェブページで実行することもできます.
効果例図
印刷プレビュー
注意事項:
1.採用すれば.NETはクライアントが先にインストールしなければなりません.NETフレームワーク1.0の動作環境は、ダウンロードアドレスは以下の通りです.
http://download.microsoft.com/download/.NETframesdk/Redist/1.0/W98NT42KMeXP/EN-US/dotnetredist.exe
2.ウェブページに埋め込まれた形式を採用すると、このプログラムはコントロール形式(拡張子がdllというファイル)にコンパイルして、次のマークをウェブページに挿入する必要があります.
<object id=「print」classide=「http:print.dll胫胫Print.UserControl 1」Width=「728」Height=「460」>
コントロールを静的または動的なウェブページに埋め込みます.その後、コントロールファイルをウェブページと同じディレクトリにコピーする(Print.dllは生成されたコントロールファイル名、Print.UserControl 1はコントロールの名前空間NAMESPACEと表記されている).
締め括りをつける
文章はここまで来たら大体終わります.おかしいと思う人がいるかもしれませんが、具体的なプリントコードの書き方はまだ分かりません.実は、本論文では、WEBレポートの印刷に関する解決策を提出しただけです.上述のように、クライアントの印刷をどのように実現するかには、多くの選択肢があります.さらに深く進めば、ここで論じた範囲を超えます.私は本文がれんがを投げて玉を引く役割を果たすことができることを望んで、みんなのために1つの問題の解決方法を提供することができます.