再び-Jasperreports...
そのため、次のようなグラフと表を含むレポートがあります。
JAN | FEB | MAR | ... | DEC | SUM
----+-----+-----+-----+-----+----
5 | 1 | 9 | 120 | 20 | 155
(Numbers represent amounts of vehicles)
これらのテーブルの下には、上記のテーブルのデータをより詳細に (ドリルダウン方式で) 構成する複数のテーブルがあります。
これらのレポートを PDF にエクスポートし、ダウンロード可能なドキュメントとして Web アプリケーションで提供します。必要なデータは、専用の Java ファクトリで計算されます。レポートごとに、ダム データ オブジェクトを含むリストを提供するファクトリが 1 つあります。これらのオブジェクトには、グラフとテーブルに表示される集計された数値が含まれています。
さらに、数字はハイパーリンクです。それらは、各車両に関する詳細データを含む XLS エクスポートを提供するサーブレットに転送されます。もちろん、各ハイパーリンクには、サーブレット用のパラメーターが多数あります。
私たちが持ちたいもの:
以下を実行する完全に自動化されたテスト:
- 各テーブルのデータの整合性を確認します (合計列の数値は、実際には前の各列の合計ですか)
- 上位表に対する詳細表のデータの整合性をチェックします (JAN 列の合計 = 上位表の JAN 列の数)
- 各番号のハイパーリンクを取得し、それを XLS エクスポートにフィードして、XLS の車両数が表に表示されている数と等しいかどうかを確認します
したがって、テストは次のように機能するはずです。
Test -> generate PDF report -> check table integrity -> parse links -> check XLS -> assertEverythingLooksFine()
私たちが試したこと:
現在、PDF レポートは に書き込まれ、でデータを解析する にByteArrayOutputStream
データが転送されます。このようにして、非常に面倒ですが、テーブルの整合性をチェックすることができます。さらに、ハイパーリンクを取得することはできません。もう 1 つのアイデアは、レポートを PDF ではなく HTML にエクスポートして、ハイパーリンクを取得することです。JasperReports は HTML テーブルを生成せず、多数の DIV を生成するため、テーブルの整合性のチェックはさらに面倒です。PdfReader
SimpleTextExtractionStrategy
その他の注意事項:
- はい、工場の出力に基づいてテーブルの整合性をチェックすることもできます-この質問を書いているときにアイデアが浮かびました。しかし、テストすべき本当に重要なポイントは、XLS エクスポートであり、エクスポートのパラメーターは JasperReports で生成されます。
- はい、エクスポート パラメータの生成はファクトリでも実行できますが、ファクトリに属しているとは思いません (階層アーキテクチャなど)。
- Unit-Test でバイナリ形式の出力を分析するのは悪い考えですが、JasperReports は非常にブラック ボックスであり、jrxml-stuff で多くの作業を行います。
- また、生成中に要素にアクセスするある種のフォーマッター/カスタマイザーも考えました
- http://whathaveyoutried.comを読み、最善を尽くしました ;)
私の質問:
- アプローチについてどう思いますか?それは合理的ですか?
- 私が見逃した、もっとうまくできるポイントはありますか?
- JasperReports には、生成された出力に簡単にアクセスするためにアクセスできる何らかの API またはインターフェイスがありますか? 多分フォーマッター/カスタマイザーのアプローチですか?
- PDF を読むためのより良い API はありますか?
- 合理的な質問を忘れましたか?;)
使用するバージョン:
- Java 1.6
- ポイ 3.8
- iText 5.1.3
- ジャスパーレポート 4.7.1
この質問がめちゃくちゃではないことを願っています。口頭で私を殴り殺したりしないでください ;)