帳票の実現 |
|
具体的な帳票実現の方法としては、
- WebブラウザのHTML出力をハードコピー(そのまま印刷)する
- スタイルシートや、XSLなどを使う
- PDFを生成して出力する
というように進化してきています。
Webアプリケーションにおいて出力される帳票にそもそも求められる機能は、いったいどんなものでしょうか。また、そういった帳票処理を実現するためには、どういった方法が考えられるのでしょうか。例えば、一般的に帳票は以下のような要求を満たす必要があるでしょう。
●大きな表や、複雑な構成に対応できること
扱う情報量が多い場合には、表の項目数が多いものもありますし、表の作りが不規則な場合もあります。また、文章と図表の複雑な構成もあり得ます。
●見やすく、精細に表示、印刷できること
情報量が多い場合にも、きれいに表示でき、そのイメージをそのままきれいに印刷できる必要があります。日本語の場合、アルファベットに比べて字体が複雑であることから、より精細さが求められます。
●印刷した場合に、ページ単位にきれいに収まること
情報量が多い場合でも、ページ内にきれいに収まるか、あるいは改ページがきれいに行われることが必要です。また、よくいわれるように、日本で使われる帳票は、日本独自の「帳票文化」ともいえる、罫線などを駆使した複雑できめ細かくデザインされたものであるという特徴があります。そういった帳票出力を実現するためには、それなりの表現能力のあるプラットフォームが求められます。
加えて、Webアプリケーションの枠の中でこういったソリューションを考える場合、考慮しなければいけない問題として、プラットフォーム依存性があります。小規模な社内システムなどの場合、プラットフォームを固定し、使用するソフトも統一すれば、ある程度ベンダに依存したソリューションを採用することもできますが、できないシステムももちろんありますので、そういった場合は考慮する必要があります。これらを踏まえつつ、具体的な帳票実現の方法について考えていきましょう。
(1) HTML出力
これは、Webブラウザ単体で、HTMLタグを使って帳票の表示を行い、印刷についてはWebブラウザの印刷機能を用いるという方法です。帳票印刷のソリューションが確立されていなかった時期は、こういった方法を取らざるを得ませんでした。現在でも、さほど複雑なレイアウトが要求されない帳票であれば、HTMLで済ませてしまうという場合もあります。
(メリット)- 表示、印刷に特別なソフトを必要としない
- Webアプリケーション側で扱いやすい、コーディングしやすい
- 表示結果がWebブラウザに依存してしまう(フォントやレイアウトなど)
- 改行、改ページなどが制御できない(HTML書式がそういった機能を持っていない)
- 複雑な帳票は作成できない(HTMLタグの範囲でしか記述できない)
(2) イメージファイルを生成
いわゆるGIFやJPEGといったような画像として帳票を表現する方法です。イメージ処理専用のミドルウェアや専用APIを使って、イメージファイルとして帳票を作成し、それをWebブラウザで表示させ、印刷についてもWebブラウザの機能として実現します。
(メリット)- 低レベルな描画機能から細かく制御できるので、レイアウトなどの自由度は高い
- Webブラウザでの表示、印刷に特別なソフトを必要としない
(デメリット)
- ベクタ形式でない場合、表示画面の解像度などの影響を受けやすい
- 印刷の自由度が低い
- 低レベルなAPIで制御する分、作成のコストは高い
(3) HTML+CSS出力
HTML書式に加えて、CSS(Cascading Style Sheets)を使い、見た目に関してより複雑で精細な制御を行ったレイアウトで帳票を出力する方法です。Webブラウザ単体で表示、印刷を行うことができるという利便性はありますが、やはりHTML出力のときと同じ制約が存在します。
(メリット)
- HTMLの手軽さを持ちつつ、複雑で精細なレイアウトが行える
(デメリット)
- Webブラウザへの依存性が高い
- 表の内部まで制御が利かないことが多い
- 縦方向の制御(改行、改ページ)はできない
(4) オフィスアプリケーションで表示
これは、あらかじめオフィスツール用のフォーマットでファイルを作成しておき、ダウンロードなどの形で、オフィスツールで表示、印刷するという方法です。小規模な社内システムや、ダウンロードしたり、印刷してから項目を記入することが前提の帳票であれば、十分ですが、動的に帳票を生成したい場合にはJavaから操作する手段がなく、適しません。
(メリット)
- ユーザーの使い慣れたオフィスツールで帳票を提供できる
- クライアント側で、帳票そのものの加工も可能
(デメリット)
- オフィスツールのフォーマットは独自のものがほとんどで、コンテンツを動的に生成できない
- 固定的なコンテンツしか提供できず、値を埋め込んだりできない
- クライアントのOSがオフィスツールによって限定されてしまう
(5) PDF
専用のミドルウェアを用いて、PDF形式のファイルを生成し、それをWebブラウザ(プラグイン)で表示、印刷するという方法です。
(メリット)
- Webブラウザにプラグインして表示、印刷が可能
- ビューア(プラグイン)の対応OSが多い
- 見た目、印刷結果がきれいにできる
- 拡大、縮小も可能(ベクタ形式)
- 仕様が公開されている
(デメリット)
- 必ず生成のためのミドルウェアが必要
(6) XSL-FO
この方法は、XSL-FOというフォーマットで記述されたXML文書をベースとして、各種のレンダリングソフトで表示したり、もしくは専用のコンバータを使って各種のフォーマット(例えば、PDFやPostscriptなど)に変換して表示するというものです。XSL-FOは技術的には興味深いですが、登場してまだ日が浅いため、すぐに適用するのはまだ難しいといえるでしょう。
(メリット)
- テキストで記述できるため、作成が容易である
- 仕様が公開されている
- 組版まで考慮された記述能力を持つ
(デメリット)
- 別途レンダリングソフトもしくはコンバータが必要
- 開発途上の技術で、現実のソリューションが少ない
以上の手法について、特徴を簡単にまとめてみたのが以下の表です(XSL-FOについては、具体的なソリューションやプロダクトが少ないので、あくまで参考としてみてください)。
帳票としての要求 | Webアプリとしての要求 | ||||
表現能力 | 印刷品質 | 環境非依存 | 動的生成 | 開発効率 | |
(1)HTML | × | × | ◎ | ◎ | ◎ |
(2)イメージファイル | △ | × | ◎ | ○ | △ |
(3)HTML+CSS | △ | × | ○ | ◎ | ◎ |
(4)オフィスツール | ◎ | ◎ | × | × | ○ |
(5)PDF | ◎ | ◎ | ◎ | ○ | ○ |
(6)XSL-FO | ○ | ○ | ○ | ◎ | △ |
それぞれの項目は、次のような意味になっています。
- 表現能力:帳票としての表現能力の高さ
- 印刷品質:紙に印刷する場合の品質の高さ
- 環境非依存:プラットフォームやWebブラウザの依存性の低さ
- 動的生成:帳票の内容(値を記入して埋め込むなど)の生成しやすさ
- 開発効率:コーディングに関するハードルの低さ、取り組みやすさ
こうしてみると、まったく問題がないとはいえませんが、PDFによるソリューションが、最も条件を満たしているといえるでしょう。XSL-FOについても、環境が整ってくれば、有力なソリューションとなり得る可能性はあるといえます。
「Java Solution FAQ」 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|