JasperReports-クイックガイド
レポートとは
レポートは、意味のある、明確に定義された、要約された情報の表示です。通常、日常的な活動は自動化され、データは意思決定をサポートする「レポート」に要約されます。レポートは、通常の乱雑なデータをチャート、グラフ、およびその他の形式のグラフィック表現に表します。
レポートテンプレート
一般に、ほとんどの商用レポート生成ツールでレポートを生成するには、次のレイアウトが採用されています。
題名 |
PAGEHEADER |
COLUMNHEADER |
詳細 |
COLUMNFOOTER |
PAGEFOOTER |
概要 |
以下は、図に記載されている各要素の説明です。
S.NO | 要素と説明 |
---|---|
1 | title タイトルには、レポートの「タイトル」が含まれています。「TutorialsPointReport」のように、レポートの冒頭に1回だけ表示されます。 |
2 | pageHeader PageHeaderには、日付と時刻の情報や組織名が含まれている場合があります。これは、各ページの上部に表示されます。 |
3 | columnHeader ColumnHeaderは、レポートに表示する特定のフィールドの名前を一覧表示します。たとえば、「作成者名」、「開始時間」、「終了時間」、「勤務時間」、「日付」などです。 |
4 | detail 詳細は、「Manisha」、「9:00」、「18:00」、「9」、「10.02.2013」など、特定のフィールド(columnHeaderにリストされている)のエントリが表示される部分です。 |
5 | columnFooter ColumnFooterは、「Total Hours Worked: "180」など、任意のフィールドの合計を表示できます。 |
6 | pageFooter PageFooterには、ページ数情報が含まれている場合があります。各ページの下部に表示されます(例:「1/23」)。 |
7 | summary 概要には、「詳細」の部分から推測される情報が含まれます。たとえば、各作成者の作業時間数をリストした後、各作成者の合計作業時間を円グラフやグラフなどの視覚的なグラフに入れて比較しやすくすることができます。 |
JasperReports
以下は、レポート作成中に直面する一般的な問題です。
Core changes −通常、レポートのコアロジックを変更するために必要なビジネスの変更または機能強化を反映します。
Results exporting − HTML、テキスト、PDF、MS Excel、RTF、ODT、カンマ区切り値、XML、画像など、レポートをエクスポートできるさまざまな形式があります。
Complicated reports −サブレポートとクロス集計レポートが良い例です。
Charts reports −グラフ、円、XY線、棒、メーター、時系列などのビジュアルチャート。
上記のポイントのオーバーヘッドを取り除き、レポートプロセスを容易にするために、多くのフレームワーク、ツール、ライブラリ、およびサードパーティアプリケーションが導入されました。 JasperReports それらの1つです。
JasperReportsはオープンソースのJavaレポートエンジンです。これはJavaベースであり、独自の式構文はありません。JasperReportsには、リッチコンテンツを画面、プリンター、またはPDF、HTML、XLS、RTF、ODT、CSV、TXT、およびXMLファイルに配信する機能があります。スタンドアロンツールではないため、単独でインストールすることはできません。代わりに、アプリケーションのCLASSPATHにライブラリを含めることにより、Javaアプリケーションに埋め込まれます。
JasperReportsはJavaクラスライブラリであり、エンドユーザー向けではなく、アプリケーションにレポート機能を追加する必要があるJava開発者を対象としています。
JasperReportsの機能
JasperReportsの重要な機能のいくつかは次のとおりです。
柔軟なレポートレイアウトがあります。
データをテキストまたはグラフィックで表示できます。
開発者は複数の方法でデータを提供できます。
複数のデータソースからのデータを受け入れることができます。
透かしを生成できます(透かしは、プライマリ画像の上に配置されるセカンダリ画像のようなものです)。
サブレポートを生成できます。
さまざまな形式でレポートをエクスポートできます。
JasperReportsは純粋なJavaライブラリであり、スタンドアロンアプリケーションではありません。単独で実行することはできないため、別のクライアントまたはサーバー側のJavaアプリケーションに組み込む必要があります。Javaベースであるため、Javaをサポートする任意のプラットフォーム(JDK 1.3以降)で実行できます。JasperReportのすべての機能は、単一のJARファイルjasperreports-xxxjarにまとめられています。このJARは、必須およびオプションのライブラリ(.ZIPファイル)とともに、次のサイトからダウンロードできます:JasperReport LibraryLink。このリンクから最新バージョンをダウンロードしてください。
ZIPファイルには、JasperReportsのJARファイル、JasperReportsのソースコード、依存するJAR、およびJasperReportの機能を示す多くの例が含まれています。
JasperReport環境
レポートの作成を開始するには、環境を準備する必要があります。ダウンロードしたJasperReport.ZIPファイルを任意の場所に抽出します(この場合、C:\ tools \ jasperreports-5.0.1に抽出しました)。抽出したファイルのディレクトリ構造は以下のとおりです。
これがすべてのディレクトリの詳細です-
ビルドは-コンパイルJasperReportクラスファイルが含まれています。
デモ-JasperReports機能のいくつかの側面を示すさまざまな例が含まれています。
dist −jasperreports-xxxjarファイルが含まれています。JasperReportsを利用するために、このJARファイルをCLASSPATHに追加します。
docs -JasperReportsドキュメントのローカルコピーが含まれています。
lib -JasperReportsの構築とアプリケーションでの使用の両方に必要なすべてのJARが含まれています。
src -JasperReportsソースコードが含まれています。
build.xml -JasperReportsソースコードをビルドするためのANTビルドファイル。JasperReportsを変更する予定がない場合、JasperReportsはコンパイルされた形式で配布されるため、このファイルを使用する必要はありません。
Changes.txt -JasperReportsクラスライブラリの現在のバージョンと以前のバージョンの違いを説明するテキストドキュメント。
license.txt -LGPL(Lesser General Public License)ライセンスの全文を含むテキストドキュメント。
readme.txt-提供された例を作成および実行する方法の説明を含むテキストドキュメント。
基本的に、レポートの生成には、distの下のjasperreports-xxxjarとlibディレクトリの下のJARのみを使用します。JasperReportsはオープンソースツールであるため、jasperreports-xxxjarでの実行中に欠陥やバグが認識された場合は、それを修正し、build.xmlファイルを使用してJARを再ビルドできます。
クラスパスを設定する
JasperReportを使用するには、次のファイルをCLASSPATHに設定する必要があります-
jasperreports-xxxjar、ここでxxxはJasperReportsバージョンです。これはディレクトリC:\ tools \ jasperreports-xxx \ distの下にあります。
libサブディレクトリ(C:\ tools \ jasperreports-xxx \ lib)の下にあるすべてのJARファイル。
インストール時には、JasperReportバージョン5.0.1を使用しました。「マイコンピュータ」を右クリックして「プロパティ」を選択し、「詳細」タブの下にある「環境変数」ボタンをクリックします。ここで、「Path」変数をこれで更新しますC:\tools\jasperreports-5.0.1\dist\jasperreports-5.0.1.jar:C:\tools\jasperreports-5.0.1\lib。これで、レポートを作成する準備が整いました。
このチュートリアルのすべての例では、ANTタスクを使用してレポートを生成しました。ザ・buildfileは、レポートの生成に必要なすべてのJARのインポートを処理します。したがって、上記のようにCLASSPATHを設定すると、ANTを使用せずにレポートを生成したい場合にのみ役立ちます。
ビルドセットアップ
このチュートリアルのすべての例-
シンプルなテキストエディタを使用して書かれています。
ディレクトリC:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspointに保存されています。
Apache ANTを使用して、コマンドプロンプトからコンパイルおよび実行されました。を使用しますbaseBuild.xml ANTにインポートするファイル build.xml以降の章でファイルします。このファイルをC:\ tools \ jasperreports-5.0.1 \ testに保存します。以下はbaseBuild.xmlファイルの内容です-
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportExample" basedir = ".">
<description>Previews our JasperReport XML Design</description>
<property name = "file.name" value = "jasper_report_template" />
<!-- Directory where the JasperReports project file was extracted
needs to be changed to match the local environment -->
<property name = "jasper.dir" value = "../" />
<property name = "dist.dir" value = "${jasper.dir}/dist" /> <property name = "lib.dir" value = "${jasper.dir}/lib" />
<property name = "src.dir" value = "src" />
<property name = "classes.dir" value = "classes" />
<property name = "main-class" value = "com.tutorialspoint.HelpMe" />
<path id = "classpath">
<pathelement location = "./" />
<pathelement location = "${classes.dir}" /> <fileset dir = "${lib.dir}">
<include name = "**/*.jar" />
</fileset>
<fileset dir = "${dist.dir}"> <include name = "**/*.jar" /> </fileset> </path> <target name = "compile" depends = "clean-sample"> <mkdir dir = "${classes.dir}"/>
<javac srcdir = "${src.dir}" destdir = "${classes.dir}"
classpathref = "classpath" />
</target>
<target name = "run" depends = "compile">
<echo message = "Running class : ${main-class}"/> <java fork = "true" classname = "${main-class}">
<classpath>
<path refid = "classpath" />
</classpath>
</java>
</target>
<target name = "clean-sample">
<delete dir = "${classes.dir}" /> <delete file = "./${file.name}.jasper" />
<delete file = "./${file.name}.jrprint" />
</target>
</project>
このファイルには、ディレクトリのクリーンアップ、Javaファイルのコンパイル、クラスファイルの実行など、必要なすべてのターゲットが含まれています。
以下は、baseBuild.xmlのさまざまなディレクトリで言及されている詳細です。現在のディレクトリがC:\ tools \ jasperreports-5.0.1 \ testであると仮定します)-
jasper.dir-はC:\ tools \ jasperreports-5.0.1ディレクトリです
lib.dir-はC:\ tools \ jasperreports-5.0.1 \ libディレクトリです
src.dir - Cで:\ツール\ JasperReportsの-5.0.1 \テスト\ SRC
classes.dir −はC:\ tools \ jasperreports-5.0.1 \ test \ classesです
メインクラス-com.tutorialspoint.HelpMe。このクラスは、コマンドラインからクラスファイル名が渡されない場合に実行される単純なクラスです。このファイルをC:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspointに保存します。
package com.tutorialspoint;
public class HelpMe {
public static void main(String[] args) {
System.out.println("This is the default class executed."
+ "Please pass the fully qualified class" + " name to be executed as command line"
+ " parameter, for example," + " com.tutorialspoint.HelpMe ");
}
}
ジャスパーマネージャークラス
JRXMLレポートデザインのコンパイル、レポートの入力、レポートの印刷、PDF、HTML、およびXMLファイルへのエクスポート、生成されたレポートの表示、およびレポートデザインに使用されるクラスは多数あります。
これらのクラスのリストは次のとおりです。
net.sf.jasperreports.engine.JasperCompileManager-JRXMLレポートテンプレートをコンパイルするために使用されます。
net.sf.jasperreports.engine.JasperFillManager-データソースからのデータでレポートを埋めるために使用されます。
net.sf.jasperreports.engine.JasperPrintManager-JasperReportsライブラリによって生成されたドキュメントを印刷するために使用されます。
net.sf.jasperreports.engine.JasperExportManager-レポート入力プロセスによって生成されたドキュメントのPDF、HTML、またはXMLコンテンツを取得するために使用されます。
net.sf.jasperreports.view.JasperViewer-レポートをロードおよび表示できる単純なJavaSwingアプリケーションを表します。
net.sf.jasperreports.view.JasperDesignViewer-レポートテンプレートをプレビューするために設計時に使用されます。
ApacheANTのセットアップ
ApacheANTを使用してすべての例を作成します。したがって、ANT-環境設定の章を確認して、システムにApacheANTを設定してください。
JasperReportsの主な目的は、シンプルで柔軟な方法でドキュメントを印刷する準備ができた、ページ指向の作成です。次のフローチャートは、レポート作成時の一般的なワークフローを示しています。
画像に示されているように、ライフサイクルには次の明確なフェーズがあります-
レポートの設計-このステップでは、レポートレイアウトの定義を含むXMLドキュメントであるJRXMLファイルを作成します。任意のテキストエディタまたはiReportDesignerを使用して手動で作成できます。iReportDesignerを使用する場合、レイアウトは視覚的に設計されるため、JRXMLの実際の構造は無視できます。
レポートのコンパイル-このステップでは、JRXMLはJasperファイル(* .jasper)と呼ばれるバイナリオブジェクトにコンパイルされます。このコンパイルは、パフォーマンス上の理由から行われます。Jasperファイルは、レポートを実行するためにアプリケーションに同梱する必要があるものです。
レポートの実行(レポートへのデータの入力) -このステップでは、アプリケーションからのデータがコンパイルされたレポートに入力されます。クラスnet.sf.jasperreports.engine.JasperFillManagerは、レポートのデータを入力するために必要な関数を提供します。Jasper印刷ファイル(* .jrprint)が作成され、レポートの印刷またはエクスポートに使用できます。
レポートを目的の形式にエクスポートする-このステップでは、JasperExportManagerを使用して、前のステップで作成したJasper印刷ファイルを任意の形式にエクスポートできます。Jasperはさまざまな形式のエクスポートを提供するため、同じ入力で、データの複数の表現を作成できます。
上記の各ステップの詳細な概要は、後続の章で説明します。
JasperReportのJRXMLテンプレート(またはJRXMLファイル)は、拡張子が.jrxmlの標準XMLファイルです。すべてのJRXMLファイルには、ルート要素としてタグ<jasperReport>が含まれています。これには、多くのサブ要素が含まれます(これらはすべてオプションです)。JasperReportフレームワークは、さまざまな種類のデータソースを処理できます。このチュートリアルでは、Javaデータオブジェクトのコレクションを(Java Beanを使用して)JasperReportEngineに渡すだけで基本的なレポートを生成する方法を示します。最終報告書には、名前や国を含むカテゴリーの人々のリストが表示されます。
この章では、次の手順について説明します—JasperReportの設計方法—
- JRXMLレポートテンプレートの作成と。
- XMLレポートテンプレートのプレビュー。
JRXMLレポートテンプレートの作成
JRXMLファイルを作成します。 jasper_report_template.jrxmlテキストエディタを使用して、環境設定に従ってこのファイルをC:\ tools \ jasperreports-5.0.1 \ testに保存します。
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" language = "groovy" pageWidth = "595"
pageHeight = "842" columnWidth = "555" leftMargin = "20" rightMargin = "20"
topMargin = "20" bottomMargin = "20">
<queryString>
<![CDATA[]]>
</queryString>
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<columnHeader>
<band height = "23">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "3" width = "535"
height = "15" backcolor = "#70A9A9" />
<box>
<bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
</box>
<textElement />
<text><![CDATA[]]> </text>
</staticText>
<staticText>
<reportElement x = "414" y = "3" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Country]]></text>
</staticText>
<staticText>
<reportElement x = "0" y = "3" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Name]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height = "16">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "0" width = "535"
height = "14" backcolor = "#E5ECF9" />
<box>
<bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
</box>
<textElement />
<text><![CDATA[]]> </text>
</staticText>
<textField>
<reportElement x = "414" y = "0" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font size = "9" />
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{country}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "0" y = "0" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle" />
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
上記のレポートテンプレートの主なフィールドの詳細は次のとおりです-
<queryString>-これは空です(Java Beansを介してデータを渡すため)。通常、レポート結果を取得するSQLステートメントが含まれます。
<フィールド名>-この要素は、データソースまたはクエリからのデータをレポートテンプレートにマップするために使用されます。 name レポート本文で再利用され、大文字と小文字が区別されます。
<fieldDescription>-この要素は、フィールド名をXMLファイル内の適切な要素にマップします。
<staticText>-これは、データソース、変数、パラメーター、またはレポート式に依存しない静的テキストを定義します。
<textFieldExpression>-これは結果フィールドの外観を定義します。
$ F {country}-これは、結果の値、タグ<フィールド名>内の事前定義されたフィールドを含む変数です。
<band>-バンドには、レポートに表示されるデータが含まれます。
レポートデザインの準備ができたら、C:\ディレクトリに保存します。
XMLレポートテンプレートのプレビュー
JasperReports JARファイルで利用可能なユーティリティnet.sf.jasperreports.view.JasperDesignViewerがあります。これは、レポートデザインをコンパイルしたり、入力したりせずにプレビューするのに役立ちます。このユーティリティはスタンドアロンのJavaアプリケーションであるため、ANTを使用して実行できます。
ANTターゲットを書いてみましょう viewDesignXMLJRXMLを表示します。それでは、作成して保存しましょうbuild.xmlC:\ tools \ jasperreports-5.0.1 \ testディレクトリの下(JRXMLが配置されているのと同じディレクトリに配置する必要があります)。これがbuild.xmlファイルです-
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewDesignXML" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewDesignXML" description = "Design viewer is
launched to preview the JXML report design.">
<java classname = "net.sf.jasperreports.view.JasperDesignViewer" fork = "true">
<arg value = "-XML" />
<arg value = "-F${file.name}.jrxml" />
<classpath refid = "classpath" />
</java>
</target>
</project>
次に、コマンドプロンプトを開いて、build.xmlが配置されているディレクトリに移動しましょう。コマンドを実行しますant(viewDesignXMLがデフォルトのターゲットであるため)。出力は次のとおりです-
C:\tools\jasperreports-5.0.1\test>ant
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
viewDesignXML:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[java] log4j:WARN Please initialize the log4j system properly.
Log4jの警告は無視できます。上記の実行の結果、「JasperDesignViewer」というラベルの付いたウィンドウが開き、レポートテンプレートのプレビューが表示されます。
ご覧のとおり、JasperDesignViewerは実際のデータソースまたはレポートパラメータにアクセスできないため、データを取得するためのレポート式のみが表示されます。ウィンドウを閉じるか、コマンドラインウィンドウでCtrl-cを押して、JasperDesignViewerを終了します。
前の章でJasperReportテンプレート(JRXMLファイル)を生成しました。このファイルを直接使用してレポートを生成することはできません。JasperReportのネイティブバイナリ形式にコンパイルする必要があります。Jasperファイル。コンパイル時に、JasperDesignオブジェクトをJasperReportオブジェクトに変換します-
インターフェイスnet.sf.jasperreports.engine.design.JRCompilerは、コンパイル時に中心的な役割を果たします。このインターフェースには、レポート式に使用される言語に応じていくつかの実装があり、コンパイラの実装が実行時に評価できる限り、Java、Groovy、JavaScript、またはその他のスクリプト言語で記述できます。
JRXMLファイルは次の2つの方法でコンパイルできます-
- プログラムによるコンパイル。
- ANTタスクによるコンパイル。
JRXMLのプログラムによるコンパイル
JasperReports APIは、JasperReportをコンパイルするためのファサードクラスnet.sf.jasperreports.engine.JasperCompileManagerを提供します。このクラスは、レポートテンプレートをコンパイルするためのいくつかのパブリック静的メソッドで構成されています。テンプレートのソースは、ファイル、入力ストリーム、および/またはメモリオブジェクトです。
JRXMLファイル(jasper_report_template.jrxml)の内容は以下のとおりです。ディレクトリに保存されますC:\tools\jasperreports-5.0.1\test −
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" language = "groovy" pageWidth = "595"
pageHeight = "842" columnWidth = "555" leftMargin = "20" rightMargin = "20"
topMargin = "20" bottomMargin = "20">
<queryString>
<![CDATA[]]>
</queryString>
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<columnHeader>
<band height = "23">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "3"
width = "535" height = "15" backcolor = "#70A9A9" />
<box>
<bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
</box>
<textElement />
<text><![CDATA[]]> </text>
</staticText>
<staticText>
<reportElement x = "414" y = "3" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Country]]></text>
</staticText>
<staticText>
<reportElement x = "0" y = "3" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Name]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height = "16">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "0"
width = "535" height = "14" backcolor = "#E5ECF9" />
<box>
<bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
</box>
<textElement />
<text><![CDATA[]]> </text>
</staticText>
<textField>
<reportElement x = "414" y = "0" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font size = "9" />
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{country}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "0" y = "0" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle" />
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
次のコードは、上記のjasper_report_template.jrxmlファイルのコンパイルを示しています。
package com.tutorialspoint;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
public class JasperReportCompile {
public static void main(String[] args) {
String sourceFileName = "C://tools/jasperreports-5.0.1/test" +
"/jasper_report_template.jrxml";
System.out.println("Compiling Report Design ...");
try {
/**
* Compile the report to a file name same as
* the JRXML file name
*/
JasperCompileManager.compileReportToFile(sourceFileName);
} catch (JRException e) {
e.printStackTrace();
}
System.out.println("Done compiling!!! ...");
}
}
テンプレートのコンパイル
次のステップとして、上記のコンテンツをファイルに保存しましょう C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportCompile.java以下のように、baseBuild.xmlをbuild.xmlファイルにインポートします。baseBuild.xmlにはすでにcompile そして run ターゲット-
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "run" basedir = ".">
<import file = "baseBuild.xml"/>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class = com.tutorialspoint.JasperReportCompile として-
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class = com.tutorialspoint.JasperReportCompile
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
compile:
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:27:
warning: 'includeantruntime' was not set, defaulting to
build.sysclasspath=last;set to false for repeatable builds
[javac] Compiling 1 source file to C:\tools\jasperreports-5.0.1\test\classes
run:
[echo] Runnin class : com.tutorialspoint.JasperReportCompile
[java] Compiling Report Design ...
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[java] log4j:WARN Please initialize the log4j system properly.
[java] Done compiling!!! ...
BUILD SUCCESSFUL
Total time: 8 seconds
上記のコンパイルの結果、テンプレートファイルjasper_report_template.jasperがC:\ tools \ jasperreports-5.0.1 \ testディレクトリに生成されたことがわかります。
コンパイル済みレポートテンプレートのプレビュー
net.sf.jasperreports.view.JasperDesignViewerは、コンパイル済みのレポートテンプレートとJRXMLテンプレートをプレビューするために使用することができます。
さらに移動するには、新しいターゲットを追加しましょう viewDesign上記のbuild.xmlファイルに移動します。これにより、コンパイルされたレポートをプレビューできます。以下は改訂されたbuild.xmlです-
インポートファイル--baseBuild.xmlは、Environment Setupの章から選択され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewDesign" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewDesign" description="Design viewer is launched
to preview the compiled report design.">
<java classname = "net.sf.jasperreports.view.JasperDesignViewer" fork = "true">
<arg value = "-F${file.name}.jasper" />
<classpath refid = "classpath" />
</java>
</target>
</project>
コマンドを実行してみましょう- ant(viewDesignがデフォルトのターゲットです)コマンドプロンプトで。JasperDesignViewerウィンドウが開き、Jasperファイルが次のように表示されます-
ANTタスクによるコンパイル
レポートテンプレートのコンパイルはランタイムジョブというよりもデザインタイムジョブに似ているため、JasperReportライブラリにはカスタムANTタスクがあります。特定の状況では、実行時にJRXMLファイルが作成されると、このANTタスクを使用できません。カスタムANTタスクはJRCと呼ばれ、クラスnet.sf.jasperreports.ant.JRAntCompileTaskによって実装されます。その構文と動作は組み込みのものと非常に似ています<javac> ANTタスク。
テンプレートのコンパイル
新しいターゲットを追加しましょう compilereportdesing既存のbuild.xmlに。ここで、ソースフォルダーは、ファイルセットでネストされた<src>タグを使用して指定されます。ネストされたソースタグを使用すると、さまざまな場所に散在し、単一のルートレポートソースフォルダーにグループ化されていないレポートテンプレートをコンパイルできます。以下は改訂されたbuild.xmlです-
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "compilereportdesing" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewDesign" description = "Design viewer is
launched to preview the compiled report design.">
<java classname = "net.sf.jasperreports.view.JasperDesignViewer" fork = "true">
<arg value = "-F${file.name}.jasper" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the
JXML file and produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドプロンプトを開き、build.xmlが配置されているディレクトリに移動します。コマンドを実行しますant(compilereportdesingがデフォルトのターゲットです); 出力は次のとおりです-
C:\tools\jasperreports-5.0.1\test>ant
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See
http://logging.apache.org/log4j/1.2/faq.html#noconfig
for more info.
[jrc] File :
C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
BUILD SUCCESSFUL
Total time: 5 seconds
ファイルjasper_report_template.jasperは、ファイルシステム(この場合はC:\ tools \ jasperreports-5.0.1 \ testディレクトリ)に生成されます。このファイルは、net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile()を呼び出してプログラムで生成されたファイルと同じです。このジャスパーファイルをプレビューして、実行することができますant viewDesign。
レポートツールの主な目的は、高品質のドキュメントを作成することです。レポート入力プロセスは、データセットを操作することにより、レポートツールがこれを達成するのに役立ちます。
レポート入力プロセスに必要な主な入力は次のとおりです。
Report Template −これは実際のJasperReportファイルです。
Report Parameters−これらは基本的に名前付きの値であり、レポートの入力時にエンジンに渡されます。これらについては、レポートパラメータの章で説明します。
Data Source− SQLクエリ、XMLファイル、csvファイル、HQL(Hibernate Query Language)クエリ、Java Beansのコレクションなど、さまざまなデータソースからJasperファイルを入力できます。これについてはレポートで詳しく説明します。データソースの章。
このプロセスによって生成される出力は .jrprint 表示、印刷、または他の形式にエクスポートする準備ができているドキュメント。ファサードクラスnet.sf.jasperreports.engine.JasperFillManagerは通常、レポートテンプレートにデータを入力するために使用されます。このクラスには、レポートテンプレートを埋めるさまざまなfillReportXXX()メソッドがあります(テンプレートはディスク上に配置するか、入力ストリームから選択するか、メモリ内に直接提供することができます)。
このファサードクラスには、fillReportXXX()メソッドの2つのカテゴリがあります-
最初のタイプは、3番目のパラメーターとしてjava.sql.Connectionオブジェクトを受け取ります。ほとんどの場合、レポートはリレーショナルデータベースからのデータで埋められます。これは-によって達成されます
JDBCを介してデータベースに接続します。
レポートテンプレート内にSQLクエリを含めます。
JasperReportsエンジンは、渡された接続を使用してSQLクエリを実行します。
したがって、レポートに記入するためのレポートデータソースが作成されます。
2番目のタイプは、入力する必要のあるデータが他のフォームで利用できる場合に、net.sf.jasperreports.engine.JRDataSourceオブジェクトを受け取ります。
レポートテンプレートの入力
レポートテンプレートを書いてみましょう。JRXMLファイル(C:\ tools \ jasperreports-5.0.1 \ test \ jasper_report_template.jrxml)の内容は以下のとおりです。
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" language = "groovy" pageWidth = "595"
pageHeight = "842" columnWidth = "555" leftMargin = "20" rightMargin = "20"
topMargin = "20" bottomMargin = "20">
<queryString>
<![CDATA[]]>
</queryString>
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<columnHeader>
<band height = "23">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "3"
width = "535" height = "15" backcolor = "#70A9A9" />
<box>
<bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
</box>
<textElement />
<text><![CDATA[]]> </text>
</staticText>
<staticText>
<reportElement x = "414" y = "3" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Country]]></text>
</staticText>
<staticText>
<reportElement x = "0" y = "3" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Name]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height = "16">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "0"
width = "535" height = "14" backcolor = "#E5ECF9" />
<box>
<bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
</box>
<textElement />
<text><![CDATA[]]> </text>
</staticText>
<textField>
<reportElement x = "414" y = "0" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font size = "9" />
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{country}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "0" y = "0" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle" />
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
次に、Javaデータオブジェクト(Java Bean)のコレクションをJasperReport Engineに渡して、このコンパイル済みレポートに入力します。
データオブジェクト(Java Bean)を表すPOJODataBean.javaを記述します。このクラスは、2つのStringオブジェクト、つまり「name」と「country」を定義します。ディレクトリに保存しますC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint。
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
JavaBeanオブジェクトのコレクションを生成するビジネスロジックを持つクラスDataBeanList.javaを記述します。これはさらにJasperReportsエンジンに渡され、レポートが生成されます。ここでは、リストに4つのDataBeanオブジェクトを追加しています。ディレクトリに保存しますC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint。
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
メインクラスファイルを作成する JasperReportFill.java、クラス(DataBeanList)からJava Beanコレクションを取得し、それをJasperReportsエンジンに渡して、レポートテンプレートに入力します。ディレクトリに保存しますC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint。
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"c://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource = new
JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
レポートの生成
次に、通常のANTビルドプロセスを使用して、これらのファイルをコンパイルして実行します。build.xmlファイルは以下のとおりです-
インポートファイル--baseBuild.xmlは、Environment Setupの章から選択され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "executereport" basedir = ".">
<import file = "baseBuild.xml"/>
<target name = "executereport" depends = "compile,compilereportdesing,run">
<echo message = "Im here"/>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行します ant -Dmain-class = com.tutorialspoint.JasperReportFill ((executereport はデフォルトのターゲットです)次のように-
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class = com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
compile:
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:27:
warning: 'includeantruntime' was not set, defaulting to
build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 1 source file to
C:\tools\jasperreports-5.0.1\test\classes
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 8 seconds
上記の実行の結果、ファイルjasper_report_template.jrprintが.jasperファイルと同じディレクトリに生成されます(この場合、C:\ tools \ jasperreports-5.0.1 \ testに生成されます)。
レポート入力プロセスのJasperPrintオブジェクトの出力は、組み込みのビューアコンポーネントを使用して表示したり、印刷したり、PDF、HTML、RTF、XLS、ODT、CSV、XMLなどのより一般的なドキュメント形式にエクスポートしたりできます。Jasperドキュメントの表示と印刷についてはこの章で説明し、エクスポートについては次の章、つまり「レポートのエクスポート」で説明します。
レポートの表示
JasperReportは、生成されたレポートを元の形式で表示するための組み込みのビューアーを提供します。これはスイングベースのコンポーネントであり、他のJavaアプリケーションは、表示または印刷するためにドキュメントを他の形式にエクスポートすることなく、このコンポーネントを統合できます。net.sf.jasperreports.view.JRViewerのクラスは、この視覚的なコンポーネントを表します。このクラスは、サブクラス化することにより、アプリケーションのニーズに応じてカスタマイズすることもできます。
JasperReportsには、レポートを表示するためにビジュアルコンポーネントを使用するSwingアプリケーションもあります。このアプリケーションは、*。jrprintが生成されるのと同じ形式でレポートを表示するのに役立ちます。このSwingアプリケーションは、クラスnet.sf.jasperreports.view.JasperViewerに実装されています。このクラスを使用してレポートを表示するには、レポートをANTターゲットにラップする必要があります。
生成されたレポートの表示
次の例は、-JasperViewerクラスを使用してレポートを表示する方法-を示しています。
レポートテンプレートを書いてみましょう。JRXMLファイル(C:\ tools \ jasperreports-5.0.1 \ test \ jasper_report_template.jrxml)の内容は次のとおりです。
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" language = "groovy" pageWidth = "595"
pageHeight = "842" columnWidth = "555" leftMargin = "20" rightMargin = "20"
topMargin = "20" bottomMargin = "20">
<queryString>
<![CDATA[]]>
</queryString>
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<columnHeader>
<band height = "23">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "3"
width = "535" height = "15" backcolor = "#70A9A9" />
<box>
<bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
</box>
<textElement />
<text><![CDATA[]]> </text>
</staticText>
<staticText>
<reportElement x = "414" y = "3" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Country]]></text>
</staticText>
<staticText>
<reportElement x = "0" y = "3" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Name]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height = "16">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "0"
width = "535" height = "14" backcolor = "#E5ECF9" />
<box>
<bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
</box>
<textElement />
<text><![CDATA[]]> </text>
</staticText>
<textField>
<reportElement x = "414" y = "0" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font size = "9" />
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{country}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "0" y = "0" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle" />
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
次に、Javaデータオブジェクト(Java Bean)のコレクションをJasperReports Engineに渡して、このコンパイル済みレポートに入力します。
データオブジェクト(Java Bean)を表すPOJODataBean.javaを記述します。このクラスは、「name」と「country」という2つのStringオブジェクトを定義します。ディレクトリに保存しますC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint。
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
JavaBeanオブジェクトのコレクションを生成するビジネスロジックを持つクラスDataBeanList.javaを記述します。これはさらにJasperReportsエンジンに渡され、レポートが生成されます。ここでは、リストに4つのDataBeanオブジェクトを追加しています。ディレクトリに保存しますC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint。
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
メインクラスファイルを作成する JasperReportFill.java、クラス(DataBeanList)からJava Beanコレクションを取得し、それをJasperReportsエンジンに渡して、レポートテンプレートに入力します。ディレクトリに保存しますC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint。
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"c://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource = new
JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
ターゲットを書いてみましょう viewFillReportbuild.xmlファイルに。build.xmlファイルは次のとおりです-
インポートファイル--baseBuild.xmlは、Environment Setupの章から選択され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml"/>
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer
to preview the report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc"
classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行します ant -Dmain-class=com.tutorialspoint.JasperReportFill(viewFillReportがデフォルトのターゲットです)。その結果、以下の画面に示すようなJasperViewerウィンドウが表示されます。
レポートの印刷
net.sf.jasperreports.engine.JasperPrintManagerクラスを使用して、JasperReportsライブラリによって生成されたドキュメントを(独自の形式、つまりJasperPrintオブジェクトで)印刷できます。これは、Java 2 PrintingAPIに依存するファサードクラスです。JasperReportドキュメントがHTMLやPDFなどの他の形式にエクスポートされたら、ドキュメントを印刷することもできます。
生成されたレポートの印刷
次のコードは、レポートの印刷を示しています。既存のクラスJasperReportFillを更新しましょう。JasperPrintManager.printReport()メソッドを使用します。このメソッドは、最初のパラメーターとしてソースファイル名(ここでは、前のステップでメソッドJasperFillManager.fillReportToFile()を使用して生成した.jrprintファイルを渡します)を取ります。2番目のパラメーターは、標準の印刷ダイアログを表示するためのブール値です(true ここに)。
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName = "c://tools/jasperreports-5.0.1/" +
"test/jasper_report_template.jasper";
String printFileName = null;
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource = new
JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
try {
printFileName = JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
if(printFileName != null){
JasperPrintManager.printReport( printFileName, true);
}
} catch (JRException e) {
e.printStackTrace();
}
}
}
それでは、このファイルをディレクトリに保存しましょう C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint。ANTを使用してこのファイルをコンパイルして実行します。build.xmlの内容は以下のとおりです-
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "executereport" basedir = ".">
<import file = "baseBuild.xml"/>
<target name = "executereport" depends = "compile,compilereportdesing,run">
<echo message = "Im here"/>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc"
classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドプロンプトを開き、build.xmlが配置されているディレクトリに移動します。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperReportPrint。その結果、印刷ダイアログボックスが表示されます。[OK]をクリックしてドキュメントを印刷します。
前の章で、JasperReportで生成されたドキュメントを印刷および表示する方法を見てきました。ここでは、これらのレポートをPDF、HTML、XLSなどの他の形式に変換またはエクスポートする方法を説明します。この機能を実現するために、ファサードクラスnet.sf.jasperreports.engine.JasperExportManagerが提供されています。エクスポートとは、JasperPrintオブジェクト(.jrprintファイル)を別の形式に変換することを意味します。
次のコード(JasperReportExport.java)は、JasperReportドキュメントのエクスポートプロセスを示しています。JasperExportManagerは、レポートをPDF、HTML、およびXMLのみにエクスポートするメソッドを提供します。XLS形式にエクスポートするために、クラスnet.sf.jasperreports.engine.export.JRXlsExporterを使用しました。このコードは次の3つのファイルを生成します-
- sample_report.pdf
- sample_report.html
- sample_report.xls
他の形式へのエクスポート
レポートテンプレートを書いてみましょう。JRXMLファイル(C:\ tools \ jasperreports-5.0.1 \ test \ jasper_report_template.jrxml)の内容は以下のとおりです。
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" language = "groovy" pageWidth = "595"
pageHeight = "842" columnWidth = "555" leftMargin = "20" rightMargin = "20"
topMargin = "20" bottomMargin = "20">
<queryString>
<![CDATA[]]>
</queryString>
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<columnHeader>
<band height = "23">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "3"
width = "535" height = "15" backcolor = "#70A9A9" />
<box>
<bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
</box>
<textElement />
<text><![CDATA[]]> </text>
</staticText>
<staticText>
<reportElement x = "414" y = "3" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Country]]></text>
</staticText>
<staticText>
<reportElement x = "0" y = "3" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Name]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height = "16">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "0"
width = "535" height = "14" backcolor = "#E5ECF9" />
<box>
<bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
</box>
<textElement />
<text><![CDATA[]]> </text>
</staticText>
<textField>
<reportElement x = "414" y = "0" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font size = "9" />
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{country}]]> </textFieldExpression> </textField> <textField> <reportElement x = "0" y = "0" width = "136" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle" /> <textFieldExpression class = "java.lang.String"> <![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
次に、POJOファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java 以下のとおりです-
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
ファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
メインクラスファイルを作成する JasperReportFill.java、クラス(DataBeanList)からJava Beanコレクションを取得し、それをJasperReportsエンジンに渡して、レポートテンプレートに入力します。ディレクトリに保存しますC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint。
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRXlsExporter;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName = "c://tools/jasperreports-5.0.1/"
+ "test/jasper_report_template.jasper";
String printFileName = null;
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource =
new JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
try {
printFileName = JasperFillManager.fillReportToFile(sourceFileName,
parameters, beanColDataSource);
if (printFileName != null) {
/**
* 1- export to PDF
*/
JasperExportManager.exportReportToPdfFile(printFileName,
"C://sample_report.pdf");
/**
* 2- export to HTML
*/
JasperExportManager.exportReportToHtmlFile(printFileName,
"C://sample_report.html");
/**
* 3- export to Excel sheet
*/
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRExporterParameter.INPUT_FILE_NAME,
printFileName);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
"C://sample_report.xls");
exporter.exportReport();
}
} catch (JRException e) {
e.printStackTrace();
}
}
}
ここでは、jasper印刷ファイルをpdf、html、およびxls形式にエクスポートするロジックを含めました。
レポートの生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行しましょう。build.xmlファイルは以下のとおりです-
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "executereport" basedir = ".">
<import file = "baseBuild.xml"/>
<target name = "executereport" depends = "compile,compilereportdesing,run">
<echo message = "Im here"/>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc"
classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
コマンドプロンプトに移動し、build.xmlが配置されているディレクトリC:\ tools \ jasperreports-5.0.1 \ testに移動します。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperReportFill。出力は次のとおりです-
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defaulting t
[javac] Compiling 4 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
executereport:
[echo] Im here
BUILD SUCCESSFUL
Total time: 32 seconds
上記の実行の結果、C:\ディレクトリに生成された3つのファイルsample_report.pdf、sample_report.html、sample_report.xlsが見つかります。
レポートに記入するための主な入力は、-レポートテンプレート、パラメーター、およびデータソースです。この章ではパラメータについて説明し、次の章ではデータソースについて説明します。
パラメータはオブジェクト参照であり、レポート入力操作中にレポートエンジンに渡されます。データソースを通過できないデータは、パラメータを使用して渡すことができます。著者名、レポートのタイトルなどのデータは、パラメーターを介して渡すことができます。JasperReportsテンプレートまたはJRXMLテンプレートには、0個以上のパラメーター要素を含めることができます。
パラメータ宣言
次のようなパラメータ宣言-
<parameter name = "exampleParameter" class = "java.lang.String" />
名前属性
<parameter>要素のname属性は必須です。レポート式のパラメーターを名前で参照します。パラメータ名は1語である必要があります。ドットやカンマなどの特殊文字を含めることはできません。
クラス属性
クラス属性も必須であり、それは、パラメータ値のクラス名を指定します。デフォルト値はjava.lang.Stringです。これは、実行時に使用可能な任意のクラスに変更できます。レポートパラメータのタイプに関係なく、エンジンは$ P {}トークンが使用されるレポート式でのキャストを処理するため、手動でキャストする必要はありません。
レポートのパラメータ値は、常にパラメータ名をキーとするjava.util.Mapオブジェクトにパックされます。データベースから取得したデータセットをさらにカスタマイズするために、レポートパラメータをレポートのクエリ文字列で使用できます。これらは、レポートのデータを提供するクエリの動的フィルターのように機能します。
組み込みパラメータ
以下は、式ですぐに使用できる事前定義されたレポートパラメータです-
S.NO | パラメータ名と説明 |
---|---|
1 | REPORT_PARAMETERS_MAP すべてのユーザー定義および組み込みパラメーターを含むマップが含まれています。 |
2 | REPORT_CONNECTION これは、JDBCデータソースに使用されるユーザー指定のクラスjava.sql.Connectionを指します。 |
3 | REPORT_DATA_SOURCE これは、組み込みデータソースタイプの1つまたはユーザー定義タイプのいずれかを表すJRDataSourceのユーザー提供インスタンスです。 |
4 | REPORT_MAX_COUNT これはjava.lang.Integer値であり、ユーザーがデータソースからのレコードを制限できるようにします。 |
5 | REPORT_SCRIPTLET これはnet.sf.jasperreports.engine.JRAbstractScriptletを指し、ユーザーが提供したレポートスクリプトレットのインスタンスが含まれています。 |
6 | REPORT_LOCALE これはjava.util.Localeインスタンスであり、リソースバンドルの目的のロケールが含まれています。 |
7 | REPORT_RESOURCE_BUNDLE これはjava.util.ResourceBundleオブジェクトを指し、ローカライズされたメッセージが含まれています。 |
8 | REPORT_TIME_ZONE これはjava.util.TimeZoneインスタンスであり、日付のフォーマットに使用されます。 |
9 | REPORT_VIRTUALIZER これはnet.sf.jasperreports.engine.JRVirtualizerオブジェクトのインスタンスであり、ページの仮想化(メモリ消費の最適化)に使用されます。 |
10 | REPORT_CLASS_LOADER これは、画像、フォント、サブレポートテンプレートなどのリソースをロードするためにレポート入力プロセス中に使用されるjava.lang.ClassLoaderインスタンスです。 |
11 | IS_IGNORE_PAGINATION java.lang.Boolean.TRUEに設定すると、レポートは1つの長いページで生成され、改ページは発生しません。 |
例
ReportTitleとAuthorをレポートに渡します(JasperReportFill.javaによって生成されます)。改訂ファイルC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java 次のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource =
new JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
/**
* Passing ReportTitle and Author as parameters
*/
parameters.put("ReportTitle", "List of Contacts");
parameters.put("Author", "Prepared By Manisha");
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
POJOファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java 以下のとおりです-
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
ファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
パラメータを追加しましょう<ReportTitle>および<Author>既存のレポートテンプレート(チャプターレポートデザイン)に。レポートのタイトルと作成者は、レポートの先頭に表示されます。改訂されたレポートテンプレート(jasper_report_template.jrxml)は次のとおりです。C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します-
<?xml version = "1.0"?>
<!DOCTYPE jasperReport PUBLIC
"//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" pageWidth = "595"
pageHeight = "842" columnWidth = "515"
leftMargin = "40" rightMargin = "40" topMargin = "50" bottomMargin = "50">
<parameter name = "ReportTitle" class = "java.lang.String"/>
<parameter name = "Author" class = "java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<title>
<band height = "70">
<line>
<reportElement x = "0" y = "0" width = "515" height = "1"/>
</line>
<textField isBlankWhenNull = "true" bookmarkLevel = "1">
<reportElement x = "0" y = "10" width = "515" height = "30"/>
<textElement textAlignment = "Center">
<font size = "22"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{ReportTitle}]]>
</textFieldExpression>
<anchorNameExpression>
<![CDATA["Title"]]>
</anchorNameExpression>
</textField>
<textField isBlankWhenNull = "true">
<reportElement x = "0" y = "40" width = "515" height = "20"/>
<textElement textAlignment = "Center">
<font size = "10"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{Author}]]> </textFieldExpression> </textField> </band> </title> <columnHeader> <band height = "23"> <staticText> <reportElement mode = "Opaque" x = "0" y = "3" width = "535" height = "15" backcolor = "#70A9A9" /> <box> <bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" /> </box> <textElement /> <text> <![CDATA[]]> </text> </staticText> <staticText> <reportElement x = "414" y = "3" width = "121" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font isBold = "true" /> </textElement> <text><![CDATA[Country]]></text> </staticText> <staticText> <reportElement x = "0" y = "3" width = "136" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font isBold = "true" /> </textElement> <text><![CDATA[Name]]></text> </staticText> </band> </columnHeader> <detail> <band height = "16"> <staticText> <reportElement mode = "Opaque" x = "0" y = "0" width = "535" height = "14" backcolor = "#E5ECF9" /> <box> <bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" /> </box> <textElement /> <text> <![CDATA[]]> </text> </staticText> <textField> <reportElement x = "414" y = "0" width = "121" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font size = "9" /> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$F{country}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "0" y = "0" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle" />
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
レポートの生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行します。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から選択され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview
the report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReportがデフォルトのターゲットです)次のように-
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28: warning:
'includeantruntime' was not set, defaulting to build.sysclasspath=last;
set to false for repeatable builds
[javac] Compiling 7 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig
for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 18 seconds
上記のコンパイルの結果、次の画面に示すようにJasperViewerウィンドウが開きます-
ここでは、レポートの先頭にReportTitleの「連絡先リスト」と作成者「PreparedByManisha」が表示されていることがわかります。
データソースは構造化されたデータコンテナです。レポートの生成中に、JasperReportsエンジンはデータソースからデータを取得します。データは、データベース、XMLファイル、オブジェクトの配列、およびオブジェクトのコレクションから取得できます。「レポートの入力」の章で説明したように、fillReportXXX()メソッドは、入力する必要のあるレポートのデータソースを次の形式で受信することを想定しています。net.sf.jasperreports.engine.JRDataSource オブジェクトまたは java.sql.Connection (レポートデータがリレーショナルデータベースで見つかった場合)。
JRDataSourceインターフェースには、実装する必要のある2つのメソッドしかありません。
public boolean next()はJRExceptionをスローします。
レポートの入力時に、このメソッドは、データを反復処理するときに、レポートエンジンによってデータソースオブジェクトで呼び出されます。
public Object getFieldValue(JRField jrField)はJRExceptionをスローします。
このメソッドは、現在のデータソースレコードの各レポートフィールドの値を提供します。
データソースからデータを取得する唯一の方法は、レポートフィールドを使用することです。JRDataSourceインターフェースには、データソースのレコードを取得する方法に応じて、いくつかのデフォルトの実装があります。
データソースの実装
以下の表は、データソースとその実装クラスをまとめたものです。
情報元 | 実装クラス |
---|---|
JDBC | net.sf.jasperreports.engine.JRResultSetDataSource |
JavaBean | net.sf.jasperreports.engine.data.JRBeanCollectionDataSource、net.sf.jasperreports.engine.data.JRBeanArrayDataSource |
マップベース | net.sf.jasperreports.engine.data.JRMapArrayDataSource、net.sf.jasperreports.engine.data.JRMapCollectionDataSource |
TableModel | net.sf.jasperreports.engine.data.JRTableModelDataSource |
XML | net.sf.jasperreports.engine.data.JRXmlDataSource |
CSV | net.sf.jasperreports.engine.data.JRCsvDataSource |
XLS | net.sf.jasperreports.engine.data.JRXlsDataSource |
空の | net.sf.jasperreports.engine.JREmptyDataSource |
JDBCデータソース
クラス JRResultSetDataSourcejava.sql.ResultSetオブジェクトをクラップスします。これは、レポートデータがリレーショナルデータベースから抽出されるときに最も一般的に使用されるデータソースの実装です。場合のjava.sql.Connectionを代わりエンジンに渡され、それは最初の関連クエリを実行し、返された記憶のjava.sql.ResultSetのJRResultSetDataSourceインスタンスにおけるオブジェクト。
JavaBeanデータソース
クラス JRBeanArrayDataSource そして JRBeanCollectionDataSourceJavaBeanオブジェクトの配列とコレクションをラップできる実装を表します。配列またはコレクション内の各オブジェクトは、このタイプのデータソースの1つのレコードとして表示されます。特定のJavaBeanプロパティと対応するレポートフィールド間のマッピングは、命名規則によって行われます。レポートフィールドの名前は、JavaBeans仕様で指定されているJavaBeanプロパティの名前と同じである必要があります。
このチュートリアルのすべての例では、JRBeanCollectionDataSourceを使用しました。
マップベースのデータソース
実装クラス JRMapArrayDataSource そして JRMapCollectionDataSource親アプリケーションが、メモリ内で利用可能なレポートデータをjava.util.Mapオブジェクトとしてすでに保存している場合に役立ちます。ラップされた配列またはコレクション内の各Mapオブジェクトは、データソース内の仮想レコードと見なされ、各レポートフィールドの値は、キーとして指定されたレポートフィールドを使用してマップから抽出されます。
TableModelデータソース
多くのクライアント側アプリケーションでは、データは表形式で表示されます。多くのアプリケーションに共通する要件は、ユーザーがこの表形式をレポートとして印刷できるようにすることです。実装クラスJRTableModelDataSourceSwingアプリケーションでは、表形式からレポートを生成するタスクが簡単になります。このクラスは、javax.swing.table.TableModelオブジェクトをラップします。ラップされたTableModelオブジェクトの列には、名前または0から始まるインデックスのいずれかでアクセスできます。
XMLデータソース
クラス JRXmlDataSourceはDOMに基づくデータソースの実装であり、XPath式を使用してXMLドキュメントからデータを選択します。XMLデータソースのレコードは、XPath式で選択されたノード要素で表されます。フィールド値は、フィールド記述(JRXMLの<fieldDescription>要素)によって提供されるXPath式を使用して各レコードから取得されます。
XPathは、XMLドキュメントの属性と要素をナビゲートするために使用される言語です。XPathの詳細については、次のURLを参照してください。http://www.w3.org/TR/xpath.
CSVデータソース
JRCsvDataSource構造化テキストファイルからデータを取得するデータソースの実装を表します。通常はCSVです。フィールド値は、列インデックスを使用して取得されます。
XLSデータソース
JRXlsDataSourceExcelドキュメントからデータを取得するデータソースの実装を表します。このデータソース実装のレポートフィールドマッピングも、フィールド列インデックスに基づいています。
空のデータソース
クラス JREmptyDataSourceは、指定された数の仮想空レコードを内部に持つデータソースをシミュレートします。これは、基本的なレポートプレビュー機能を提供するため、または特別なレポートテンプレートで、またはテストとデバッグの目的でUIツールによって使用されます。
巻き戻し可能なデータソース
ザ・ net.sf.jasperreports.engine.JRRewindableDataSource基本的なJRDataSourceインターフェースを拡張します。これは、moveFirst()と呼ばれる1つのメソッドのみをインターフェースに追加します。このメソッドは、カーソルをデータソースの最初の要素に移動することを目的としています。
巻き戻し可能なデータソースは、isSplitAllowed = "false"設定のために分割が許可されていないバンド内に配置されたサブレポートを操作し、現在のページにサブレポートをレンダリングするための十分なスペースがない場合に役立ちます。
上記のすべてのデータソースの実装は、 JRResultSetDataSource、レコードポインタを戻すことはサポートされていないため。これは、このデータソースを手動で使用してjava.sql.ResultSetをラップしてから、サブレポートに渡す場合にのみ問題を引き起こします。SQLクエリがサブレポートテンプレートにある場合は、次のページでサブレポートを再起動するとエンジンが再度実行するため、問題はありません。
データソースプロバイダー
JasperReportsライブラリにはインターフェイスがあります net.sf.jasperreports.engine.JRDataSourceProvider。これは、データソースオブジェクトの作成と破棄に役立ちます。GUIツールを使用してレポートテンプレートを作成する場合、レポートのデータソースをカスタマイズするための特別なツールが必要です。JRDataSourceProviderは、カスタムデータソースをデザインツールにプラグインする標準的な方法です。このインターフェイスのカスタム実装では、データソースオブジェクトの作成と破棄を可能にする次のメソッドと、可能であればデータソース内の使用可能なレポートフィールドを一覧表示するメソッドを実装する必要があります。
public boolean supportsGetFieldsOperation();
public JRField[] getFields(JasperReport report)
throws JRException, UnsupportedOperationException;
public JRDataSource create(JasperReport report) throws JRException;
public void dispose(JRDataSource dataSource) throws JRException;
レポートフィールドは要素であり、データソースとレポートテンプレート間のデータのマッピングを表します。レポート式でフィールドを組み合わせて、目的の出力を取得できます。レポートテンプレートには、0個以上の<field>要素を含めることができます。レポートフィールドを宣言するとき、データソースはレポートテンプレートで定義されたすべてのフィールドに対応するデータを提供する必要があります。
フィールド宣言
フィールド宣言は以下のように行われます-
<field name = "FieldName" class = "java.lang.String"/>
名前属性
<field>要素のname属性は必須です。レポート式のフィールドを名前で参照します。
クラス属性
クラス属性は、フィールド値のクラス名を指定します。デフォルト値はjava.lang.Stringです。これは、実行時に使用可能な任意のクラスに変更できます。レポートフィールドのタイプに関係なく、エンジンは$ F {}トークンが使用されるレポート式でのキャストを処理するため、手動でのキャストは不要です。
フィールドの説明
<fieldDesciption>要素はオプションの要素です。これは、カスタムデータソースを実装するときに非常に役立ちます。たとえば、キーや情報を保存して、実行時にカスタムデータソースからフィールドの値を取得できます。フィールド名の代わりに<fieldDesciption>要素を使用すると、データソースからフィールド値を取得するときに、フィールドの命名規則の制限を簡単に克服できます。
以下は、既存のJRXMLファイル(Chapter Report Designs)のコードです。ここでは、の使用法を見ることができますname、 class、および fieldDescription 要素。
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
フィールドの並べ替え
データの並べ替えが必要で、データソースの実装がそれをサポートしていない場合(CSVデータソースなど)、JasperReportsはメモリ内のフィールドベースのデータソースの並べ替えをサポートします。並べ替えは、レポートテンプレートの1つ以上の<sortField>要素を使用して実行できます。
少なくとも1つのソートフィールドが指定されている場合、レポートの入力プロセス中に、データソースがJRSortableDataSourceインスタンスに渡されます。これにより、データソースからすべてのレコードがフェッチされ、指定されたフィールドに従ってメモリソートが実行され、元のデータソースが置き換えられます。
ソートフィールド名は、レポートフィールド名と同じである必要があります。ソートに使用されるフィールドには、java.util.Comparableを実装するタイプが必要です。java.lang.Stringタイプのフィールドを除くすべてのフィールドに対して自然な順序の並べ替えが実行されます(Stringタイプの場合、レポートの塗りつぶしロケールに対応するコレーターが使用されます)。複数の並べ替えフィールドが指定されている場合、並べ替えは、レポートテンプレートに表示される順序で並べ替えキーとしてフィールドを使用して実行されます。次の例は、並べ替え機能を示しています。
ソートされたレポートの例
<を追加しましょうsortField>既存のレポートテンプレートの要素(チャプターレポートのデザイン)。フィールドの国を降順で並べ替えましょう。改訂されたレポートテンプレート(jasper_report_template.jrxml)は次のとおりです。C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します-
<?xml version = "1.0"?>
<!DOCTYPE jasperReport PUBLIC
"//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi =
"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation =
"http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" pageWidth = "595" pageHeight = "842"
columnWidth = "515" leftMargin = "40" rightMargin = "40"
topMargin = "50" bottomMargin = "50">
<parameter name = "ReportTitle" class = "java.lang.String"/>
<parameter name = "Author" class = "java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<sortField name = "country" order = "Descending"/>
<sortField name = "name"/>
<title>
<band height = "70">
<line>
<reportElement x = "0" y = "0" width = "515" height = "1"/>
</line>
<textField isBlankWhenNull = "true" bookmarkLevel = "1">
<reportElement x = "0" y = "10" width = "515" height = "30"/>
<textElement textAlignment = "Center">
<font size = "22"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{ReportTitle}]]>
</textFieldExpression>
<anchorNameExpression>
<![CDATA["Title"]]>
</anchorNameExpression>
</textField>
<textField isBlankWhenNull = "true">
<reportElement x = "0" y = "40" width = "515" height = "20"/>
<textElement textAlignment = "Center">
<font size = "10"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{Author}]]> </textFieldExpression> </textField> </band> </title> <columnHeader> <band height = "23"> <staticText> <reportElement mode = "Opaque" x = "0" y = "3" width = "535" height = "15" backcolor = "#70A9A9" /> <box> <bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" /> </box> <textElement /> <text> <![CDATA[]]> </text> </staticText> <staticText> <reportElement x = "414" y = "3" width = "121" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font isBold = "true" /> </textElement> <text><![CDATA[Country]]></text> </staticText> <staticText> <reportElement x = "0" y = "3" width = "136" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font isBold = "true" /> </textElement> <text><![CDATA[Name]]></text> </staticText> </band> </columnHeader> <detail> <band height = "16"> <staticText> <reportElement mode = "Opaque" x = "0" y = "0" width = "535" height = "14" backcolor = "#E5ECF9" /> <box> <bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" /> </box> <textElement /> <text> <![CDATA[]]> </text> </staticText> <textField> <reportElement x = "414" y = "0" width = "121" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font size = "9" /> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$F{country}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "0" y = "0" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle" />
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
レポート入力のJavaコードは変更されていません。ファイルの内容C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource =
new JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
/**
* Passing ReportTitle and Author as parameters
*/
parameters.put("ReportTitle", "List of Contacts");
parameters.put("Author", "Prepared By Manisha");
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
POJOファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java 以下のとおりです-
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
ファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
レポートの生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行します。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から選択され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview
the report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReportがデフォルトのターゲットです)次のように-
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28: warning:
'includeantruntime' was not set, defaulting to build.sysclasspath=last;
set to false for repeatable builds
[javac] Compiling 7 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig
for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 18 seconds
上記のコンパイルの結果、以下の画面に示すようにJasperViewerウィンドウが開きます-
ここでは、国名がアルファベット順に降順で配置されていることがわかります。
レポート式はJasperReportsの強力な機能であり、計算されたデータをレポートに表示できます。計算データは、静的データではなく、レポートパラメータまたはデータソースフィールドとして具体的に渡されないデータです。レポート式は、レポートパラメータ、フィールド、および静的データを組み合わせて作成されます。デフォルトでは、Java言語がレポート式の記述に使用されます。Groovyスクリプト言語、JavaScript、BeanShellスクリプトなど、レポート式の他のスクリプト言語は、JasperReportsコンパイラーによってサポートされています。
この章では、レポート式がJava言語のみを使用して記述されていると仮定して、どのように機能するかについて説明します。JRXMLレポートテンプレートには、式を-として定義する要素がいくつかあります。
- <variableExpression>
- <initialValueExpression>
- <groupExpression>
- <printWhenExpression>
- <imageExpression>
- <textFieldExpression>
式の宣言
基本的に、すべてのレポート式はJava式であり、レポートフィールド、レポート変数、およびレポートパラメータを参照できます。
式のフィールド参照
式でレポートフィールド参照を使用するには、フィールドの名前を間に入れる必要があります $F{そして} 以下に示す文字シーケンス-
<textfieldexpression>
$F{Name}
</textfieldexpression>
当社の既存のJRXMLファイルからのコードの一部を以下に示します(章レポートデザイン) -
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{country}]]>
</textFieldExpression>
式の変数参照
式で変数を参照するには、変数の名前を間に置く必要があります $V{そして} 以下の例に示すように-
<textfieldexpression>
"Total height : " + $V{SumOfHeight} + " ft."
</textfieldexpression>
式のパラメータリファレンス
式内のパラメーターを参照するには、パラメーターの名前を間に入れる必要があります $P{そして} 以下の例に示すように-
<textfieldexpression>
"ReportTitle : " + $P{Title}
</textfieldexpression>
以下は、既存のJRXMLファイルのコードの一部であり、式内のパラメーターの参照を示しています。(レポートデザインの章のJRXML )−
<textField isBlankWhenNull = "true" bookmarkLevel = "1">
<reportElement x = "0" y = "10" width = "515" height = "30"/>
<textElement textAlignment = "Center">
<font size = "22"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{ReportTitle}]]>
</textFieldExpression>
<anchorNameExpression>
<![CDATA["Title"]]>
</anchorNameExpression>
</textField>
<textField isBlankWhenNull = "true">
<reportElement x = "0" y = "40" width = "515" height = "20"/>
<textElement textAlignment = "Center">
<font size = "10"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{Author}]]>
</textFieldExpression>
</textField>
上で見たように、パラメータ、フィールド、および変数の参照は、実際には実際のJavaオブジェクトです。レポートテンプレートで作成されたパラメーター、フィールド、または変数宣言からクラスがわかっているので、式内のそれらのオブジェクト参照のメソッドを呼び出すこともできます。
次の例は、-java.lang.Stringレポートフィールド "Name"から最初の文字を抽出して表示する方法を示しています。
<textFieldExpression>
$F{Name}.substring(0, 1)
</textFieldExpression>
式のリソースバンドルリファレンス
式内のリソースを参照するには、キーを間に置く必要があります$R{そして} 以下の例に示すように-
<textfieldexpression>
$R{report.title}
</textfieldexpression>
ランタイム提供のロケールとreport.titleキーに基づいて、レポートテンプレートに関連付けられたリソースバンドルがロードされます。したがって、レポートのタイトルは、リソースバンドルから文字列値を抽出することによって表示されます。国際化の詳細は、章の中に見つけることができる国際化。
電卓
Calculatorは、JasperReportsのエンティティであり、式を評価し、レポートの入力時に変数またはデータセットをインクリメントします。コンパイルプロセス中に、情報はコンパイラによって生成され、コンパイルレポートに格納されます。この情報は、レポートの入力時に、net.sf.jasperreports.engine.fill.JRCalculatorクラスのインスタンスを構築するために使用されます。
Javaソースファイルは、Javaベースのレポートコンパイラによってオンザフライで生成およびコンパイルされます。この生成されたクラスはJRCalculatorのサブクラスであり、コンパイルによって生成されたバイトコードはJasperReportオブジェクト内に格納されます。このバイトコードはレポートの入力時に読み込まれ、結果のクラスがインスタンス化されて、式の評価に必要な計算機オブジェクトが取得されます。
条件式
JasperReportsは、変数式を定義するときにif-elseステートメントをサポートしていません。代わりに、三項演算子を使用できます{cond} ? {statement 1} : {statement 2}。この演算子は、Java式内にネストして、複数の条件に基づいて目的の出力を取得できます。
レポートの条件式の例
既存のレポートテンプレート(チャプターレポートのデザイン)を変更して、フィールドの国の条件式を追加しましょう。改訂されたレポートテンプレート(jasper_report_template.jrxml)は次のとおりです。C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します-
<?xml version = "1.0"?>
<!DOCTYPE jasperReport PUBLIC
"//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation =
"http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" pageWidth = "595" pageHeight = "842"
columnWidth = "515" leftMargin = "40" rightMargin = "40"
topMargin = "50" bottomMargin = "50">
<parameter name = "ReportTitle" class = "java.lang.String"/>
<parameter name = "Author" class = "java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<sortField name = "country" order = "Descending"/>
<sortField name = "name"/>
<title>
<band height = "70">
<line>
<reportElement x = "0" y = "0" width = "515" height = "1"/>
</line>
<textField isBlankWhenNull = "true" bookmarkLevel = "1">
<reportElement x = "0" y = "10" width = "515" height = "30"/>
<textElement textAlignment = "Center">
<font size = "22"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{ReportTitle}]]> </textFieldExpression> <anchorNameExpression> <![CDATA["Title"]]> </anchorNameExpression> </textField> <textField isBlankWhenNull = "true"> <reportElement x = "0" y = "40" width = "515" height = "20"/> <textElement textAlignment = "Center"> <font size = "10"/> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$P{Author}]]>
</textFieldExpression>
</textField>
</band>
</title>
<columnHeader>
<band height = "23">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "3" width = "535" height = "15"
backcolor = "#70A9A9" />
<box>
<bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
</box>
<textElement />
<text>
<![CDATA[]]>
</text>
</staticText>
<staticText>
<reportElement x = "414" y = "3" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Country]]></text>
</staticText>
<staticText>
<reportElement x = "0" y = "3" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Name]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height = "16">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "0" width = "535" height = "14"
backcolor = "#E5ECF9" />
<box>
<bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
</box>
<textElement />
<text>
<![CDATA[]]>
</text>
</staticText>
<textField>
<reportElement x = "414" y = "0" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font size = "9" />
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{country}.isEmpty() ? "NO COUNTRY" : $F{country}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "0" y = "0" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle" />
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
レポート入力のJavaコードは次のとおりです。ファイルの内容C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java のように-
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource =
new JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
/**
* Passing ReportTitle and Author as parameters
*/
parameters.put("ReportTitle", "List of Contacts");
parameters.put("Author", "Prepared By Manisha");
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
POJOファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java のように-
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
JavaBeanリストでcountryフィールドが空である新しいレコードを追加します。ファイルの内容C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java のように-
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California")); dataBeanList.add(produce("Tanmay", ""));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
レポートの生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行します。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容を以下に示します。
インポートファイル--baseBuild.xmlは、環境設定の章から選択され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview
the report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class = com.tutorialspoint.JasperReportFill (viewFullReportがデフォルトのターゲットです)as −
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last;
set to false for repeatable builds
[javac] Compiling 3 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See
http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 5 minutes 5 seconds
C:\tools\jasperreports-5.0.1\test>
上記のコンパイルの結果、以下の画面に示すようにJasperViewerウィンドウが開きます-
ここでは、最後のレコードについて、フィールド国のデータが渡されておらず、「NOCOUNTRY」が印刷されていることがわかります。
レポート変数は、レポート式の上に構築された特別なオブジェクトです。
レポート変数は、次のタスクを簡素化します-
レポートテンプレート全体で頻繁に使用されるレポート式。これらの式は、レポート変数を使用して1回だけ宣言できます。
レポート変数は、カウント、合計、平均、最低、最高、分散などの対応する式の値に基づいてさまざまな計算を実行できます。
変数がレポートデザインで定義されている場合、これらは式の新しい変数によって参照できます。したがって、レポートデザインで変数が宣言される順序は重要です。
変数宣言
変数宣言は次のとおりです-
<variable name = "CityNumber" class = "java.lang.Integer" incrementType = "Group"
incrementGroup = "CityGroup" calculation = "Count">
<variableExpression>
<![CDATA[Boolean.TRUE]]>
</variableExpression>
</variable>
上記のように、<variable>要素にはいくつかの属性が含まれています。これらの属性を以下に要約します-
名前属性
同様にパラメータやフィールド、名前</ variable>要素の属性は必須です。これにより、レポート式で宣言された名前で変数を参照できます。
クラス属性
クラス属性は、変数値のクラス名を指定することも必須です。デフォルト値はjava.lang.Stringです。これは、レポートのコンパイル時とレポートの入力時の両方で、クラスパスで使用可能な任意のクラスに変更できます。エンジンは、$ V {}トークンが使用されるレポート式の型キャストを処理するため、手動で型キャストする必要はありません。
計算
この属性は、レポートに入力するときに変数に対して実行する計算を決定します。次のサブセクションでは、<variable>要素の計算属性に使用できるすべての値について説明します。
平均-変数値は、変数式のnull以外のすべての値の平均です。数値変数にのみ有効です。
カウント-変数値は、変数式のnull以外のインスタンスのカウントです。
First-変数値は、変数式の最初のインスタンスの値です。後続の値は無視されます。
最高-変数値は、変数式の最高値です。
最小-変数値は、レポート内の変数式の最小値です。
なし-変数に対して計算は実行されません。
StandardDeviation-変数値は、レポート式に一致するすべてのnull以外の値の標準偏差です。数値変数にのみ有効です。
Sum-変数値は、レポート式によって返されるすべてのnull以外の値の合計です。
システム-変数値はカスタム計算です(JasperReportsのスクリプトレット機能を使用して、その変数の値を自分で計算します)。
分散-変数値は、レポート変数の式の評価によって返されるすべてのnull以外の値の分散です。
インクリメンターFactoryClass
この属性は、レポートの現在のレコードに入力するときに変数の値を計算するために使用されるクラスを決定します。デフォルト値は、実装する任意のクラスになりますnet.sf.jasperreports.engine.fill.JRIncrementerFactory。ファクトリクラスは、変数に設定された計算属性に応じて、実行時にインクリメントオブジェクトをインスタンス化するためにエンジンによって使用されます。
IncrementType
これにより、変数の値をいつ再計算するかが決まります。この属性は、以下のような値を使用します-
列-変数値は、各列の最後で再計算されます。
グループ-incrementGroupで指定されたグループが変更されると、変数値が再計算されます。
なし-変数値はすべてのレコードで再計算されます。
ページ-変数値は、すべてのページの終わりに再計算されます。
レポート-変数値は、レポートの最後に1回再計算されます。
IncrementGroup
これにより、incrementTypeがGroupの場合に、変数値が再計算されるグループの名前が決まります。これは、JRXMLレポートテンプレートで宣言されたグループの名前を取ります。
ResetType
これにより、変数の値がいつリセットされるかが決まります。この属性は、以下のような値を使用します-
列-変数値は、各列の先頭でリセットされます。
グループ-incrementGroupで指定されたグループが変更されると、変数値がリセットされます。
なし-変数値がリセットされることはありません。
ページ-変数値は、すべてのページの先頭でリセットされます。
レポート-変数値は、レポートの開始時に1回だけリセットされます。
ResetGroup
これにより、resetTypeがGroupの場合に、変数値がリセットされるグループの名前が決まります。この属性の値は、JRXMLレポートテンプレートで宣言されたグループの名前になります。
組み込みのレポート変数
次のように、式ですぐに使用できる組み込みのシステム変数がいくつかあります。
S.NO | 変数の名前と説明 |
---|---|
1 | PAGE_NUMBER この変数の値は、現在のページ番号です。JasperReportsテキストフィールド要素の特別な機能であるevaluationTime属性を使用して、現在のページ番号と総ページ数の両方を表示するために使用できます。 |
2 | COLUMN_NUMBER この変数には、現在の列番号が含まれています。 |
3 | REPORT_COUNT このレポート変数には、処理されたレコードの総数が含まれます。 |
4 | PAGE_COUNT この変数には、現在のページの生成時に処理されたレコードの数が含まれます。 |
5 | COLUMN_COUNT この変数には、現在の列を生成するときに処理されたレコードの数が含まれます。 |
6 | GroupName_COUNT この変数の名前は、対応するグループの名前に由来し、接尾辞は_COUNTシーケンスです。この変数には、現在のグループのレコード数が含まれます。 |
例
変数を追加しましょう(countNumber)既存のレポートテンプレート(チャプターレポートデザイン)に。各レコードの前にカウントを付けます。改訂されたレポートテンプレート(jasper_report_template.jrxml)は次のとおりです。C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します-
<?xml version = "1.0"?>
<!DOCTYPE jasperReport PUBLIC
"//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" pageWidth = "595"
pageHeight = "842" columnWidth = "515"
leftMargin = "40" rightMargin = "40" topMargin = "50" bottomMargin = "50">
<parameter name = "ReportTitle" class = "java.lang.String"/>
<parameter name = "Author" class = "java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name = "country" class = "java.lang.String">
<fieldDescription>
<![CDATA[country]]>
</fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription>
<![CDATA[name]]>
</fieldDescription>
</field>
<variable name = "countNumber" class = "java.lang.Integer" calculation = "Count">
<variableExpression>
<![CDATA[Boolean.TRUE]]>
</variableExpression>
</variable>
<title>
<band height = "70">
<line>
<reportElement x = "0" y = "0" width = "515" height = "1"/>
</line>
<textField isBlankWhenNull = "true" bookmarkLevel = "1">
<reportElement x = "0" y = "10" width = "515" height = "30"/>
<textElement textAlignment = "Center">
<font size = "22"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{ReportTitle}]]>
</textFieldExpression>
<anchorNameExpression>
<![CDATA["Title"]]>
</anchorNameExpression>
</textField>
<textField isBlankWhenNull = "true">
<reportElement x = "0" y = "40" width = "515" height = "20"/>
<textElement textAlignment = "Center">
<font size = "10"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{Author}]]> </textFieldExpression> </textField> </band> </title> <columnHeader> <band height = "23"> <staticText> <reportElement mode = "Opaque" x = "0" y = "3" width = "535" height = "15" backcolor = "#70A9A9" /> <box> <bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" /> </box> <textElement /> <text> <![CDATA[]]> </text> </staticText> <staticText> <reportElement x = "414" y = "3" width = "121" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font isBold = "true" /> </textElement> <text><![CDATA[Country]]></text> </staticText> <staticText> <reportElement x = "0" y = "3" width = "136" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font isBold = "true" /> </textElement> <text><![CDATA[Name]]></text> </staticText> </band> </columnHeader> <detail> <band height = "16"> <staticText> <reportElement mode = "Opaque" x = "0" y = "0" width = "535" height = "14" backcolor = "#E5ECF9" /> <box> <bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" /> </box> <textElement /> <text> <![CDATA[]]> </text> </staticText> <textField> <reportElement x = "414" y = "0" width = "121" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font size = "9" /> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$F{country}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "0" y = "0" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle" />
<textFieldExpression class = "java.lang.String">
<![CDATA[" " + String.valueOf($V{countNumber}) +"."+$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
レポート入力のJavaコードは変更されていません。ファイルの内容C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource =
new JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
/**
* Passing ReportTitle and Author as parameters
*/
parameters.put("ReportTitle", "List of Contacts");
parameters.put("Author", "Prepared By Manisha");
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
POJOファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java 以下のとおりです-
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
ファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
レポートの生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行します。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から選択され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview
the report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc"
classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReportがデフォルトのターゲットです)as −
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28: warning:
'includeantruntime' was not set, defaulting to build.sysclasspath=last;
set to false for repeatable builds
[javac] Compiling 7 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig
for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 18 seconds
上記のコンパイルの結果、JasperViewerウィンドウが次の画面のように開きます-
ここでは、レコードごとにカウントの前に付けられていることがわかります。
簡単なレポートテンプレートの構造については、「はじめに」の章で説明しました。同様の行で、JasperReportsはレポートテンプレートを複数のセクションに構造化します。セクションは、指定された高さを持つレポートの一部であり、線、長方形、画像、テキストフィールドなどのレポートオブジェクトを含めることができます。
レポートエンジンは、レポートの入力時に、提供されたレポートデータソースの仮想レコードを反復処理します。次に、各セクションの定義された動作に応じて、エンジンは必要に応じて各レポートセクションをレンダリングします。たとえば、詳細セクションは、データソースのレコードごとにレンダリングされます。改ページが発生すると、必要に応じてページヘッダーセクションとページフッターセクションがレンダリングされます。
JasperReportsでは、用語とレポートセクションは次のようにも呼ばれます。 report bands。セクションは、1つ以上のバンドで構成されます。これらのセクションは、レポート生成時に繰り返し入力され、最終的なドキュメントを準備します。
主なセクション
JasperReportsのレポートテンプレートには、次の主要なセクションがあります-
<title></title>
<pageheader></pageheader>
<columnheader></columnheader>
<groupheader></groupheader>
<detail></detail>
<groupfooter></groupfooter>
<columnfooter></columnfooter>
<pagefooter></pagefooter>
<lastpagefooter></lastpagefooter>
<summary></summary>
<nodata></nodata>
<background></background>
次の表は、各セクションをまとめたものです。
S.NO | セクションと説明 |
---|---|
1 | Title このセクションは、レポートの最初に1回だけ表示されます。 |
2 | Page Header このセクションは、生成されたドキュメントの各ページの先頭に表示されます。 |
3 | Column Header このセクションは、生成されたドキュメントの各列の先頭に表示されます。レポートに定義されている列が1つしかない場合、列のヘッダーセクションとフッターセクションは無視されます。 |
4 | Group Header このセクションは、レポートグループ(グループの章)によって紹介されています。グループ化式の値が変更されるたびに、グループヘッダーセクションが詳細セクションの上に出力されます。複数のグループが定義されている場合、グループヘッダーはグループ定義の順序で出力されます。 |
5 | Detail このセクションは、レポートのデータソースによって提供されるデータの各行に対して繰り返されます。詳細セクションは、複数のバンドで構成できます。 |
6 | Group Footer このセクションは、レポートグループ(グループの章)によって紹介されています。グループ化式の値が変更される前に、グループフッターセクションが詳細セクションの下に印刷されます。グループフッターは、データソースのデータの最後の行に対して常に印刷されます。複数のグループが定義されている場合、グループフッターはグループ定義の逆の順序で印刷されます。 |
7 | Column Footer このセクションは、各列の下部に表示されます。レポートの列数が1の場合、列のヘッダーセクションとフッターセクションは無視されます。 |
8 | Page Footer このセクションは、各ページの下部に表示されます。 |
9 | Last Page Footer このセクションは、レポートの最後のページの通常のページフッターを置き換えます。要約セクションも存在する場合、これはドキュメントの最後のページではない可能性があります。このセクションは、最後のページの下部に要約情報を表示する必要がある場合に役立つことがあります。 |
10 | Summary このセクションは、レポートの最後に1回だけ表示されます。 |
11 | No Data このセクションは、[データなしの印刷]レポートプロパティが[データなし]セクションに設定されている場合に印刷されます。<noData>セクションがレポートテンプレートで定義されていて、データソースが空の場合、入力時に<noData>セクションのみが考慮され、そのコンテンツによってレポート出力が生成されます。 |
12 | Background 背景セクションはすべてのページに表示され、次のページにオーバーフローすることはできません。このセクションに配置された要素は、ページの初期化時に評価され、バックグラウンドで表示されます。他のすべてのページオブジェクトは、背景オブジェクトの上に表示されます。このセクションは、ページの透かしを作成するのに役立ちます。 |
セクション、要素、および属性の関係
次の図は、レポートのセクションの要素と属性の関係を示しています。
セクション要素
上記のレポートセクションはすべてオプションです。ただし、レポートテンプレートには、少なくとも1つのそのようなセクションがあります。これらの各セクションには、単一の<band>唯一のサブ要素としての要素。A <band>次のサブ要素を0個以上含めることができます-
<line>、<rectangle>、<ellipse>、<image>、<staticText>、<textField>、<subReport>、または<elementGroup>
これらの各要素には、単一の<が含まれている必要がありますreportElement>最初の要素として(elementGroupを除く)。A <reportElement>その特定の要素のデータがどのように配置されるかを決定します。変数やパラメータとは異なり、通常はレポートテンプレート内の個々の要素を取得する必要がないため、レポート要素に名前を付ける必要はありません。
次の表は、<の属性をまとめたものです。reportElement> −
属性 | 説明 | 有効な値 |
---|---|---|
バツ | バンド要素のx座標を指定します。 | 要素のx座標をピクセル単位で示す整数値。この属性は必須です。 |
y | バンド要素のy座標を指定します。 | 要素のy座標をピクセル単位で示す整数値。この属性は必須です。 |
幅 | バンド要素の幅を指定します。 | 要素の幅をピクセル単位で示す整数値。この属性は必須です。 |
高さ | バンド要素の高さを指定します。 | 要素の高さをピクセル単位で示す整数値。この属性は必須です。 |
キー | バンド要素の一意の識別子。 | 一意の文字列値。 |
StretchType | 含まれているバンドが伸びるときに要素がどのように伸びるかを指定します | NoStretch (default) −要素は伸びません。 RelativeToTallestObject −要素は、そのグループ内で最も高いオブジェクトに対応するように伸びます。 RelativeToBand −要素はバンドの高さに合うように伸びます。 |
positionType | バンドが伸びるときの要素の位置を指定します。 | Float −周囲の要素のサイズに応じて要素が移動します。 FixRelativeToTop (default) −エレメントは、バンドの上部に対して固定位置を維持します。 FixRelativeToBottom −エレメントは、バンドの底に対して固定位置を維持します。 |
isPrintRepeatedValues | 繰り返される値を出力するかどうかを指定します。 | true (default) −繰り返される値が出力されます。 false −繰り返し値は出力されません。 |
モード | 要素のバックグラウンドモードを指定します | 不透明、透明 |
isRemoveLineWhenBlank | 要素が空白で、同じ水平スペースに他の要素がない場合に要素を削除するかどうかを指定します。 | 真/偽 |
isPrintInFirstWholeBand | 要素をバンド全体、つまりレポートページまたは列に分割されていないバンドで印刷する必要があるかどうかを指定します。 | 真/偽 |
isPrintWhenDetailOverFlows | バンドが新しいページまたは列にオーバーフローしたときに要素を印刷するかどうかを指定します。 | 真/偽 |
printWhenGroupChanges | 指定したグループが変更されたときに要素が印刷されることを指定します。 | 文字列値。 |
フォアカラー | 要素の前景色を指定します。 | #文字が前に付いた16進数のRGB値、または次の事前定義された値のいずれか:黒、青、シアン、darkGray、灰色、緑、lightGray、マゼンタ、オレンジ、ピンク、赤、黄、白。 |
背景色 | 要素の背景色を指定します。 | フォアカラーの有効な値と同じ |
セクション属性
レポートセクションの属性は次のとおりです-
高さ
セクションの高さは、その特定のセクションの高さをピクセル単位で指定し、レポートデザイン全体で非常に重要です。
式のときに印刷
セクションを印刷するかどうかを決定するブール式。
分割許可
現在のページに収まらない場合にセクションを分割できるかどうかを示すフラグ。trueの場合、セクションは次のページに転送されます。セクションが次のページに収まらない場合は、フラグの値に関係なくセクションが分割されることに注意してください。splitTypeは次の値を取ることができます-
splitType = "Stretch:"ストレッチされたコンテンツを分割します。セクションが現在のページに広がっている場合(使用可能なスペースが宣言された高さよりも小さい場合)、元の高さに追加された領域を次のページに分割できます。
splitType = "Prevent:"最初の試行で分割を防止します。セクションが次のページに収まらない場合、バンド分割防止は最初の分割試行でのみ有効であるため、分割は正常に発生します。
splitType = "Immediate:"すぐに分割します。バンドは、その最上部の要素である上記以外の場所で分割できます。
例
各セクションを示すために、レポートテンプレート(jasper_report_template.jrxml)を作成しましょう。このファイルをに保存しますC:\tools\jasperreports-5.0.1\testディレクトリ。このファイルでは、各セクションにテキストを表示します(上記で説明しました)。ファイルの内容は以下のとおりです。
<?xml version = "1.0" encoding = "UTF-8"?>
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" pageWidth = "300" pageHeight = "300"
columnWidth = "300" leftMargin = "0" rightMargin = "0"
topMargin = "0" bottomMargin = "0" >
<title>
<band height = "50">
<textField>
<reportElement x = "100" y = "16" width = "100" height = "20"/>
<textElement/>
<textFieldExpression>
<![CDATA["Title"]]>
</textFieldExpression>
</textField>
</band>
</title>
<pageHeader>
<band height = "40">
<textField>
<reportElement mode = "Opaque" x = "100" y = "10"
width = "90" height = "20"/>
<textElement>
<font isBold = "true"/>
</textElement>
<textFieldExpression>
<![CDATA["Page Header"]]>
</textFieldExpression>
</textField>
</band>
</pageHeader>
<columnHeader>
<band height = "40">
<textField>
<reportElement x = "100" y = "10" width = "90" height = "20"/>
<textElement>
<font isItalic = "true"/>
</textElement>
<textFieldExpression>
<![CDATA["Column Header"]]>
</textFieldExpression>
</textField>
</band>
</columnHeader>
<detail>
<band height ="40">
<textField>
<reportElement mode = "Opaque" x = "100" y = "10"
width = "90" height = "20" backcolor = "#99CCFF"/>
<textElement/>
<textFieldExpression>
<![CDATA["Report Details"]]>
</textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height = "40">
<textField>
<reportElement x = "100" y = "10" width = "90" height = "20"/>
<textElement/>
<textFieldExpression>
<![CDATA["Column Footer"]]>
</textFieldExpression>
</textField>
</band>
</columnFooter>
<pageFooter>
<band height = "40">
<textField>
<reportElement x = "100" y = "10" width = "90" height = "20"/>
<textElement/>
<textFieldExpression>
<![CDATA["Page Footer"]]>
</textFieldExpression>
</textField>
</band>
</pageFooter>
<lastPageFooter>
<band height = "40">
<textField>
<reportElement x = "100" y = "10" width = "90" height = "20"/>
<textElement/>
<textFieldExpression>
<![CDATA["Last Page Footer"]]>
</textFieldExpression>
</textField>
</band>
</lastPageFooter>
<summary>
<band height = "40">
<textField>
<reportElement x = "100" y = "10" width = "90" height = "20"/>
<textElement/>
<textFieldExpression>
<![CDATA["Summary"]]>
</textFieldExpression>
</textField>
</band>
</summary>
</jasperReport>
レポートに入力して生成するJavaコードを以下に示します。このファイルを保存しましょうJasperReportFill.java C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspointディレクトリに移動します。
package com.tutorialspoint;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
public class JasperReportFill {
public static void main(String[] args) {
String sourceFileName = "C://tools/jasperreports-5.0.1/test/" +
"jasper_report_template.jasper";
try {
JasperFillManager.fillReportToFile(sourceFileName, null,
new JREmptyDataSource());
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
ここでは、レポートに入力するときにJREmptyDataSourceのインスタンスを使用して、1つのレコードを含むデータソースをシミュレートしますが、この1つのレコードのすべてのフィールドはnullです。
レポートの生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行します。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から取得され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview
the report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc"
classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReportがデフォルトのターゲットです)次のように-
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defau
[javac] Compiling 1 source file to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFac
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnviro
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnviro
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 18 minutes 22 seconds
上記のコンパイルの結果、JasperViewerウィンドウが次の画面のように開きます-
ここでは、各セクションにテキストが印刷されていることがわかります。JRXMLには<lastPageFooter>要素が含まれているため、表示されている<pageFooter>要素ではなく、レポートの最後のページに表示されることに注意してください。<columnHeader>要素と<columnFooter>要素は、レポートに複数の列がある場合にのみ表示されます。
JasperReportsのグループは、レポートのデータを論理的な方法で整理するのに役立ちます。レポートグループは、特定のレポートフィールドの値など、共通点があるデータソース内の一連の連続したレコードを表します。レポートグループは、<group>要素によって定義されます。レポートには、任意の数のグループを含めることができます。宣言されると、グループはレポート全体で参照できます。
レポートグループには3つの要素があります-
グループ式-これは、新しいデータグループを開始するために変更する必要があるデータを示します。
グループヘッダーセクション-グループ化されたデータの先頭にラベルを配置するのに役立ちます。
グループフッターセクション-グループ化されたデータの最後にラベルを配置するのに役立ちます。
レポート入力時のデータソースの反復中に、グループ式の値が変更されると、グループの破損が発生し、対応する<groupFooter>セクションと<groupHeader>セクションが結果のドキュメントに挿入されます。
レポートグループメカニズムは、データソースによって提供されたデータに対して並べ替えを実行しません。データグループ化は、データソース内のレコードが、レポートで使用されているグループ式に従って既に順序付けられている場合にのみ、期待どおりに機能します。
グループ属性
<group>要素には、グループ化されたデータのレイアウト方法を制御できる属性が含まれています。属性は以下の表に要約されています-
S.NO | 属性と説明 |
---|---|
1 | name これは必須です。レポート式のグループを名前で参照します。これは、レポートパラメータ、フィールド、およびレポート変数について説明したのと同じ命名規則に従います。特定のレポートグループを参照する場合は、他のJRXML属性で使用できます。 |
2 | isStartNewColumn trueに設定すると、各データグループは新しい列から始まります。デフォルト値はfalseです。 |
3 | isStartNewPage trueに設定すると、各データグループは新しいページから始まります。デフォルト値はfalseです。 |
4 | isResetPageNumber trueに設定すると、新しいグループが開始するたびにレポートページ番号がリセットされます。デフォルト値はfalseです。 |
5 | isReprintHeaderOnEachPage trueに設定すると、グループヘッダーがすべてのページに再印刷されます。デフォルト値はfalseです。 |
6 | minHeightToStartNewPage 現在の列にグループヘッダーを配置するために、列の下部に必要な垂直方向のスペースの最小量を定義します。金額はレポート単位で指定されます。 |
7 | footerPosition ページ上のグループフッターの位置と、それに続くレポートセクションに関連する動作をレンダリングします。その値は、Normal、StackAtBottom、ForceAtBottom、およびCollateAtBottomです。デフォルト値はNormalです。 |
8 | keepTogether trueに設定すると、グループが最初のブレーク試行で分割されないようにします。 |
例
グループを追加しましょう(CountryGroup)既存のレポートテンプレート(チャプターレポートデザイン)に。各国の発生をカウントし、グループフッターとして表示します。グループヘッダーでは、各レコードの数にプレフィックスが付けられます。改訂されたレポートテンプレート(jasper_report_template.jrxml)は次のとおりです。C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します-
<?xml version = "1.0"?>
<!DOCTYPE jasperReport PUBLIC
"//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" pageWidth = "595"
pageHeight = "842" columnWidth = "515"
leftMargin = "40" rightMargin = "40" topMargin = "50" bottomMargin = "50">
<parameter name = "ReportTitle" class = "java.lang.String"/>
<parameter name = "Author" class = "java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<sortField name = "country" order = "Descending"/>
<sortField name = "name"/>
<variable name = "CountryNumber" class = "java.lang.Integer"
incrementType = "Group" incrementGroup = "CountryGroup"
calculation = "Count">
<variableExpression><![CDATA[Boolean.TRUE]]></variableExpression>
</variable>
<group name = "CountryGroup" minHeightToStartNewPage = "60">
<groupExpression><![CDATA[$F{country}]]></groupExpression> <groupHeader> <band height = "20"> <textField evaluationTime = "Group" evaluationGroup = "CountryGroup" bookmarkLevel = "1"> <reportElement mode = "Opaque" x = "0" y = "5" width = "515" height = "15" backcolor = "#C0C0C0"/> <box leftPadding = "10"> <bottomPen lineWidth = "1.0"/> </box> <textElement/> <textFieldExpression class = "java.lang.String"> <![CDATA[" " + String.valueOf($V{CountryNumber}) + ". "
+ String.valueOf($F{country})]]> </textFieldExpression> <anchorNameExpression> <![CDATA[String.valueOf($F{country})]]>
</anchorNameExpression>
</textField>
</band>
</groupHeader>
<groupFooter>
<band height = "20">
<staticText>
<reportElement x = "400" y = "1" width = "60" height = "15"/>
<textElement textAlignment = "Right"/>
<text><![CDATA[Count :]]></text>
</staticText>
<textField>
<reportElement x = "460" y = "1" width = "30" height = "15"/>
<textElement textAlignment = "Right"/>
<textFieldExpression class = "java.lang.Integer">
<![CDATA[$V{CountryGroup_COUNT}]]> </textFieldExpression> </textField> </band> </groupFooter> </group> <title> <band height = "70"> <line> <reportElement x = "0" y = "0" width = "515" height = "1"/> </line> <textField isBlankWhenNull = "true" bookmarkLevel = "1"> <reportElement x = "0" y = "10" width = "515" height = "30"/> <textElement textAlignment = "Center"> <font size = "22"/> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$P{ReportTitle}]]>
</textFieldExpression>
<anchorNameExpression>
<![CDATA["Title"]]>
</anchorNameExpression>
</textField>
<textField isBlankWhenNull = "true">
<reportElement x = "0" y = "40" width = "515" height = "20"/>
<textElement textAlignment = "Center">
<font size = "10"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{Author}]]> </textFieldExpression> </textField> </band> </title> <columnHeader> <band height = "23"> <staticText> <reportElement mode = "Opaque" x = "0" y = "3" width = "535" height = "15" backcolor = "#70A9A9" /> <box> <bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" /> </box> <textElement /> <text><![CDATA[]]> </text> </staticText> <staticText> <reportElement x = "414" y = "3" width = "121" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font isBold = "true" /> </textElement> <text><![CDATA[Country]]></text> </staticText> <staticText> <reportElement x = "0" y = "3" width = "136" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font isBold = "true" /> </textElement> <text><![CDATA[Name]]></text> </staticText> </band> </columnHeader> <detail> <band height = "16"> <staticText> <reportElement mode = "Opaque" x = "0" y = "0" width = "535" height = "14" backcolor = "#E5ECF9" /> <box> <bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" /> </box> <textElement /> <text> <![CDATA[]]> </text> </staticText> <textField> <reportElement x = "414" y = "0" width = "121" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font size = "9" /> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$F{country}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "0" y = "0" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle" />
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
レポート入力のJavaコードは変更されていません。ファイルの内容C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource =
new JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
/**
* Passing ReportTitle and Author as parameters
*/
parameters.put("ReportTitle", "List of Contacts");
parameters.put("Author", "Prepared By Manisha");
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
POJOファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java 以下のとおりです-
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
ファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
レポートの生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行します。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から取得され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview
the report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReportがデフォルトのターゲットです)as −
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28: warning:
'includeantruntime' was not set, defaulting to build.sysclasspath=last;
set to false for repeatable builds
[javac] Compiling 7 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig
for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 18 seconds
上記のコンパイルの結果、JasperViewerウィンドウが次の画面のように開きます-
ここでは、各国がグループ化されており、各国の発生回数が各グループのフッターに表示されていることがわかります。
レポートにはテキスト要素が含まれており、それぞれに独自のフォント設定を設定できます。これらの設定は、<を使用して指定できますfont>タグは<textElement>タグで使用できます。レポートでは、いくつかのフォントを定義できます。定義すると、レポート全体で他のフォント定義のデフォルトまたは基本フォント設定として使用できます。
レポートフォント
レポートフォントは、レポートレベルで宣言されたフォント設定のコレクションです。レポートフォントは、テキスト要素のフォントプロパティを設定するときに、レポートテンプレート全体で再利用できます。
レポートフォントは非推奨になりました。ドキュメント自体で宣言されている<reportFont />要素は使用しないでください。代わりに<style />要素を使用してください。
フォント属性
以下の表は、<の主な属性をまとめたものです。font>要素-
S.NO | 属性と説明 |
---|---|
1 | fontName フォント名。物理フォント、論理フォント、または登録済みのJasperReportsフォント拡張機能のフォントファミリーの名前にすることができます。 |
2 | size ポイントで測定されたフォントのサイズ。デフォルトは10です。 |
3 | isBold 太字フォントが必要かどうかを指定するフラグ。デフォルトはfalseです。 |
4 | isItalic イタリックフォントが必要かどうかを指定するフラグ。デフォルトはfalseです。 |
5 | isUnderline 下線付きのテキスト装飾が必要かどうかを指定するフラグ。デフォルトはfalseです。 |
6 | isStrikeThrough 取り消し線のテキスト装飾が必要かどうかを指定するフラグ。デフォルトはfalseです。 |
7 | pdfFontName ドキュメントをPDF形式にエクスポートするときにiTextライブラリに必要な同等のPDFフォントの名前。 |
8 | pdfEncoding 同等のPDF文字エンコーディング。iTextライブラリにも必要です。 |
9 | isPdfEmbedded フォントをドキュメント自体に埋め込むかどうかを指定するフラグ。デフォルトはfalseです。trueに設定すると、PDFドキュメントを問題なく表示できます。 |
フォントタイプ
JasperReportsでは、フォントは次のように分類できます。
Logical Fonts−バージョン1.0以降Javaプラットフォームで認識されている5つのフォントタイプは、論理フォントと呼ばれます。これらは-Serif, SansSerif, Monospaced, Dialog, and DialogInput。これらの論理フォントは、システムのどこかにインストールされている実際のフォントライブラリではありません。これらは、Javaランタイムによって認識されるフォントタイプ名にすぎません。これらは、システムにインストールされている物理フォントにマップする必要があります。
Physical Fonts−これらのフォントは、たとえばTrueTypeまたはPostScript Type1フォントで構成される実際のフォントライブラリです。物理フォントは、Arial、Time、Helvetica、Courier、または国際フォントを含むその他のフォントです。
Font Extensions− JasperReportsライブラリは、フォント拡張機能の組み込みサポートを通じて、実行時にオンザフライで登録されたフォントを利用できます。フォントファミリーのリストは、フォント拡張機能を使用してJasperReportsで利用できるようにすることができます。これらは、同じように見えるフォントフェースで構成され、特定のロケールをサポートしています。
上記の表で説明されているように、属性fontNameで、物理フォントの名前、論理フォントの名前、または登録済みのJasperReportsフォント拡張機能からのフォントファミリーの名前を指定する必要があります。
PDFフォント名
JasperReportsライブラリは、レポートをPDF(Portable Document Format)にエクスポートするときに、iTextライブラリを使用します。PDFファイルはさまざまなプラットフォームで表示でき、常に同じように見えます。これは、この形式では、フォントを処理する特別な方法があるためです。fontName属性は、PDFにエクスポートする場合は役に立ちません。フォント設定を指定する必要がある場所に属性pdfFontNameが存在します。
iTextライブラリは、組み込みフォントとTTFファイルの処理方法を認識しており、次の組み込みフォント名を認識します。
- Courier
- Courier-Bold
- Courier-BoldOblique
- Courier-Oblique
- Helvetica
- Helvetica-Bold
- Helvetica-BoldOblique
- Helvetica-Oblique
- Symbol
- Times-Roman
- Times-Bold
- Times-BoldItalic
- Times-Italic
- ZapfDingbats
iTextライブラリの前提条件に従って、フォントを操作するには、フォント名として次のいずれかを指定する必要があります-
上記のリストからの組み込みフォント名。
TTF(True Type Font)ファイルの名前。ディスク上で見つけることができます。
フォントを含むTTFファイルが以前にiTextに登録されているか、フォントの登録時にエイリアスが定義されている場合の、フォントの実際の名前。
上記の前提条件に基づいて、pdfFontName属性には次のいずれかの値を含めることができます-
上記のリストからの組み込みPDFフォントの名前。
PDFにエクスポートするときに実行時にディスク上に配置できるTTFファイルの名前。
登録されているフォントの本名。
iTextにフォントファイルとして登録されているフォントのキーのサフィックス(net.sf.jasperreports.export.pdf.fontの後の部分)。
デフォルトのフォントと継承
各テキスト要素は、親要素からフォントとスタイルの属性を継承し、親要素はこれらの属性を親から継承します。要素にスタイルやフォントが定義されていない場合、<jasperReport />ルート要素で宣言されているデフォルトのスタイル(および/またはフォント-ただし、これは非推奨になりました)が適用されます。
JasperReportsでデフォルトのスタイルまたはフォントを定義することは必須ではありません。特定の要素にフォントが定義されていない場合、エンジンは継承されたフォント属性を検索するか、この方法で属性が見つからない場合は、/でnet.sf.jasperreports.default.font.nameプロパティを検索します。src /default.jasperreports.propertiesファイル。その値は、フォントプロパティがテキスト要素に対して明示的に定義されていない場合、またはその親から継承されていない場合に使用されるフォントファミリの名前を定義します。
/src/default.jasperreports.propertiesファイルで定義されている主なデフォルトのフォントプロパティとその値は、次の表にあります。
プロパティ | 説明 |
---|---|
net.sf.jasperreports.default.font.name = SansSerif | デフォルトのフォント名。 |
net.sf.jasperreports.default.font.size = 10 | デフォルトのフォントサイズ。 |
net.sf.jasperreports.default.pdf.font.name = Helvetica | デフォルトのPDFフォント。 |
net.sf.jasperreports.default.pdf.encoding = Cp1252 | デフォルトのPDF文字エンコード。 |
net.sf.jasperreports.default.pdf.embedded = false | デフォルトでは、PDFフォントは埋め込まれていません。 |
例
特定のテキストの外観を取得するためにフォントとフォント属性を使用する方法を示すために、新しいレポートテンプレート(jasper_report_template.jrxml)を作成してみましょう。JRXMLの内容は以下のとおりです。C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します。ここでは、レポートのタイトルにさまざまなフォント形式でテキストを表示します。
<?xml version = "1.0" encoding = "UTF-8"?>
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" pageWidth = "595" pageHeight = "842"
columnWidth = "555" leftMargin = "20" rightMargin = "20" topMargin = "30"
bottomMargin = "30">
<title>
<band height = "682">
<staticText>
<reportElement x = "0" y = "50" width = "150" height = "40"/>
<textElement/>
<text>
<![CDATA[Welcome to TutorialsPoint!]]>
</text>
</staticText>
<staticText>
<reportElement x = "160" y = "50" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "50" width = "150" height = "40"/>
<text>Welcome to TutorialsPoint!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "100" width = "150" height = "40"/>
<textElement>
<font size = "12"/>
</textElement>
<text><![CDATA[Welcome to TutorialsPoint!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "100" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "100" width = "150" height = "40"/>
<textElement>
<font size = "14"/>
</textElement>
<text> Welcome to TutorialsPoint!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "150" width = "150" height = "40"/>
<textElement>
<font fontName = "DejaVu Serif" size = "12" isBold = "false"/>
</textElement>
<text><![CDATA[Welcome to TutorialsPoint!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "150" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "250" width = "150" height = "40"/>
<textElement>
<font fontName = "DejaVu Serif" size = "12" isBold = "false"/>
</textElement>
<text>Welcome to TutorialsPoint!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "200" width = "150" height = "40"/>
<textElement>
<font fontName = "DejaVu Serif" size = "12" isBold = "true"/>
</textElement>
<text><![CDATA[Welcome to TutorialsPoint!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "200" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "300" width = "150" height = "40"/>
<textElement>
<font fontName = "DejaVu Serif" size = "12" isBold = "true"/>
</textElement>
<text>Welcome to TutorialsPoint!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "250" width = "150" height = "40"/>
<textElement>
<font fontName = "Monospaced" size = "12" isItalic = "true"
isUnderline = "true" pdfFontName = "Courier-Oblique"/>
</textElement>
<text><![CDATA[Welcome to TutorialsPoint!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "250" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "350" width = "150" height = "40"/>
<textElement>
<font fontName = "Monospaced" size = "12" isItalic = "true"
isUnderline = "true" pdfFontName = "Courier-Oblique"/>
</textElement>
<text>Welcome to TutorialsPoint!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "300" width = "150" height = "40"/>
<textElement>
<font fontName = "Monospaced" size = "12" isBold = "true"
isStrikeThrough = "true" pdfFontName = "Courier-Bold"/>
</textElement>
<text><![CDATA[Welcome to TutorialsPoint!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "300" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "400" width = "150" height = "40"/>
<textElement>
<font fontName = "Monospaced" size = "12" isBold = "true"
isStrikeThrough = "true" pdfFontName = "Courier-Bold"/>
</textElement>
<text>Welcome to TutorialsPoint!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "350" width = "150" height = "40"
forecolor = "#FF0000"/>
<textElement>
<font size = "14"/>
</textElement>
<text><![CDATA[Welcome to TutorialsPoint!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "350" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "450" width = "150" height = "40"
forecolor = "red"/>
<textElement><font size = "14"/></textElement>
<text>Welcome to TutorialsPoint!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "400" width = "150" height = "40" mode = "Opaque"
forecolor = "#00FF00" backcolor = "#FFFF00"/>
<textElement>
<font fontName = "Serif" size = "12" isBold = "true"
pdfFontName = "Times-Bold"/>
</textElement>
<text><![CDATA[Welcome to TutorialsPoint!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "400" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "500" width = "150" height = "40"
forecolor = "green" backcolor = "#FFFF00" mode = "Opaque"/>
<textElement>
<font fontName = "Serif" size = "12" isBold = "true"
pdfFontName = "Times-Bold"/>
</textElement>
<text>Welcome to TutorialsPoint!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement x = "0" y = "450" width = "150" height = "40" mode = "Opaque"
forecolor = "#0000FF" backcolor = "#FFDD99"/>
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font fontName = "SansSerif" size = "12" isBold = "false"
isItalic = "true" pdfFontName = "Sans.Slanted" isPdfEmbedded = "true"/>
</textElement>
<text><![CDATA[Welcome to TutorialsPoint!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "450" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "550" width = "150" height = "90"
forecolor = "blue" backcolor = "#FFDD99" mode = "Opaque"/>
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font fontName = "SansSerif" size = "12" isBold = "false"
pdfFontName = "Sans.Slanted" isPdfEmbedded = "true"/>
</textElement>
<text>Welcome to TutorialsPoint!</text></staticText>]]>
</text>
</staticText>
<staticText>
<reportElement mode = "Opaque" x = "0" y = "500" width = "150" height = "40"
forecolor = "#FF0000" backcolor = "#99DDFF"/>
<textElement textAlignment = "Right" verticalAlignment = "Bottom">
<font fontName = "SansSerif" size = "12" isBold = "true"
pdfFontName = "DejaVu Sans Bold" isPdfEmbedded = "true"/>
</textElement>
<text><![CDATA[Welcome to TutorialsPoint!]]></text>
</staticText>
<staticText>
<reportElement x = "160" y = "500" width = "390" height = "40"/>
<textElement/>
<text>
<![CDATA[<staticText>
<reportElement x = "0" y = "650" width = "150" height = "90" forecolor = "red"
backcolor = "#99DDFF" mode = "Opaque"/>
<textElement textAlignment = "Right" verticalAlignment = "Bottom">
<font fontName = "SansSerif" size = "12" isBold = "true"
pdfFontName = "DejaVu Sans Bold" isPdfEmbedded = "true"/>
</textElement>
<text>Welcome to TutorialsPoint!</text></staticText>]]>
</text>
</staticText>
</band>
</title>
</jasperReport>
レポートに入力して生成するJavaコードは次のとおりです。このファイルを保存しましょうJasperFontsReportFill.java C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspointディレクトリに移動します。
package com.tutorialspoint;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
public class JasperFontsReportFill {
public static void main(String[] args) {
String sourceFileName = "C://tools/jasperreports-5.0.1/test/" +
"jasper_report_template.jasper";
try {
JasperFillManager.fillReportToFile(sourceFileName, null,
new JREmptyDataSource());
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
ここでは、レポートに入力するときにJREmptyDataSourceのインスタンスを使用して、1つのレコードを含むが、すべてのフィールドがnullであるデータソースをシミュレートします。
レポートの生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行します。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から選択され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview the report
stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperFontsReportFill (viewFullReportがデフォルトのターゲットです)as −
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperFontsReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defaulting to build.
[javac] Compiling 5 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperFontsReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 45 minutes 3 seconds
上記のコンパイルの結果、以下の画面に示すようにJasperViewerウィンドウが開きます-
ここでは、「WelcometoTutorialsPoint」というテキストがさまざまなフォント形式で表示されていることがわかります。
JasperReportsでは、テキストを操作するには、文字表現とテキストフォーマットプロパティの両方を処理するための専用ツールが必要です。すべてのテキストは、特定の表現構造を持つ文字シーケンスと見なすことができます。テキストの外観は、レイアウト(および段落)とフォント設定の両方で構成されます。ただし、ほとんどの場合、テキストレイアウトは不変のままですが、異なるロケールでレポートを実行すると、フォント設定が変更される場合があります。
言語が異なれば、特定の文字表現に関して異なる文字セットが必要になることはわかっています。したがって、テキストを操作するということは、フォントを操作することを意味します。ただし、JasperReportsでフォントを使用する方法の詳細については、「レポートフォント」の章を参照してください。
特定のレポートのテキストコンテンツに関する主な機能の1つは、それを国際化する可能性です。つまり、ハードコードされた変更を行うことなく、さまざまな言語やその他のローカリゼーション設定を使用して、さまざまなローカライズ環境でレポートを実行できます。レポートを国際化する場合、文字エンコードは重要な機能です。
文字コード
文字は、意味のある情報を伝える書き込みの最小単位です。それは抽象的な概念であり、キャラクターは視覚的な外観を持っていません。「大文字のラテン語A」は、「小文字のラテン語a」、「大文字のキリル語A」、「大文字のギリシャ文字アルファ」とは異なる文字です。
キャラクターの視覚的表現は、 glyph。グリフの特定のセットは、font。「UppercaseLatinA」、「uppercase Cyrillic A」、「uppercase Greek Alpha」のグリフは同じかもしれませんが、文字が異なります。同時に、「大文字のラテンA」のグリフは、Times New Roman、Gill Sans、Poeticaの大法官府のイタリック体では大きく異なる場合がありますが、それでも同じ文字を表します。
使用可能な文字のセットは、文字レパートリーと呼ばれます。レパートリー内の特定の文字の位置(インデックス)は、そのコード位置またはコードポイントと呼ばれます。与えられたレパートリー内のコードポイントを数値的に表す方法は、character encoding。
エンコーディングは通常、オクテットで表されます。オクテットは、8つの2進数、つまり8つの1と0のグループです。オクテットは、16進表記を使用するために、0〜255、または0x00〜0xFFの数値範囲を表すことができます。
Unicode
Unicodeは、世界の言語で使用されているほとんどの文字を含む文字レパートリーです。数百万の文字を収容でき、すでに数十万の文字が含まれています。Unicodeは、64K文字の「平面」に分割されます。ほとんどの状況で使用されるのは、基本的な多言語平面(BMP)として知られる最初の平面だけです。
UTF-8が推奨されるエンコーディングです。可変数のオクテットを使用して、さまざまな文字を表します。
JRXMLファイルでは、encoding属性はヘッダーで指定されます。これは、レポートのコンパイル時にXMLコンテンツをデコードするために使用されます。たとえば、レポートにフランス語の単語のみとç、é、âなどの文字が含まれている場合、ISO-8859-1(別名Latin-1)エンコーディングで十分です。
<?xml version = "1.0" encoding = "ISO-8859-1"?>
上で見たように、理想的には、ドキュメント内のすべての文字を正しく表すことができる最小の文字セットに適合するエンコーディングを選択できます。ただし、多言語ドキュメント(つまり、複数の言語で綴られた単語を含むドキュメント)の場合は、異なる言語に属していても、ドキュメント内のすべての文字を正しく表すことができる、最小限の文字セットに適合したエンコーディングを選択する必要があります。多言語ドキュメントを処理できる文字エンコードの1つは、UTF-8、JasperReportsによってデフォルトのエンコーディング値として使用されます。
テキストは通常、国際化中にドキュメント内ではなく、リソースバンドルファイルに保存されます。そのため、JRXML自体が完全にASCII互換に見える場合がありますが、実行時に生成されるレポートには、ASCIIで読み取れないテキストが含まれています。その結果、特定の種類のドキュメントエクスポート形式(CSV、HTML、XHTML、XML、テキストなど)の場合、生成されたドキュメントのエンコーディングも知っている必要があります。さまざまな言語がさまざまな文字エンコードでサポートされています。そのため、毎回、ローカライズされた環境でレポートを実行する必要があります。さらに、生成されたドキュメント言語に最も適切な文字エンコードはどれかを知る必要があります。この場合、JRXMLファイル自体で定義されているencodingプロパティは役に立たなくなる可能性があります。
この種の問題を解決するために、net.sf.jasperreports.export.character.encodingとして知られるエクスポート顧客プロパティを使用できます。このエクスポートカスタムプロパティはデフォルトでUTF-8に設定されており、JasperReportsに存在します。
このデフォルト値は、default.jasperreports.propertiesファイルで設定されます。エクスポート時のより具体的なオプションについては、CHARACTER_ENCODINGエクスポートパラメーターも使用できます。
例
JasperreportsでのUnicodeサポートの使用を示すために、新しいレポートテンプレート(jasper_report_template.jrxml)を作成しましょう。 Save it to C:\tools\jasperreports-5.0.1\testディレクトリ。ここでは、Unicode文字(\ uXXXX)を使用してさまざまな言語でテキストを表示します。UTF-8でエンコードされた文字は、4桁の16進コードのみを使用して表すことができます。たとえば、ギリシャ文字のΓは\ u0393と書くことができます。このような表記が検出されると、エンジンは文字セット内の適切な文字表現を要求し、その特定の文字のみが出力されます。JRXMLの内容は以下のとおりです。
<?xml version = "1.0" encoding = "UTF-8"?>
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" language = "groovy" pageWidth = "595"
pageHeight = "842" columnWidth = "555" leftMargin = "20" rightMargin = "20"
topMargin = "20" bottomMargin = "20">
<parameter name = "GreekText" class = "java.lang.String" isForPrompting = "false">
<defaultValueExpression><![CDATA["\u0394\u03B5\u03BD "+
"\u03BA\u03B1\u03C4\u03B1\u03BB\u03B1\u03B2\u03B1\u03AF"+
"\u03BD\u03C9 \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC"]]>
</defaultValueExpression>
</parameter>
<parameter name = "CyrillicText" class = "java.lang.String" isForPrompting = "false">
<defaultValueExpression><![CDATA["\u042F \u043D\u0435 "+
"\u043C\u043E\u0433\u0443 \u043F\u043E\u043D\u044F\u0442\u044C "+
"\u0433\u0440\u0435\u0447\u0435\u0441\u043A\u0438\u0439"]]>
</defaultValueExpression>
</parameter>
<parameter name = "ArabicText" class = "java.lang.String" isForPrompting = "false">
<defaultValueExpression><![CDATA["\u0627\u0646\u0646\u0649 \u0644\u0627 "+
"\u0627\u0641\u0647\u0645 \u0627\u0644\u0644\u063A\u0629 "+
"\u0627\u0644\u0639\u0631\u0628\u064A\u0629"]]>
</defaultValueExpression>
</parameter>
<parameter name = "HebrewText" class = "java.lang.String" isForPrompting = "false">
<defaultValueExpression><![CDATA["\u05D0\u05E0\u05D9 \u05DC\u05D0 "+
"\u05DE\u05D1\u05D9\u05DF \u05E2\u05D1\u05E8\u05D9\u05EA"]]>
</defaultValueExpression>
</parameter>
<title>
<band height = "782">
<textField>
<reportElement x = "0" y = "50" width = "200" height = "60"/>
<textElement>
<font fontName = "DejaVu Sans" size = "14"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{GreekText} + "\n" + $P{CyrillicText}]]> </textFieldExpression> </textField> <staticText> <reportElement x = "210" y = "50" width = "340" height = "60"/> <textElement/> <text> <![CDATA["GreekText and CyrillicText"]]> </text> </staticText> <textField> <reportElement x = "0" y = "120" width = "200" height = "60"/> <textElement> <font fontName = "DejaVu Sans" size = "14" isBold = "true"/> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$P{GreekText} + "\n" + $P{CyrillicText}]]> </textFieldExpression> </textField> <staticText> <reportElement x = "210" y = "120" width = "340" height = "60"/> <textElement/> <text><![CDATA["GreekText and CyrillicText"]]></text> </staticText> <textField> <reportElement x = "0" y = "190" width = "200" height = "60"/> <textElement> <font fontName = "DejaVu Sans" size = "14" isItalic = "true" isUnderline = "true"/> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$P{GreekText} + "\n" + $P{CyrillicText}]]> </textFieldExpression> </textField> <staticText> <reportElement x = "210" y = "190" width = "340" height = "60"/> <textElement/> <text><![CDATA["GreekText and CyrillicText"]]></text> </staticText> <textField> <reportElement x = "0" y = "260" width = "200" height = "60"/> <textElement> <font fontName = "DejaVu Sans" size = "14" isBold = "true" isItalic = "true" isUnderline = "true"/> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$P{GreekText} + "\n" + $P{CyrillicText}]]> </textFieldExpression> </textField> <staticText> <reportElement x = "210" y = "260" width = "340" height = "60"/> <textElement/> <text><![CDATA["GreekText and CyrillicText"]]></text> </staticText> <textField> <reportElement x = "0" y = "330" width = "200" height = "60"/> <textElement textAlignment = "Right"> <font fontName="DejaVu Sans" size = "22"/> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$P{ArabicText}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "210" y = "330" width = "340" height = "60"/>
<textElement textAlignment = "Right">
<font fontName = "DejaVu Sans" size = "22"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{HebrewText}]]>
</textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
上記のファイルでは、UTF-8エンコーディングの存在を確認できます。また、ローカライズされたUnicodeテキストはドキュメントパラメータに保存されます。
レポートに入力して生成するJavaコードは次のとおりです。このファイルを保存しましょうJasperUnicodeReportFill.java C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspointディレクトリに移動します。
package com.tutorialspoint;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
public class JasperUnicodeReportFill {
public static void main(String[] args) {
String sourceFileName ="C://tools/jasperreports-5.0.1/test/" +
"jasper_report_template.jasper";
try {
JasperFillManager.fillReportToFile(sourceFileName, null,
new JREmptyDataSource());
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
ここでは、レポートに入力するときにJREmptyDataSourceのインスタンスを使用して、1つのレコードを含むデータソースをシミュレートしますが、この1つのレコードのすべてのフィールドはnullです。
レポートの生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行します。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から選択され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview the report
stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperUnicodeReportFill (viewFullReportがデフォルトのターゲットです)次のように-
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperUnicodeReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defaulting t
[javac] Compiling 1 source file to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperUnicodeReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 4 minutes 1 second
上記のコンパイルの結果、以下の画面に示すようにJasperViewerウィンドウが開きます-
ここでは、表示されているテキストがさまざまな言語であることがわかります。また、言語が同じページにグループ化され、同じテキスト要素に混在していることもわかります。
JasperReportsには、レポートテンプレートのテキストプロパティを制御するのに役立つ<style>機能があります。この要素は、レポートレベルで宣言されたスタイル設定のコレクションです。前景色、背景色、フォントが太字、斜体、通常のいずれであるか、フォントサイズ、フォントの境界線、その他の多くの属性などのプロパティは、<style>要素によって制御されます。スタイルは、他のスタイルを拡張したり、親スタイルのプロパティを追加またはオーバーライドしたりすることもできます。
スタイルのプロパティ
<style>要素には多くの属性があります。最も一般的に使用されるもののいくつかを以下の表に示します-
S.NO | 属性と説明 |
---|---|
1 | name 必須です。レポート全体で対応するレポートスタイルを参照するため、一意である必要があります。 |
2 | isDefault このスタイルがドキュメントのデフォルトスタイルであるかどうかを示します。 |
3 | style 親スタイルへの参照です。 |
4 | mode 要素の透明度を指定します。可能な値は不透明と透明です。 |
5 | forecolor オブジェクトの前景色です。 |
6 | backcolor オブジェクトの背景色です。 |
7 | fill オブジェクトの塗りつぶしに使用される塗りつぶしパターンを決定します。現時点では、許可される単一の値はSolidです。 |
6 | radius 長方形のコーナー円弧の半径を指定します。 |
7 | scaleImage 画像のみの縮尺を指定します。可能な値:Clip、FillFrame、RetainShape、RealHeight、およびRealSize。 |
8 | hAlign 水平方向の配置を指定します。可能な値:Left、Center、Right、およびJustified。 |
9 | vAlign 垂直方向の配置を指定します。可能な値:Top、Middle、およびBottom。 |
10 | rotation 要素の回転を指定します。可能な値:None、Left、Right、およびUpsideDown。 |
11 | lineSpacing テキストの行間の行間隔を指定します。可能な値:Single、1_1_2、Double。 |
12 | markup スタイル付きテキストのマークアップスタイルを指定します。 |
13 | fontName フォント名を指定します。 |
14 | fontSize フォントサイズを指定します。 |
15 | isBold フォントスタイルが太字かどうかを示します。 |
16 | isItalic フォントスタイルがイタリックかどうかを示します。 |
17 | isUnderline フォントスタイルに下線が引かれているかどうかを示します。 |
18 | isStrikeThrough フォントスタイルが取り消し線であるかどうかを示します。 |
19 | pdfFontName 関連するPDFフォント名を指定します。 |
20 | pdfEncoding PDF出力形式の文字エンコードを指定します。 |
22 | isPdfEmbedded PDFフォントが埋め込まれているかどうかを示します。 |
23 | pattern フォーマットされたテキストのフォーマットパターンを指定します。 |
24 | isBlankWhenNull 式がnullと評価された場合に、空の文字列(空白)を表示する必要があるかどうかを示します。 |
条件付きスタイル
状況によっては、特定の条件が満たされた場合にのみスタイルを適用する必要があります(たとえば、レポートの詳細セクションで隣接する行の色を変更する場合など)。これは、条件付きスタイルを使用して実現できます。
条件付きスタイルには2つの要素があります-
- ブール条件式
- スタイル
このスタイルは、条件がtrueと評価された場合にのみ使用されます。
レポート要素へのスタイルの適用
どのタイプのレポート要素でも、style属性を使用してレポートスタイル定義を参照できます。したがって、現在の要素に適用可能な、スタイル定義によって宣言されたすべてのスタイルプロパティが継承されます。継承された値を上書きするには、レポート要素レベルで指定されたスタイルプロパティを使用できます。
スタイルテンプレート
共通の場所でスタイルを定義することにより、共通の外観を持つ一連のレポートを作成できます。この一般的なスタイルのテンプレートは、レポートテンプレートから参照できます。スタイルテンプレートは、1つ以上のスタイル定義を含むXMLファイルです。慣例で使用されるスタイルテンプレートファイル*.jrtx 拡張機能ですが、これは必須ではありません。
スタイルテンプレートには次の要素が含まれています-
<jasperTemplate> -これはスタイルテンプレートファイルのルート要素です。
<template> -この要素は、他のテンプレートファイルへの参照を含めるために使用されます。この要素の内容は、参照されたテンプレートファイルの場所として解釈されます。
<style> −この要素は、スタイルテンプレートのスタイルに条件付きスタイルを含めることができないことを除いて、レポートデザインテンプレート(JRXMLファイル)の同じ名前の要素と同じです。この制限は、条件付きスタイルにはレポート式が含まれ、式は単一のレポート定義のコンテキストでのみ解釈できるという事実によって引き起こされます。
スタイルテンプレートへの参照は、<template>要素としてJRXMLレポートに含まれています。スタイルテンプレートはレポートの入力時に読み込まれ、すべてのテンプレートが読み込まれると、スタイル名の参照が解決されます。スタイルテンプレートをロードし、スタイル名をスタイルに解決すると、スタイルテンプレートのツリー/グラフが作成されます。ツリーの最上部は、レポートで定義されたスタイルのセットです。このツリーでは、スタイル名の参照は、深さ優先走査の名前と一致する最後のスタイルに解決されます。
例
条件付きスタイルとスタイルテンプレートを試してみましょう。<を追加しましょうstyle>要素 alternateStyle既存のレポートテンプレート(チャプターレポートデザイン)に追加します。条件に応じて、フォントの色が青に変わります。スタイルテンプレートも含まれています"styles.jrtx"。改訂されたレポートテンプレート(jasper_report_template.jrxml)は次のとおりです。C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します-
<?xml version = "1.0"?>
<!DOCTYPE jasperReport PUBLIC
"//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" pageWidth = "595"
pageHeight = "842" columnWidth = "515"
leftMargin = "40" rightMargin = "40" topMargin = "50" bottomMargin = "50">
<template>"styles.jrtx"</template>
<style name = "alternateStyle" fontName = "Arial" forecolor = "red">
<conditionalStyle>
<conditionExpression>
<![CDATA[new Boolean($V{countNumber}.intValue() % 2 == 0)]]> </conditionExpression> <style forecolor = "blue" isBold = "true"/> </conditionalStyle> </style> <parameter name = "ReportTitle" class = "java.lang.String"/> <parameter name = "Author" class = "java.lang.String"/> <queryString> <![CDATA[]]> </queryString> <field name = "country" class = "java.lang.String"> <fieldDescription><![CDATA[country]]></fieldDescription> </field> <field name = "name" class = "java.lang.String"> <fieldDescription><![CDATA[name]]></fieldDescription> </field> <variable name = "countNumber" class = "java.lang.Integer" calculation = "Count"> <variableExpression><![CDATA[Boolean.TRUE]]></variableExpression> </variable> <title> <band height = "70"> <line> <reportElement x = "0" y = "0" width = "515" height = "1"/> </line> <textField isBlankWhenNull = "true" bookmarkLevel = "1"> <reportElement x = "0" y = "10" width = "515" height = "30"/> <textElement textAlignment = "Center"> <font size = "22"/> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$P{ReportTitle}]]>
</textFieldExpression>
<anchorNameExpression><![CDATA["Title"]]></anchorNameExpression>
</textField>
<textField isBlankWhenNull = "true">
<reportElement x = "0" y = "40" width = "515" height = "20"/>
<textElement textAlignment = "Center">
<font size = "10"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{Author}]]> </textFieldExpression> </textField> </band> </title> <columnHeader> <band height = "23"> <staticText> <reportElement mode = "Opaque" x = "0" y = "3" width = "535" height = "15" backcolor = "#70A9A9" /> <box> <bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" /> </box> <textElement /> <text> <![CDATA[]]> </text> </staticText> <staticText> <reportElement x = "414" y = "3" width = "121" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font isBold = "true" /> </textElement> <text><![CDATA[Country]]></text> </staticText> <staticText> <reportElement x = "0" y = "3" width = "136" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font isBold = "true" /> </textElement> <text><![CDATA[Name]]></text> </staticText> </band> </columnHeader> <detail> <band height = "16"> <staticText> <reportElement mode = "Opaque" x = "0" y = "0" width = "535" height = "14" backcolor = "#E5ECF9" /> <box> <bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" /> </box> <textElement /> <text> <![CDATA[]]> </text> </staticText> <textField> <reportElement style = "alternateStyle" x = "414" y = "0" width = "121" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle"> <font size = "9" /> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$F{country}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "0" y = "0" width = "136" height = "15"
style = "Strong"/>
<textElement textAlignment = "Center" verticalAlignment = "Middle" />
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
スタイルテンプレートの内容 styles.jrtx以下の通り。C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します。
<?xml version = "1.0"?>
<!DOCTYPE jasperTemplate PUBLIC "-//JasperReports//DTD Template//EN"
"http://jasperreports.sourceforge.net/dtds/jaspertemplate.dtd">
<jasperTemplate>
<style name = "Strong" isBold = "true" pdfFontName = "Helvetica-Bold"
backcolor = "lightGray forecolor = "green"/>
</jasperTemplate>
レポート入力のJavaコードは変更されていません。ファイルの内容C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource = new
JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
/**
* Passing ReportTitle and Author as parameters
*/
parameters.put("ReportTitle", "List of Contacts");
parameters.put("Author", "Prepared By Manisha");
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
POJOファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java 以下のとおりです-
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
ファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
レポートの生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行します。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から取得され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview the
report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReportがデフォルトのターゲットです)as −
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28: warning:
'includeantruntime' was not set, defaulting to build.sysclasspath=last;
set to false for repeatable builds
[javac] Compiling 3 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See
http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
上記のコンパイルの結果、以下の画面に示すようにJasperViewerウィンドウが開きます-
ここでは、フォントの色が偶数カウント(列の国)で青に変更されていることがわかります。列名で、フォントの色が緑に変更されます(このスタイルはスタイルテンプレートから参照されます)。
前の章で見たように、レポートに表示されるデータは通常、レポートパラメータとレポートフィールドからフェッチされます。このデータは、レポート変数とその式を使用して処理できます。レポート式や変数を使用して複雑な機能を簡単に実現できない場合があります。この例としては、複雑な文字列操作、マップの作成、メモリ内のオブジェクトのリスト、サードパーティのJavaAPIを使用した日付の操作などがあります。このような状況では、JasperReportsはこれを行うためのシンプルで強力な手段を提供しますScriptlets。
スクリプトレットは、レポートイベントが発生するたびに実行されるJavaコードのシーケンスです。レポート変数の値は、スクリプトレットを通じて影響を受ける可能性があります。
スクリプトレット宣言
スクリプトレットは2つの方法で宣言できます-
<を使用するscriptlet>要素。この要素には、name属性とclass属性があります。クラス属性が延びている、クラスの名前を指定する必要がありJRAbstractScriptletのクラスを。クラスは、レポートの入力時にクラスパスで使用可能である必要があり、エンジンがオンザフライでインスタンス化できるように、空のコンストラクターが必要です。
属性の使用 scriptletClass 要素の<jasperReport>、レポートテンプレート(JRXML)内。この属性をスクリプトレットの完全修飾名(パッケージ名全体を含む)で設定することにより、スクリプトレットを使用することを示します。この属性で作成されたスクリプトレットインスタンスは、スクリプトレットのリストの最初のスクリプトレットのように機能し、事前定義された名前REPORTを持ちます。
スクリプトレットクラス
スクリプトレットはJavaクラスであり、次のクラスのいずれかを拡張する必要があります-
net.sf.jasperreports.engine.JRAbstractScriptlet−このクラスには、すべての実装でオーバーライドする必要のあるいくつかの抽象メソッドが含まれています。これらのメソッドは、適切なタイミングでJasperReportsによって自動的に呼び出されます。開発者は、すべての抽象メソッドを実装する必要があります。
net.sf.jasperreports.engine.JRDefaultScriptlet−このクラスには、JRAbstractScriptletのすべてのメソッドのデフォルトの空の実装が含まれています。開発者は、自分のプロジェクトに必要なメソッドを実装するだけで済みます。
次の表に、上記のクラスのメソッドを示します。これらのメソッドは、レポートの入力フェーズ中の適切なタイミングでレポートエンジンによって呼び出されます。
S.NO | 方法と説明 |
---|---|
1 | public void beforeReportInit() レポートの初期化の前に呼び出されます。 |
2 | public void afterReportInit() レポートの初期化後に呼び出されます。 |
3 | public void beforePageInit() 各ページが初期化される前に呼び出されます。 |
4 | public void afterPageInit() 各ページが初期化された後に呼び出されます。 |
5 | public void beforeColumnInit() 各列が初期化される前に呼び出されます。 |
6 | public void afterColumnInit() 各列が初期化された後に呼び出されます。 |
7 | public void beforeGroupInit(String groupName) パラメータで指定されたグループが初期化される前に呼び出されます。 |
8 | public void afterGroupInit(String groupName) パラメータで指定されたグループが初期化された後に呼び出されます。 |
9 | public void beforeDetailEval() レポートの詳細セクションの各レコードが評価される前に呼び出されます。 |
10 | public void afterDetailEval() レポートの詳細セクションの各レコードが評価された後に呼び出されます。 |
レポートごとに任意の数のスクリプトレットを指定できます。レポートにスクリプトレットが指定されていない場合でも、エンジンは単一のJRDefaultScriptletインスタンスを作成し、組み込みのREPORT_SCRIPTLETパラメーターに登録します。
スクリプトレットに必要なメソッドを追加できます。レポートは、組み込みパラメーターREPORT_SCRIPTLETを使用してこれらのメソッドを呼び出すことができます。
グローバルスクリプトレット
スクリプトレットを別の方法でレポートに関連付けることができます。つまり、スクリプトレットをグローバルに宣言します。これにより、スクリプトレットは、特定のJasperReportsデプロイメントで入力されるすべてのレポートに適用されます。これは、スクリプトレットを拡張機能としてJasperReportsに追加できるため簡単になります。スクリプトレット拡張ポイントは、net.sf.jasperreports.engine.scriptlets.ScriptletFactoryインターフェイスで表されます。JasperReportsは、実行時に拡張機能を介して利用可能なすべてのスクリプトレットファクトリをロードします。次に、実行中の現在のレポートに適用するスクリプトレットインスタンスのリストを各自に要求します。スクリプトレットインスタンスのリストを要求すると、エンジンは、ファクトリが現在のレポートに実際に適用するスクリプトレットを決定するために使用できるコンテキスト情報を提供します。
レポートガバナー
ガバナーは、レポートを生成しながら、実行時にレポートエンジンが無限ループに入るという問題に取り組むことを可能にするグローバルスクリプトレットの単なる拡張です。ほとんどの場合、無限ループに入る条件は実行時にエンジンに供給される実際のデータに依存するため、無効なレポートテンプレートは設計時に検出できません。レポートガバナーは、特定のレポートが無限ループに入ったかどうかを判断するのに役立ち、それを停止できます。これにより、レポートを実行するマシンのリソースが枯渇するのを防ぎます。
JasperReportsには、指定された最大ページ数または指定されたタイムアウト間隔に基づいてレポートの実行を停止する2つの単純なレポートガバナーがあります。彼らは-
net.sf.jasperreports.governors.MaxPagesGovernor−これは、現在実行中のレポートに適用するかどうかを決定するために2つの構成プロパティを探しているグローバルスクリプトレットです。構成プロパティは次のとおりです。
net.sf.jasperreports.governor.max.pages.enabled=[true|false]
net.sf.jasperreports.governor.max.pages=[integer]
net.sf.jasperreports.governors.TimeoutGovernor−これは、適用するかどうかを決定するために次の2つの構成プロパティを探しているグローバルスクリプトレットでもあります。
構成プロパティは次のとおりです。
net.sf.jasperreports.governor.timeout.enabled=[true|false]
net.sf.jasperreports.governor.timeout=[milliseconds]
両方のガバナーのプロパティは、グローバルに、jasperreports.propertiesファイルで、またはレポートレベルでカスタムレポートプロパティとして設定できます。これは、レポートごとに推定サイズまたはタイムアウト制限が異なる可能性があるため、また、すべてのレポートでガバナーをオンにし、一部のレポートではオフにする、またはその逆の場合があるため、便利です。
例
スクリプトレットクラスを書いてみましょう(MyScriptlet)。ファイルC:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint \ MyScriptlet.javaの内容は次のとおりです-
package com.tutorialspoint;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
public class MyScriptlet extends JRDefaultScriptlet {
public void afterReportInit() throws JRScriptletException{
System.out.println("call afterReportInit()");
// this.setVariableValue("AllCountries", sbuffer.toString());
this.setVariableValue("someVar", new String("This variable value
was modified by the scriptlet."));
}
public String hello() throws JRScriptletException {
return "Hello! I'm the report's scriptlet object.";
}
}
上記のスクリプトレットクラスの詳細は次のとおりです。
でafterReportInitの方法は、我々は変数に値を設定します"someVar" this.setVariableValue( "someVar"、new String( "この変数値はスクリプトレットによって変更されました。"))。
クラスの最後に、呼び出される追加のメソッド 'hello'定義されています。これは、変数を設定するのではなく、実際に値を返すスクリプトレットに追加できるメソッドの例です。
次に、既存のレポートテンプレート(Chapter Report Designs)にスクリプトレットクラス参照を追加します。改訂されたレポートテンプレート(jasper_report_template.jrxml)は次のとおりです。C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します-
<?xml version = "1.0"?>
<!DOCTYPE jasperReport PUBLIC
"//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" pageWidth = "595"
pageHeight = "842" columnWidth = "515"
leftMargin = "40" rightMargin = "40" topMargin = "50" bottomMargin = "50"
scriptletClass = "com.tutorialspoint.MyScriptlet">
<style name = "alternateStyle" fontName = "Arial" forecolor = "red">
<conditionalStyle>
<conditionExpression>
<![CDATA[new Boolean($V{countNumber}.intValue() % 2 == 0)]]> </conditionExpression> <style forecolor = "blue" isBold = "true"/> </conditionalStyle> </style> <parameter name = "ReportTitle" class = "java.lang.String"/> <parameter name = "Author" class = "java.lang.String"/> <queryString> <![CDATA[]]> </queryString> <field name = "country" class = "java.lang.String"> <fieldDescription> <![CDATA[country]]> </fieldDescription> </field> <field name = "name" class = "java.lang.String"> <fieldDescription> <![CDATA[name]]> </fieldDescription> </field> <variable name = "countNumber" class = "java.lang.Integer" calculation = "Count"> <variableExpression>< ![CDATA[Boolean.TRUE]]> </variableExpression> </variable> <variable name = "someVar" class = "java.lang.String"> <initialValueExpression> <![CDATA["This is the initial variable value."]]> </initialValueExpression> </variable> <title> <band height = "100"> <line> <reportElement x = "0" y = "0" width = "515" height = "1"/> </line> <textField isBlankWhenNull = "true" bookmarkLevel = "1"> <reportElement x = "0" y = "10" width = "515" height = "30"/> <textElement textAlignment = "Center"> <font size = "22"/> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$P{ReportTitle}]]>
</textFieldExpression>
<anchorNameExpression>
<![CDATA["Title"]]>
</anchorNameExpression>
</textField>
<textField isBlankWhenNull = "true">
<reportElement x = "0" y = "40" width = "515" height = "20"/>
<textElement textAlignment = "Center">
<font size = "10"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{Author}]]> </textFieldExpression> </textField> <textField isBlankWhenNull = "true"> <reportElement x = "0" y = "50" width = "515" height = "30" forecolor = "#993300"/> <textElement textAlignment = "Center"> <font size = "10"/> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$V{someVar}]]>
</textFieldExpression>
</textField>
</band>
</title>
<columnHeader>
<band height = "23">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "3"
width = "535" height = "15"
backcolor = "#70A9A9" />
<box>
<bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
</box>
<textElement />
<text>
<![CDATA[]]>
</text>
</staticText>
<staticText>
<reportElement x = "414" y = "3" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Country]]></text>
</staticText>
<staticText>
<reportElement x = "0" y = "3" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Name]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height = "16">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "0"
width = "535" height = "14"
backcolor = "#E5ECF9" />
<box>
<bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
</box>
<textElement />
<text>
<![CDATA[]]>
</text>
</staticText>
<textField>
<reportElement style = "alternateStyle" x="414" y = "0"
width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font size = "9" />
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{country}]]> </textFieldExpression> </textField> <textField> <reportElement x = "0" y = "0" width = "136" height = "15" /> <textElement textAlignment = "Center" verticalAlignment = "Middle" /> <textFieldExpression class = "java.lang.String"> <![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
<summary>
<band height = "45">
<textField isStretchWithOverflow = "true">
<reportElement x = "0" y = "10" width = "515" height = "15" />
<textElement textAlignment = "Center"/>
<textFieldExpression class = "java.lang.String">
<![CDATA["There are " + String.valueOf($V{REPORT_COUNT}) + " records on this report."]]> </textFieldExpression> </textField> <textField isStretchWithOverflow = "true"> <reportElement positionType = "Float" x = "0" y = "30" width = "515" height = "15" forecolor = "# 993300" /> <textElement textAlignment = "Center"> <font size = "10"/> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$P{REPORT_SCRIPTLET}.hello()]]>
</textFieldExpression>
</textField>
</band>
</summary>
</jasperReport>
改訂されたレポートテンプレートの詳細を以下に示します-
私たちは、属性にMyScriptletクラスを参照したscriptletClass <jasperReport>要素の。
スクリプトレットは、レポートフィールドとパラメータにアクセスすることはできますが、変更することはできません。ただし、スクリプトレットはレポート変数値を変更できます。これは、setVariableValue()メソッドを呼び出すことで実現できます。このメソッドは、JRAbstractScriptletクラスで定義されています。このクラスは、常にスクリプトレットの親クラスです。ここでは、変数someVarを定義しました。これは、MyScriptletによって変更され、値がこの値になります。この値は、スクリプトレットによって変更されました。
上記のレポートテンプレートには、(スクリプトレットで)新しいメソッドを記述してレポートテンプレートで使用する方法を示すSummaryバンドのメソッド呼び出しがあります。(($P{REPORT_SCRIPTLET}.hello())
レポート入力のJavaコードは変更されていません。ファイルの内容C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource = new
JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
/**
* Passing ReportTitle and Author as parameters
*/
parameters.put("ReportTitle", "List of Contacts");
parameters.put("Author", "Prepared By Manisha");
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
POJOファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java 以下のとおりです-
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
ファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
レポートの生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行します。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から取得され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview
the report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReportがデフォルトのターゲットです)as −
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defaulting to bu
[javac] Compiling 4 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
[java] call afterReportInit()
[java] call afterReportInit()
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 18 minutes 49 seconds
上記のコンパイルの結果、以下の画面に示すようにJasperViewerウィンドウが開きます-
ここでは、MyScriptletクラスから2つのメッセージが表示されています-
- タイトルセクション-この変数値はスクリプトレットによって変更されました
- 一番下-こんにちは!私はレポートのスクリプトレットオブジェクトです。
サブレポートは、JasperReportsの優れた機能の1つです。この機能により、レポートを別のレポートに組み込むことができます。つまり、あるレポートを別のレポートのサブレポートにすることができます。サブレポートは、多くの単純なレポートを作成してマスターレポートにカプセル化できるため、レポートの設計を単純に保つのに役立ちます。サブレポートは、通常のレポートと同じようにコンパイルおよび入力されます。(レポートテンプレートの)内部で何も変更せずに、別のレポートテンプレートに組み込むと、任意のレポートテンプレートをサブレポートとして使用できます。
サブレポートは、通常のレポートテンプレートに似ています。これらは実際にはnet.sf.jasperreports.engine.JasperReportオブジェクトであり、net.sf.jasperreports.engine.design.JasperDesignオブジェクトをコンパイルした後に取得されます。
<サブレポート>要素
<subreport>要素は、サブレポートをマスターレポートに導入するときに使用されます。<subreport> JRXML要素のサブ要素のリストは次のとおりです。
<reportElement>
<parametersMapExpression>-これは、レポートパラメータを含むマップをサブレポートに渡すために使用されます。マップは通常、マスターレポートのパラメーターから取得するか、組み込みのREPORTS_PARAMETERS_MAPパラメーターを使用して親レポートのパラメーターをサブレポートに渡します。この式は常に、キーがパラメーター名であるjava.util.Mapオブジェクトを返す必要があります。
<subreportParameter>-この要素は、パラメーターをサブレポートに渡すために使用されます。必須の属性名があります。
<connectionExpression>-これは、java.sql.Connectionをサブレポートに渡すために使用されます。これは、サブレポートテンプレートがレポートの入力フェーズでデータベース接続を必要とする場合にのみ使用されます。
<dataSourceExpression>-これは、データソースをサブレポートに渡すために使用されます。このデータソースは通常、マスターレポートのパラメーターから取得するか、組み込みのREPORT_DATA_SOURCEパラメーターを使用して親レポートのデータソースをサブレポートに渡します。
要素(connectionExpressionとdataSourceExpression)を<subreport>要素宣言に同時に存在させることはできません。これは、データソースとサブレポートへの接続の両方を提供できないためです。そのうちの1つを決定し、それに固執する必要があります。
<returnValue>-これは、サブレポートの変数の1つの値をマスターレポートの変数の1つに割り当てるために使用されます。このサブ要素には次のような属性があります-
subreportVariable-この属性は、値が返されるサブレポート変数の名前を指定します。
toVariable-この属性は、値がサブレポートの値でコピー/インクリメントされる親レポート変数の名前を指定します。
計算-この属性は、Nothing、Count、DistinctCount、Sum、Average、Lowest、Highest、StandardDeviation、Varianceの値を取ることができます。属性計算のデフォルト値は「なし」です。
インクリメントファクトリクラス-この属性は、インクリメントインスタンスを作成するためのファクトリクラスを指定します。
<subreportExpression>-これは、サブレポート用にコンパイルされたレポートテンプレートの場所を示します。この要素にはclass属性。クラスjava.lang.Stringで、java.io.Fileの、のjava.net.URL、java.io.InputStreamを、net.sf.jasperreports.engine.JasperReport:属性は、これらの値のいずれかを取ることができます。デフォルト値はjava.lang.Stringです。
isUsingCache-これは<subreport>要素の属性です。これはブール値です。trueに設定すると、レポートエンジンは、指定されたソースを使用して、以前にロードされたサブレポートテンプレートオブジェクトを認識しようとします。このキャッシュ機能は、ファイル名、URL、またはクラスパスリソースを表すサブレポートテンプレートソースとしてjava.lang.Stringオブジェクトを返す式を持つサブレポート要素でのみ使用できます。
例
JRDataSourceを使用したサブレポートの作成を示す簡単な例を取り上げましょう。まず、2つの新しいレポートテンプレートを作成しましょう。1つはサブレポートで、もう1つはマスターレポートです。サブレポート(address_report_template.jrxml)テンプレートの内容は次のとおりです。C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します。
<?xml version = "1.0" encoding = "UTF-8"?>
<jasperReport
xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "address_report_template" pageWidth = "175" pageHeight = "842"
columnWidth = "175" leftMargin = "0" rightMargin = "0"
topMargin = "0" bottomMargin = "0">
<field name = "city" class = "java.lang.String"/>
<field name = "street" class = "java.lang.String"/>
<background>
<band splitType = "Stretch"/>
</background>
<title>
<band height = "20" splitType = "Stretch">
<staticText>
<reportElement x = "0" y = "0" width = "100" height = "20"/>
<textElement>
<font size = "14" isBold = "true"/>
</textElement>
<text><![CDATA[Addresses]]></text>
</staticText>
</band>
</title>
<pageHeader>
<band height = "12" splitType = "Stretch"/>
</pageHeader>
<columnHeader>
<band height = "12" splitType = "Stretch"/>
</columnHeader>
<detail>
<band height = "27" splitType = "Stretch">
<textField>
<reportElement x = "0" y = "0" width = "120" height = "20"/>
<textElement>
<font size = "12" isBold = "true"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{city}+" Address:"]]> </textFieldExpression> </textField> <textField isStretchWithOverflow = "true"> <reportElement x = "120" y = "0" width = "435" height = "20"/> <textElement> <font size = "12"/> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$F{street}]]>
</textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height = "8" splitType = "Stretch"/>
</columnFooter>
<pageFooter>
<band height = "11" splitType = "Stretch"/>
</pageFooter>
<summary>
<band height = "9" splitType = "Stretch"/>
</summary>
</jasperReport>
データソースを使用するため、対応するPOJOファイルを作成する必要があります SubReportBean.java 以下に示すように。ディレクトリC:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspointに保存します-
package com.tutorialspoint;
public class SubReportBean {
private String city;
private String street;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
ここでは、2つのフィールド「city」と「street」を宣言し、それぞれのgetterメソッドとsetterメソッドを定義しています。
それでは、既存のものを更新しましょう DataBeanファイル。java.util.Listである新しいフィールドsubReportBeanListを追加します。このフィールドには、SubReportBeanオブジェクトのリストが保持されます。DataBeanファイルの内容は以下のとおりです。ディレクトリC:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspointに保存します。
package com.tutorialspoint;
import java.util.List;
public class DataBean {
private String name;
private String country;
private List<SubReportBean> subReportBeanList;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public List<SubReportBean> getSubReportBeanList() {
return subReportBeanList;
}
public void setSubReportBeanList(List<SubReportBean> subReportBeanList) {
this.subReportBeanList = subReportBeanList;
}
}
ファイルC:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint \を更新しましょう。DataBeanList.java。このファイルの内容は次のとおりです。
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
// Create sub report data
SubReportBean subBean1 = new SubReportBean();
subBean1.setCity("Mumbai");
subBean1.setStreet("M.G.Road");
SubReportBean subBean2 = new SubReportBean();
subBean2.setCity("New York");
subBean2.setStreet("Park Street");
SubReportBean subBean3 = new SubReportBean();
subBean3.setCity("San Fransisco");
subBean3.setStreet("King Street");
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
// Create master report data
dataBeanList.add(produce("Manisha", "India",
Arrays.asList(subBean1)));
dataBeanList.add(produce("Dennis Ritchie", "USA",
Arrays.asList(subBean2)));
dataBeanList.add(produce("V.Anand", "India",
Arrays.asList(subBean1)));
dataBeanList.add(produce("Shrinath", "California",
Arrays.asList(subBean3)));
return dataBeanList;
}
/*
* This method returns a DataBean object,
* with name, country and sub report
* bean data set in it.
*/
private DataBean produce(String name, String country,
List<SubReportBean> subBean) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
dataBean.setSubReportBeanList(subBean);
return dataBean;
}
}
上記のファイルのメソッドproduce()で、SubReportBeanのリストを設定しています。
それでは、新しいマスターレポートテンプレート(jasper_report_template.jrxml)を作成しましょう。このファイルをディレクトリに保存しますC:\tools\jasperreports-5.0.1\test。このファイルの内容は以下のとおりです。
<?xml version = "1.0" encoding = "UTF-8"?>
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" language = "groovy" pageWidth = "595"
pageHeight = "842" columnWidth ="555" leftMargin = "20" rightMargin = "20"
topMargin = "20" bottomMargin = "20">
<parameter name = "SUBREPORT_DIR" class = "java.lang.String" isForPrompting = "false">
<defaultValueExpression>
<![CDATA["C:\\tools\\jasperreports-5.0.1\\test\\"]]>
</defaultValueExpression>
</parameter>
<field name = "country" class = "java.lang.String"/>
<field name = "name" class = "java.lang.String"/>
<field name = "subReportBeanList" class = "java.util.List"/>
<background>
<band splitType = "Stretch"/>
</background>
<title>
<band height = "35" splitType = "Stretch">
<staticText>
<reportElement x = "0" y = "0" width = "204" height = "34"/>
<textElement>
<font size = "26" isBold = "true"/>
</textElement>
<text><![CDATA[Contact Report]]></text>
</staticText>
</band>
</title>
<pageHeader>
<band height = "17" splitType = "Stretch"/>
</pageHeader>
<columnHeader>
<band height = "21" splitType = "Stretch"/>
</columnHeader>
<detail>
<band height = "112" splitType = "Stretch">
<staticText>
<reportElement x = "0" y = "0" width = "100" height = "20"/>
<textElement>
<font size = "12" isBold = "true"/>
</textElement>
<text><![CDATA[Name:]]></text>
</staticText>
<staticText>
<reportElement x = "0" y = "20" width = "100" height = "20"/>
<textElement>
<font size = "12" isBold = "true"/>
</textElement>
<text><![CDATA[Country:]]></text>
</staticText>
<textField>
<reportElement x = "104" y = "0" width = "277" height = "20"/>
<textElement>
<font size = "12"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{name}]]> </textFieldExpression> </textField> <textField> <reportElement x = "104" y = "20" width = "277" height = "20"/> <textElement> <font size = "12"/> </textElement> <textFieldExpression class = "java.lang.String"> <![CDATA[$F{country}]]>
</textFieldExpression>
</textField>
<subreport>
<reportElement positionType = "Float" x = "335" y = "25" width = "175"
height = "20" isRemoveLineWhenBlank = "true" backcolor = "#99ccff"/>
<dataSourceExpression>
new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource
($F{subReportBeanList}) </dataSourceExpression> <subreportExpression class = "java.lang.String"> <![CDATA[$P{SUBREPORT_DIR} + "address_report_template.jasper"]]>
</subreportExpression>
</subreport>
<line>
<reportElement x = "0" y = "50" width = "550" height = "1"/>
</line>
</band>
</detail>
<columnFooter>
<band height = "19" splitType = "Stretch"/>
</columnFooter>
<pageFooter>
<band height = "18" splitType = "Stretch"/>
</pageFooter>
<summary>
<band height = "14" splitType = "Stretch"/>
</summary>
</jasperReport>
上記のテンプレートでは、サブレポートのパスを定義する新しいパラメータ「SUBREPORT_DIR」を定義しました。DataBeanファイルのプロパティに対応するjava.util.ListタイプのフィールドsubReportBeanListを定義しました。要素<subreport>には、サブ要素<dataSourceExpression>があります。リストsubReportBeanListをJRBeanCollectionDataSourceのインスタンスに配置しました。サブ要素<subreportExpression />で、サブレポート名(AddressReport.jasper)を指定しました。
それでは、新しいクラスを書いてみましょう CreateReportレポートテンプレートをコンパイルして実行します。ファイルの内容C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\CreateReport.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class CreateReport {
public static void main(String[] args) {
String masterReportFileName = "C://tools/jasperreports-5.0.1/test"
+ "/jasper_report_template.jrxml";
String subReportFileName = "C://tools/jasperreports-5.0.1/test"
+ "/AddressReport.jrxml";
String destFileName = "C://tools/jasperreports-5.0.1/test"
+ "/jasper_report_template.JRprint";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource = new
JRBeanCollectionDataSource(dataList);
try {
/* Compile the master and sub report */
JasperReport jasperMasterReport = JasperCompileManager
.compileReport(masterReportFileName);
JasperReport jasperSubReport = JasperCompileManager
.compileReport(subReportFileName);
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("subreportParameter", jasperSubReport);
JasperFillManager.fillReportToFile(jasperMasterReport,
destFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
System.out.println("Done filling!!! ...");
}
}
ここでは、マスターレポートテンプレートとサブレポートテンプレートの両方をコンパイルし、レポート入力用にマスターレポート(.jasper)ファイルを渡していることがわかります。
レポートの生成
これですべてのファイルの準備ができました。通常のANTビルドプロセスを使用してファイルをコンパイルして実行しましょう。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から取得され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview the
report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.CreateReport (viewFullReportがデフォルトのターゲットです)次のように-
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defaulting to
[javac] Compiling 7 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig
for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\
jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.CreateReport
[java] Compiling Report Design ...
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[java] log4j:WARN Please initialize the log4j system properly.
[java] Done filling!!! ...
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 72 minutes 13 seconds
上記のコンパイルの結果、以下の画面に示すようにJasperViewerウィンドウが開きます-
ここでは、属性Name、Country、およびAddressが表示されていることがわかります。
以前の人々は、チャートデータを収集し、レポートテンプレートの画像要素を使用してチャートをレンダリングするためにスクリプトレットに依存する必要がありました。JasperReportsは、新しいグラフコンポーネントを使用したグラフのサポートが組み込まれているため、簡単になりました。
新しいグラフコンポーネントを使用すると、ユーザーは視覚的な設定のみを適用し、グラフデータセットの構築に役立つ式を定義する必要があります。JasperReportsは、基盤となるグラフ作成ライブラリとしてJFreeChartを使用します。新しいチャートコンポーネントを構成する場合、次の3つのコンポーネントが関係します-
全体的なチャートコンポーネント。
グラフデータセット(グラフデータ関連の設定をグループ化します)。
チャートプロット(チャートアイテムのレンダリング方法に関連する視覚的な設定をグループ化します)。
JasperReportsは現在、次のタイプのグラフをサポートしています:円、円3D、棒、棒3D、XY棒、積み上げ棒、積み上げ棒3D、線、XY線、面積、XY面積、積み上げ面積、散布図、バブル、時系列、高-Low-Open-Close、ローソク足、多軸、メーター、温度計、およびガント。
チャートのプロパティ
グラフは通常のレポート要素であるため、プロパティの一部を他のすべてのレポート要素と共有します。<と呼ばれるJRXML要素がありますchart>、すべてのタイプのチャートを作成するために使用されます。この要素は、すべてのタイプのチャートに適用される特別なチャート固有の設定をグループ化します。
チャートのサブ要素
<chart>要素のサブ要素は次のとおりです。
<reportElement> −これらは、レポートテンプレートセクションに配置する静的テキスト、テキストフィールド、画像、線、長方形などの表示可能なオブジェクトです。
<Box> −この要素は、両側でカスタマイズ可能な境界線でグラフを囲むために使用されます。
<chartTitle>−この要素は、チャートのタイトルを配置するために使用されます。位置属性は、レポートのグラフのタイトル位置を決定します。この要素には属性があります-Position(値はTop、Bottom、Left、Rightの場合があります。Deafult値はTopです)、color。<chartTitle>には、サブ要素としてfontとtitleExpressionがあります。
<chartSubtitle>−この要素は、チャートのサブタイトルを配置するために使用されます。この要素には属性があります-color。<chartSubtitle>には、サブ要素としてfontとsubtitleExpressionがあります。
<chartLegend>−この要素は、この要素を使用して、フォント関連のプロパティ、およびグラフの凡例のテキストの色と背景色を制御できます。この要素には属性があります-textColor そして backgroundColor。
<anchorNameExpression> −この要素は、アンカーのターゲットを作成します。
<hyperlinkReferenceExpression> −この要素には、外部リソース(通常はURL)の名前を示すレポート式が含まれます。
<hyperlinkAnchorExpression> −ハイパーリンクは外部リソースのアンカーを指します。
<hyperlinkPageExpression> −ハイパーリンクは現在のレポートのページを指します。
<hyperlinkTooltipExpression>−この要素は、ハイパーリンクのツールチップを制御します。式のタイプはjava.lang.Stringである必要があります。
<hyperlinkParameter> −この要素が存在する場合、パラメーター値に応じて最終的なハイパーリンクが生成されます。
チャート属性
すべてのチャートタイプで使用できる<chart>要素の属性は次のとおりです。
isShowLegend−この属性は、チャートの凡例をレポートに表示するかどうかを決定するために使用されます。値はtrueまたはfalseの場合があります。デフォルト値はtrueです。
evaluationTime−チャートの式がいつ評価されるかを決定します。値は、Now、Report、Page、Column、Group、Bandのようになります。デフォルト値はNowです。
evaluationGroup−この属性は、チャートの式を評価するために使用されるグループの名前を決定します。この属性の値は、グループの名前と一致する必要があります。チャートの評価グループとして使用します。
hyperlinkType−この属性は、任意のテキスト値を保持できます。デフォルト値はNoneです。つまり、特別なハイパーリンク式が存在する場合でも、テキストフィールドも画像もハイパーリンクを表しません。
hyperlinkTarget−この属性は、ビューアーでクリックされたときの指定されたリンクの動作をカスタマイズするのに役立ちます。値はSelfまたはBlankの場合があります。デフォルト値はSelfです。
bookmarkLevel−この属性を正の整数に設定すると、PDFにエクスポートされたレポートにブックマークが生成されます。デフォルト値は0です。
customizerClass−これは、チャートをカスタマイズするために使用できるクラス(オプション)の名前です。この要素の値は、カスタマイザークラスの名前を含む文字列である必要があります。
チャートのカスタマイズ
上記のように、JasperReportsは基礎となるチャートライブラリとしてJFreeChartを使用します。JFreeChartには、JasperReportsで直接サポートされていない機能が含まれています。<chart>要素のcustomizerClass属性を介してカスタマイザークラスを提供することにより、これらの機能を利用できます。カスタマイザークラスは何でもありませんが、net.sf.jasperreports.engine.JRChartCustomizerインターフェースの実装です。このインターフェースを実装する最も簡単な方法は、net.sf.jasperreports.engine.JRAbstractChartCustomizerクラスを拡張して、パラメーター、フィールド、および変数にアクセスし、レポートデータに基づいてより柔軟なグラフをカスタマイズすることです。
チャートデータセット
すべてのグラフタイプに共通するプロパティの1つは、<dataset>要素。チャートデータセットは、レポートデータのマッピングと実行時のチャートデータの取得に役立ちます。各チャートタイプには、チャートの式を定義するためのさまざまなサブ要素が含まれています。これらの式は、グラフの生成に使用されるデータを定義します。これらのすべてのサブ要素には、グラフの式が評価されてリセットされるタイミングを定義する<dataset>要素が含まれています。
JasperReportsでは、さまざまな種類のグラフデータセットを使用できます。これは、各種類のグラフが特定のデータセット(円、カテゴリ、XY、時系列、期間、XYZ、高低)で機能するためです。これらの各データセットタイプは、グラフデータセットを定義するnet.sf.jasperreports.engine.JRChartDatasetインターフェイスを実装します。すべてのチャートデータセットは、同じ方法で初期化およびインクリメントされます。ただし、マップするデータのタイプまたはデータ系列のみが異なります。
データセットのプロパティ
以下の表は、要素<dataset> −の属性をまとめたものです。
属性 | 説明 | 値 |
---|---|---|
resetType | この属性は、チャート式の値をいつリセットするかを決定します。 | なし、レポート、ページ、列、グループ。デフォルト値はReport。 |
resetGroup | この属性は、チャート式の値がリセットされるグループの名前を決定します。 | この属性の値は、JRXMLレポートテンプレートで宣言されているグループの名前と一致する必要があります。 |
増分タイプ | この属性は、チャート式の値をいつ再計算するかを決定します。 | なし、レポート、ページ、列、グループ。デフォルト値は"None"。 |
増分グループ | この属性は、チャート式が再計算されるグループの名前を決定します。 | この属性の値は、JRXMLレポートテンプレートで宣言されているグループの名前と一致する必要があります。 |
次の表は、要素<dataset> −のサブ要素をまとめたものです。
サブ要素 | 説明 |
---|---|
<incrementWhenExpression> | グラフデータセットの増分方法は、このサブ要素を使用して不要なデータを除外することでカスタマイズできます。 |
<datasetRun> | これには、レポートサブデータセットをインスタンス化するために必要な情報が含まれています。 |
データセットタイプ
特定のデータセットタイプを以下に説明します-
パイデータセット
円グラフのデータセットは、次の式で特徴付けられます-
<keyExpression>-円グラフのスライスを構成するカテゴリを表します。この式は、任意のjava.lang.Comparableオブジェクトを返すことができます。
<valueExpression>-データセット内の各カテゴリ/キーに対応する値を生成します。値は常にjava.lang.Numberオブジェクトです。
<labelExpression>-この式が欠落している場合、グラフには円グラフの各スライスのデフォルトのラベルが表示されます。java.lang.String値を返すこの式を使用して、円グラフのアイテムラベルをカスタマイズします。
<sectionHyperlink>-円のセクションに関連付けられたハイパーリンクを設定します。
カテゴリデータセット
カテゴリデータセットは、-を含む<categorySeries>要素によって特徴付けられます。
<seriesExpression>-シリーズの名前を示します。この式は、任意のjava.lang.Comparableオブジェクトを返すことができます。
<categoryExpression>-シリーズ式で指定されたシリーズ内の各値のカテゴリ名を返します。カテゴリはjava.lang.Comparableオブジェクトです。
<valueExpression>-データセットの各カテゴリに対応する値を生成します。値は常にjava.lang.Numberオブジェクトです。
<labelExpression>-この式が欠落している場合、チャートにはチャート内の各アイテムのデフォルトのラベルが表示されます。java.lang.String値を返すこの式を使用して、グラフのアイテムラベルをカスタマイズします。
<itemHyperlink>-チャートアイテムに関連付けられたハイパーリンクを設定します。
XYデータセット
XYデータセットは、-を含む<xySeries>要素によって特徴付けられます。
<seriesExpression>-シリーズの名前を示します。この式は、任意のjava.lang.Comparableオブジェクトを返すことができます。
<xValueExpression>-現在のデータ系列に追加される(x、y)ペアからのX値を表すjava.lang.Number値を返します。
<yValueExpression>-現在のデータ系列に追加される(x、y)ペアからのY値を表すjava.lang.Number値を返します。
<labelExpression>-この式が欠落している場合、チャートにはチャート内の各アイテムのデフォルトのラベルが表示されます。java.lang.String値を返すこの式を使用して、グラフのアイテムラベルをカスタマイズします。
<itemHyperlink>-チャートアイテムに関連付けられたハイパーリンクを設定します。
XYZデータセット
XYZデータセットは、-を含む<xyzSeries>要素によって特徴付けられます。
<seriesExpression>-シリーズの名前を示します。この式は、任意のjava.lang.Comparableオブジェクトを返すことができます。
<xValueExpression>-現在のデータ系列に追加される(x、y、z)項目からのX値を表すjava.lang.Number値を返します。
<yValueExpression>-現在のデータ系列に追加される(x、y、z)項目からのY値を表すjava.lang.Number値を返します。
<zValueExpression>-現在のデータ系列に追加される(x、y、z)項目からのZ値を表すjava.lang.Number値を返します。
<labelExpression>-この式が欠落している場合、チャートにはチャート内の各アイテムのデフォルトのラベルが表示されます。java.lang.String値を返すこの式を使用して、グラフのアイテムラベルをカスタマイズします。
<itemHyperlink>-チャートアイテムに関連付けられたハイパーリンクを設定します。
時系列データセット
時系列データセットは、timePeriod属性と<timeSeries>要素によって特徴付けられます。timePeriod属性は、データセット内のデータ系列のタイプを指定します。時系列には、日、月、年、またはその他の事前定義された期間に関連付けられた数値を含めることができます。可能な値は次のとおりです。年、四半期、月、週、日-これはデフォルト値、時、分、秒、ミリ秒です。
<timeSeries>要素には-が含まれます
<seriesExpression>-シリーズの名前を示します。この式は、任意のjava.lang.Comparableオブジェクトを返すことができます。
<timePeriodExpression>-上記のtimePeriod属性に設定された値に応じて、エンジンが対応する期間を抽出するjava.util.Date値を返します。
<valueExpression>-データセットの現在の系列をインクリメントするときに、対応する期間値に関連付けるjava.lang.Number値を返します。
<labelExpression>-この式が欠落している場合、チャートにはチャート内の各アイテムのデフォルトのラベルが表示されます。java.lang.String値を返すこの式を使用して、グラフのアイテムラベルをカスタマイズします。
<itemHyperlink>-チャートアイテムに関連付けられたハイパーリンクを設定します。
期間データセット
期間データセットは、-を含む<timePeriodSeries>要素によって特徴付けられます。
<seriesExpression>-シリーズの名前を示します。この式は、任意のjava.lang.Comparableオブジェクトを返すことができます。
<startDateExpression>-数値が期間系列に追加されるときに関連付けられる日付間隔の開始を指定します。
<endDateExpression>-数値が期間シリーズに追加されたときに関連付けられる日付間隔の終了を指定します。
<valueExpression>-開始日と終了日の式で指定された現在の日付間隔に関連付けるjava.lang.Number値を返します。
<labelExpression>-この式が欠落している場合、チャートにはチャート内の各アイテムのデフォルトのラベルが表示されます。java.lang.String値を返すこの式を使用して、グラフのアイテムラベルをカスタマイズします。
<itemHyperlink>-チャートアイテムに関連付けられたハイパーリンクを設定します。
高低データセット
高低データセットは、次の式によって特徴付けられます-
<seriesExpression>-現在、高値-安値またはローソク足チャート内でサポートされているシリーズは1つだけです。ただし、この単一のシリーズは、この式によって返されるjava.lang.Comparable値で識別される必要があり、チャートの凡例でシリーズ名としても使用される必要があります。
<dateExpression>-現在の(高、低、始値、終値、出来高)アイテムが参照する日付を返します。
<highExpression> -java.lang.Number値を返します。この値は、データセットがインクリメントされたときにシリーズに追加されるデータ項目の一部になります。
<lowExpression> -java.lang.Number値を返します。この値は、データセットがインクリメントされたときにシリーズに追加されるデータ項目の一部になります。
<openExpression> -java.lang.Number値を返します。この値は、データセットがインクリメントされたときにシリーズに追加されるデータ項目の一部になります。
<closeExpression> -java.lang.Number値を返します。この値は、データセットがインクリメントされたときにシリーズに追加されるデータ項目の一部になります。
<volumeExpression>-現在のデータ項目に使用するボリューム値を返す数式。ローソク足チャートにのみ使用されます。
<itemHyperlink>-チャートアイテムに関連付けられたハイパーリンクを設定します。
値データセット
これは、単一の値を含み、メーターチャートと温度メーターチャートのレンダリングに使用される特別なチャートデータセットの実装です。値は、<valueExpression>式を使用して収集されます。
チャートプロット
すべてのチャートタイプに共通するもう1つのJRXML要素は<plot>要素。これにより、向きや背景色など、チャートのいくつかの特性を定義できます。プロットは、チャートのタイプに基づいて異なります。
プロット属性
以下の表は、<plot>要素の属性をまとめたものです。
属性 | 説明 | 値 |
---|---|---|
背景色 | この属性は、チャートの背景色を定義します。 | 6桁の16進値は、この属性の有効な値です。16進値の前には#を付ける必要があります。 |
オリエンテーション | この属性は、チャートの方向を定義します。 | 水平、垂直デフォルト値は「垂直」です |
backgroundAlpha | この属性は、チャートの背景色の透明度を定義します。 | この属性の有効な値には、0から1までの任意の10進数が含まれます。数値が大きいほど、背景の透明度が低くなります。デフォルト値は「1」です。 |
foregroundAlpha | この属性は、チャートの前景色の透明度を定義します。 | この属性の有効な値には、0から1までの任意の10進数が含まれます。数値が大きいほど、背景の透明度が低くなります。デフォルト値は「1」です。 |
labelRotation | この属性を使用すると、x軸上のテキストラベルを時計回りまたは反時計回りに回転できます。この属性は、x軸が数値でないか、日付を表示しないグラフにのみ適用されます。 | デフォルト値は「0.0」です。 |
<plot>要素にはサブ要素<seriesColor>があり、その属性はseriesOrderとcolorです。この要素は、シリーズの色と、カラーシーケンス内でのそれらの位置をカスタマイズします。
チャートプロットの特定の設定
piePlot −特定の設定はありません
pie3DPlot−作図領域の高さのパーセンテージとして円の深さを表す、0から1の範囲の数値であるdepthFactor属性が含まれます。
barPlot −目盛りラベル、目盛り、またはアイテムラベルを表示または非表示にでき、両方の軸の設定を提供します。
bar3DPlot − barPlotと同じ設定を提供し、xOffset属性とyOffset属性を使用して3D効果を生成します。
linePlot −アイテムポイントを結ぶ線を表示または非表示にしたり、アイテムポイントに関連付けられた形状を表示または非表示にしたり、両方の軸の設定を提供したりできます。
scatterPlot − linePlotと同様に、アイテムポイントを結ぶ線を表示または非表示にしたり、アイテムポイントに関連付けられた形状を表示または非表示にしたり、両方の軸の設定を提供したりできます。
areaPlot −両方の軸の設定を提供します。
bubblePlot − scaleType属性を設定することでバブルの寸法を設定でき、両方の軸の設定を提供します。
timeSeriesPlot −アイテムポイントを結ぶ線を表示または非表示にしたり、アイテムポイントに関連付けられた形状を表示または非表示にしたり、両方の軸の設定を提供したりできます。
highLowPlot −開いているティックを表示または非表示にしたり、閉じたティックを表示または非表示にしたり、両方の軸の設定を提供したりできます。
candlestickPlot −ボリュームを表示または非表示にすることができ、両方の軸の設定を提供します。
meterPlot −文字盤の形状、目盛りの角度、測定単位、目盛り間隔、文字盤の色、針の色、目盛りの色、値表示フォント、色とフォーマットのパターン、データ範囲、メーター間隔の特定の設定が含まれています。
thermometerPlot −値の場所、水銀の色、値の行の表示/非表示、値の表示フォント、色とフォーマットのパターン、データ範囲、低範囲、中範囲、および高範囲の特定の設定が含まれています。
multiAxisChart −プロットに含まれる軸の特定の設定が含まれています。
チャートの種類
JasperReportsは、いくつかのチャートタイプの組み込みサポートを提供します。それらは以下のようにリストされています-
pieChart −PieデータセットとPieプロットの組み合わせ。
pie3DChart −PieデータセットとPie3Dプロットをグループ化します。
barChart −カテゴリデータセットと棒グラフの基本的な組み合わせ。
bar3DChart −カテゴリデータセットとバー3Dプロットをラップします。
xyBarChart −期間データセット、時系列データセット、およびXYデータセットをサポートし、棒グラフを使用して軸とアイテムをレンダリングします。
stackedBarChart −カテゴリデータセットのデータを使用し、棒グラフを使用してそのコンテンツをレンダリングします。
stackedBar3DChart −カテゴリデータセットのデータを使用し、バー3Dプロットを使用してそのコンテンツをレンダリングします。
lineChart −カテゴリデータセットと折れ線グラフをグループ化します。
xyLineChart −XYデータセットと折れ線グラフをグループ化します。
areaChart −カテゴリデータセットのアイテムは、エリアプロットを使用してレンダリングされます。
stackedAreaChart −カテゴリデータセットのアイテムは、エリアプロットを使用してレンダリングされます。
xyAreaChart − XYデータセットからのデータを使用し、エリアプロットを介してレンダリングします。
scatterChart −XYデータセットを散布図でラップします。
bubbleChart −XYZデータセットをバブルプロットと組み合わせます。
timeSeriesChart −時系列データセットと時系列プロットをグループ化します。
highLowChart −高低データセットと高低プロットの組み合わせ。
candlestickChart −高低データセットからのデータを使用しますが、特別なローソク足プロットを使用します。
meterChart −メータープロットのレンダリングオプションを使用して、値データセットの単一の値をダイヤルに表示します。
thermometerChart −温度計プロットのレンダリングオプションを使用して、値データセット内の単一の値を表示します。
multiAxisChart −複数の範囲軸が含まれ、すべてが共通のドメイン軸を共有します。
例
グラフを示すために、新しいレポートテンプレート(jasper_report_template.jrxml)を作成しましょう。ここでは、<を追加しますbarChart>要素を<pageHeader>セクションに追加し、<pieChart>から<summary>セクションへ。各科目で得られた点数をグラフで表示します。ディレクトリに保存しますC:\tools\jasperreports-5.0.1\test。ファイルの内容は以下のとおりです。
<?xml version = "1.0" encoding = "UTF-8"?>
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" pageWidth = "595" pageHeight = "860"
columnWidth = "515" leftMargin = "40" rightMargin = "40"
topMargin = "50" bottomMargin = "50">
<field name = "subjectName" class = "java.lang.String"/>
<field name = "marks" class = "java.lang.Integer"/>
<variable name = "countNumber" class = "java.lang.Integer" calculation = "Count">
<variableExpression>
<![CDATA[Boolean.TRUE]]>
</variableExpression>
</variable>
<background>
<band splitType = "Stretch"/>
</background>
<title>
<band height = "79" splitType = "Stretch"/>
</title>
<pageHeader>
<band height = "200">
<barChart>
<chart evaluationTime = "Report">
<reportElement x = "0" y = "0" width = "555" height = "200"/>
<chartTitle>
<titleExpression>
<![CDATA["My First JR Bar Chart"]]>
</titleExpression>
</chartTitle>
</chart>
<categoryDataset>
<dataset incrementType = "None"/>
<categorySeries>
<seriesExpression>
<![CDATA[$F{subjectName}]]>
</seriesExpression>
<categoryExpression>
<![CDATA[$F{subjectName}]]> </categoryExpression> <valueExpression> <![CDATA[$F{marks}]]>
</valueExpression>
</categorySeries>
</categoryDataset>
<barPlot isShowTickMarks = "false">
<plot/>
</barPlot>
</barChart>
</band>
</pageHeader>
<columnHeader>
<band height = "20" splitType = "Stretch"/>
</columnHeader>
<detail>
<band height = "20" splitType = "Stretch"/>
</detail>
<columnFooter>
<band height = "20" splitType = "Stretch"/>
</columnFooter>
<pageFooter>
<band height = "20" splitType = "Stretch"/>
</pageFooter>
<summary>
<band height = "400" splitType = "Stretch">
<pieChart>
<chart evaluationTime = "Report">
<reportElement x = "135" y = "0" width = "270" height = "300"/>
<chartTitle>
<titleExpression>
<![CDATA["My First JR Pie Chart"]]>
</titleExpression>
</chartTitle>
</chart>
<pieDataset>
<dataset incrementType = "None"/>
<keyExpression>
<![CDATA[$F{subjectName}]]> </keyExpression> <valueExpression> <![CDATA[$F{marks}]]>
</valueExpression>
</pieDataset>
<piePlot>
<plot/>
<itemLabel/>
</piePlot>
</pieChart>
</band>
</summary>
</jasperReport>
上記のファイルの詳細は以下のとおりです-
棒グラフの作成に使用されるJRXML要素は、<pageHeader>の</ barChart>です。</ chart>サブ要素が含まれ、チャートの寸法と位置を定義する<reportElement>サブ要素が含まれます。
棒グラフの<dataset>要素は、<categoryDataset>要素と</ categoryDataset> JRXML要素で囲む必要があります。
<categoryDataset>には、<categorySeries>要素が含まれている必要があります。この要素は、バーが表すデータ要素(この例ではサブジェクト名)を定義します。
<categoryDataset>には、比較のためにデータをカテゴリに分類する方法を定義する要素も含める必要があります。ここでは、データはサブジェクト名で区切られています。
<valueExpression>要素は、グラフの各バーの値を決定するために使用される式を定義します。ここでは「マーク」を使用しています。
円グラフでは、<summary>セクションの下にある要素<pieChart>を使用しました。</ chart>サブ要素が含まれています。
サブ要素には、チャートのキーとして何を使用するかを示すレポート式が含まれています。ここでは、subjectNameを使用しました。
サブ要素には、キーの値を計算するために使用される式が含まれています。ここでは、マークを使用しています。
レポート入力のJavaコードは変更されていません。ファイルの内容C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource = new
JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
try {
JasperFillManager.fillReportToFile( sourceFileName,
parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
各科目で取得したマークを表示するため、POJOを変更する必要があります。ファイルC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java 内容は以下の通りです−
package com.tutorialspoint;
public class DataBean {
private String subjectName;
private Integer marks;
public String getSubjectName() {
return subjectName;
}
public void setSubjectName(String subjectName) {
this.subjectName = subjectName;
}
public Integer getMarks() {
return marks;
}
public void setMarks(Integer marks) {
this.marks = marks;
}
}
ファイルの内容も C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java 以下のように更新する必要があります-
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("English", 58));
dataBeanList.add(produce("SocialStudies", 68));
dataBeanList.add(produce("Maths", 38));
dataBeanList.add(produce("Hindi", 88));
dataBeanList.add(produce("Scince", 78));
return dataBeanList;
}
/*
* This method returns a DataBean object, with subjectName ,
* and marks set in it.
*/
private DataBean produce(String subjectName, Integer marks) {
DataBean dataBean = new DataBean();
dataBean.setSubjectName(subjectName);
dataBean.setMarks(marks);
return dataBean;
}
}
レポートの生成
次に、通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行しましょう。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から取得され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview the
report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReportがデフォルトのターゲットです)次のように-
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defaulting to bu
[javac] Compiling 3 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig
for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 19 minutes 45 seconds
上記のコンパイルの結果、JasperViewerウィンドウが次の画面のように開きます-
ここでは、棒グラフがページヘッダーに作成され、円グラフが概要セクションに作成されていることがわかります。
クロス集計(クロス集計)レポートは、行と列にまたがるデータを表形式で配置するテーブルを含むレポートです。クロス集計オブジェクトは、メインレポート内にクロス集計レポートを挿入するために使用されます。クロス集計は、任意のレベルのデータ(名義、順序、間隔、または比率)で使用でき、通常、レポート変数に含まれる要約データを動的テーブルの形式で表示します。変数は、合計、カウント、平均値などの集計データを表示するために使用されます。
クロス集計プロパティ
JRXML要素<crosstab>は、クロス集計をレポートに挿入するために使用されます。
属性
以下は、<の属性のリストです。crosstab>要素-
isRepeatColumnHeaders−改ページ後に列ヘッダーを再印刷する必要があるかどうかを示します。デフォルト値はtrueです。
isRepeatRowHeaders−クロス集計列の区切り後に行ヘッダーを再印刷する必要があるかどうかを示します。デフォルト値はtrueです。
columnBreakOffset−列の切れ目が発生した場合、同じページの前のクロス集計部分の下に配置される後続のクロス集計部分の前の、ピクセル単位で測定された垂直方向のスペースの量を示します。デフォルト値は10です。
runDirection−クロス集計データを左から右(LTR)に入力するか、右から左(RTL)に入力するかを示します。デフォルト値はLTRです。
ignoreWidth−クロスタブが最初のクロスタブ幅の制限を超えて伸び、列の区切りを生成しないかどうかを示します。それ以外の場合は、クロス集計幅の制限内で列のレンダリングを停止し、すべての行がレンダリングを開始した後にのみ残りの列を続行します。デフォルト値はfalseです。
サブ要素
<crosstab>要素には次のサブ要素があります-
<reportElement>−この要素は、囲み内のクロスタブの位置、幅、および高さを定義します。この要素の属性には、すべての標準の<reportElement>属性が含まれます。
<crosstabParameter>−この要素は、クロス集計内からレポート変数とパラメーターにアクセスするために使用されます。この要素の属性は次のとおりです。
名前-これはパラメータ名を定義します。
class-これはパラメータクラスを示します。
<parametersMapExpression>−この要素は、クロス集計のパラメーターのセットとして、java.util.Mapのインスタンスを含むレポート変数またはパラメーターを渡すために使用されます。この要素には属性が含まれていません。
<crosstabDataset>−この要素は、クロス集計にデータを入力するために使用するデータセットを定義します(詳細な説明については次のセクションを参照してください)。この要素の属性は次のとおりです。
isDataPreSorted-これは、データセット内のデータが事前にソートされているかどうかを示します。デフォルト値はfalseです。
<crosstabHeaderCell>−この要素は、列ヘッダーと行ヘッダーが出会うクロス集計の左上隅にある領域のコンテンツを定義します。このセルのサイズは、定義された行と列の幅と高さに基づいて自動的に計算されます。
<rowGroup>−この要素は、データを行に分割するために使用されるグループを定義します。この要素の属性は次のとおりです。
名前-これは行グループの名前を定義します。
width-これは行グループの幅を定義します。
headerPosition-これは、ヘッダーの内容(Top、Middle、Bottom、Stretch)の位置を定義します。
totalPosition-これは列全体の位置を定義します(開始、終了、なし)。
この要素には、次のサブ要素が含まれています-
<bucket>
<crosstabRowHeader>
<crosstabTotalRowHeader>
<columnGroup>−この要素は、データを列に分割するために使用されるグループを定義します。この要素の属性は次のとおりです。
名前-これは、列グループ名を定義します。
height-これは、列グループヘッダーの高さを定義します。
headerPosition-これは、ヘッダーの内容(Right、Left、Center、Stretch)の位置を定義します。
totalPosition-これは、列全体の位置(Start、End、None)を定義します。
この要素には、次のサブ要素が含まれています-
<bucket>
<crosstabColumnHeader>
<crosstabTotalColumnHeader>
<measure>−この要素は、行と列にわたって実行される計算を定義します。この要素の属性は次のとおりです。
名前-これはメジャー名を定義します。
class-これはメジャークラスを示します。
計算-これは、クロス集計セル値間で実行される計算を示します。-その値は、これらのいずれかの可能性が何もない、カウント、DistinctCount、合計、平均、最低、最高、標準偏差、分散、およびファースト。デフォルト値はNothing。
<crosstabCell>−この要素は、非ヘッダーセルのデータがどのように配置されるかを定義します。この要素の属性は次のとおりです。
columnTotalGroup-これは、列の合計を計算するために使用するグループを示します。
height-これはセルの高さを定義します。
rowTotalGroup-これは、行の合計を計算するために使用するグループを示します。
width-これはセルの幅を定義します。
<whenNoDataCell>−この要素は、空のクロス集計セルに何を表示するかを定義します。この要素には属性が含まれていません。
クロス集計でのデータのグループ化
クロス集計計算エンジンは、関連するデータセットレコードを反復処理することにより、データを集計します。データを集約するには、最初にデータをグループ化する必要があります。クロス集計では、行と列は、と呼ばれる特定のグループアイテムに基づいていますbuckets。バケット定義には-が含まれている必要があります
bucketExpression-データグループアイテムを取得するために評価される式。
比較表現-値の自然な順序が最良の選択ではない場合に必要です。
orderByExpression-データの並べ替えに使用される値を示します。
クロス集計の行と列のグループ(上記で定義)は、 buckets。
組み込みのクロス集計合計変数
以下は、メジャーの現在の値のリストであり、セルに対応するさまざまなレベルの合計は、次のスキームに従って名前が付けられた変数を介してアクセスできます。
メジャー計算の現在の値は、メジャーと同じ名前の変数に格納されます。
<Measure> _ <Column Group> _ALL-これにより、同じ行の列グループ内のすべてのエントリの合計が得られます。
<Measure> _ <Row Group> _ALL-これにより、同じ列の行グループ内のすべてのエントリの合計が得られます。
<メジャー> _ <行グループ> _ <列グループ> _ALL-これにより、行グループと列グループの両方のすべてのエントリに対応する合計が得られます。
例
クロス集計を示すために、新しいレポートテンプレート(jasper_report_template.jrxml)を作成しましょう。ここでは、概要セクションにクロス集計を追加します。ディレクトリに保存しますC:\tools\jasperreports-5.0.1\test。ファイルの内容は以下のとおりです。
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" language = "groovy" pageWidth = "595"
pageHeight = "842" columnWidth = "555" leftMargin = "20" rightMargin = "20"
topMargin = "20" bottomMargin = "20">
<parameter name = "ReportTitle" class = "java.lang.String"/>
<parameter name = "Author" class = "java.lang.String"/>
<field name = "name" class = "java.lang.String"/>
<field name = "country" class = "java.lang.String"/>
<title>
<band height = "70">
<line>
<reportElement x = "0" y = "0" width = "515" height = "1"/>
</line>
<textField isBlankWhenNull = "true" bookmarkLevel = "1">
<reportElement x = "0" y = "10" width = "515" height = "30"/>
<textElement textAlignment = "Center">
<font size = "22"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{ReportTitle}]]>
</textFieldExpression>
<anchorNameExpression>
<![CDATA["Title"]]>
</anchorNameExpression>
</textField>
<textField isBlankWhenNull = "true">
<reportElement x = "0" y = "40" width = "515" height = "20"/>
<textElement textAlignment = "Center">
<font size = "10"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{Author}]]> </textFieldExpression> </textField> </band> </title> <summary> <band height = "60"> <crosstab> <reportElement width = "782" y = "0" x = "0" height = "60"/> <rowGroup name = "nameGroup" width = "100"> <bucket> <bucketExpression class = "java.lang.String"> <![CDATA[$F{name}]]>
</bucketExpression>
</bucket>
<crosstabRowHeader>
<cellContents>
<box border = "Thin" borderColor = "black"/>
<textField>
<reportElement width = "100" y = "0" x = "0" height = "20"/>
<textElement textAlignment = "Right"
verticalAlignment = "Middle"/>
<textFieldExpression>
<![CDATA[$V{nameGroup}]]> </textFieldExpression> </textField> </cellContents> </crosstabRowHeader> </rowGroup> <columnGroup name = "countryGroup" height = "20"> <bucket> <bucketExpression class = "java.lang.String"> $F{country}
</bucketExpression>
</bucket>
<crosstabColumnHeader>
<cellContents>
<box border = "Thin" borderColor = "black"/>
<textField isStretchWithOverflow = "true">
<reportElement width = "60" y = "0" x = "0" height = "20"/>
<textElement verticalAlignment = "Bottom"/>
<textFieldExpression>
<![CDATA[$V{countryGroup}]]> </textFieldExpression> </textField> </cellContents> </crosstabColumnHeader> </columnGroup> <measure name = "tailNumCount" class = "java.lang.Integer" calculation = "Count"> <measureExpression>$F{country}</measureExpression>
</measure>
<crosstabCell height = "20" width = "60">
<cellContents backcolor = "#FFFFFF">
<box borderColor = "black" border = "Thin"/>
<textField>
<reportElement x = "5" y = "0" width = "55" height = "20"/>
<textElement textAlignment = "Left"
verticalAlignment = "Bottom"/>
<textFieldExpression class = "java.lang.Integer">
$V{tailNumCount}
</textFieldExpression>
</textField>
</cellContents>
</crosstabCell>
</crosstab>
</band>
</summary>
</jasperReport>
上記ファイルの詳細は以下の通りです−
クロス集計は、<crosstab>要素によって定義されます。
<rowGroup>要素は、データを行に分割するグループを定義します。ここでは、各行に異なる名前のデータが表示されます。
<bucket>要素と<bucketExpression>要素は、<rowGroup>のグループ区切り文字として使用するレポート式を定義します。ここでは、行を名前で分割するために、名前フィールドを区切り文字として使用しました。
<crosstabRowHeader>要素は、行ヘッダーとして使用される式を定義します。これには、クロス集計内の内側のバンドのように機能する単一のサブ要素、つまり<cellContents>が含まれています。<crosstabRowHeader>内のテキストフィールドに変数名を定義する代わりに、(name属性を介して)<rowGroup>に名前を割り当てたため、暗黙的な変数が作成されます。<crosstabRowHeader>要素は、行全体のヘッダーセルの内容を定義します。唯一のサブ要素として単一の<cellContents>要素を取ります。
<columnGroup>要素とそのサブ要素は<rowGroup>要素に似ていますが、行ではなく列に影響を与える点が異なります。
<measure>要素は、行と列にわたって実行される計算を定義します。計算属性が設定されているカウント。
<crosstabCell>要素は、非ヘッダーセルのデータがどのように配置されるかを定義します。この要素には、唯一のサブ要素として単一の<crosstabCell>要素も含まれています。
レポート入力のJavaコードは変更されていません。ファイルの内容C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java 以下のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource =
new JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
/**
* Passing ReportTitle and Author as parameters
*/
parameters.put("ReportTitle", "List of Contacts");
parameters.put("Author", "Prepared By Manisha");
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
POJOファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java 次のとおりです-
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
ファイルの内容 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java 次のとおりです-
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
レポートの生成
次に、通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行しましょう。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から取得され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview the
report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReportがデフォルトのターゲットです)次のように-
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defaulting to
[javac] Compiling 3 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig
for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger (
net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 20 minutes 53 seconds
上記のコンパイルの結果、以下の画面に示すようにJasperViewerウィンドウが開きます-
ここでは、各国と名前が表になっていることがわかります。
場合によっては、さまざまな言語のレポートが必要になります。異なる言語ごとに同じレポートを作成することは、多くの冗長な作業を意味します。言語ごとに異なるテキストのみを個別に記述し、ロケール設定に応じて実行時にテキスト要素にロードする必要があります。これがレポートの国際化の目的です。国際化されたレポートは、一度作成されると、どこでも実行できます。
次の手順では、さまざまな言語でレポートを生成する方法と、レポートの国際化のその他の機能をいくつかリストしました。
リソースバンドルjava.util.ResourceBundleをレポートテンプレートに関連付けます。java.util.ResourceBundleオブジェクトをレポートテンプレートに関連付けるには、2つの方法があります。
設計時に、レポートテンプレートオブジェクトのresourceBundle属性をターゲットリソースバンドルのベース名に設定します。
動的/ランタイムの関連付けは、レポート入力時にREPORT_RESOURCE_BUNDLEパラメーターの値としてjava.util.ResourceBundleオブジェクトを指定することで作成できます。
現在のロケールとは異なるロケールでレポートを生成する必要がある場合は、組み込みのREPORT_LOCALEパラメーターを使用して、レポートに入力するときにランタイムロケールを指定できます。
レポートの国際化を促進するために、特別な構文 $R{}レポートに関連付けられたjava.util.ResourceBundleオブジェクト内に配置されたjava.lang.Stringリソースを参照するために、レポート式内で使用できます。ザ・$R{} 文字構文は、角かっこで囲む必要があるキーに基づいて、リソースバンドルからロケール固有のリソースを抽出します-
<textFieldExpression>
$R{report.title}
</textFieldExpression>
上記のテキストフィールドには、runtimesuppliedロケールとreport.titleキーに基づいて、レポートテンプレートに関連付けられたリソースバンドルから文字列値を抽出することにより、レポートのタイトルが表示されます。
レポートのロケールに基づいてさまざまな言語でメッセージをフォーマットするために、レポートnet.sf.jasperreports.engine.fill.JRCalculator内に組み込みのメソッドがあります。このメソッドは、java.text.MessageFormatクラスと同様の機能を提供します。このメソッドmsg()には、メッセージで最大3つのメッセージパラメータを使用できる3つの便利な署名があります。
組み込みのstr()メソッド(レポート式内の$ R {}構文に相当)。レポートのロケールに基づいてリソースバンドルのコンテンツにアクセスできます。
日付と時刻のフォーマットについては、組み込みのREPORT_TIME_ZONEパラメーターを使用して、適切な時刻変換を保証できます。
生成された出力では、ライブラリはテキストの実行方向に関する情報を保持するため、右から左に書く言語(アラビア語やヘブライ語など)で生成されたドキュメントを適切にレンダリングできます。
生成されたレポートを表示するためにアプリケーションが組み込みのSwingビューアに依存している場合は、ボタンのツールチップまたは表示されるその他のテキストを調整して、アプリケーションを国際化する必要があります。ビューアは事前定義されたリソースバンドルに依存してロケール固有の情報を抽出するため、これは非常に簡単です。このリソースバンドルのベース名はnet.sf.jasperreports.view.viewerです。
例
国際化を実証するために、新しいレポートテンプレート(jasper_report_template.jrxml)を作成しましょう。JRXMLの内容は以下のとおりです。C:\ tools \ jasperreports-5.0.1 \ testディレクトリに保存します。
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" language = "groovy" pageWidth = "595"
pageHeight = "842" columnWidth = "555" leftMargin = "20" rightMargin = "20"
topMargin = "20" bottomMargin = "20" resourceBundle = "localizationdemo">
<title>
<band height = "552">
<textField>
<reportElement positionType = "Float" x = "150" y = "20"
width = "400" height = "50"/>
<textElement>
<font size = "24"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{REPORT_LOCALE}.getDisplayName ($P{REPORT_LOCALE})]]>
</textFieldExpression>
</textField>
<textField isStretchWithOverflow = "true" isBlankWhenNull = "true">
<reportElement positionType = "Float" x = "20" y = "125"
width = "530" height = "20"/>
<textElement textAlignment = "Justified">
<font size = "14"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$R{localization.text1}]]>
</textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
上記のファイルでは、<jasperReport>要素のresourceBundle属性は、レポートに使用するローカライズされた文字列を取得する場所をJasperReportsに指示します。属性の値と一致するルート名を持つプロパティファイルを作成する必要があります。このファイルは、レポートに入力するときにCLASSPATHのどこかに存在する必要があります。この例では、プロパティファイルlocalizationdemo.properties ディレクトリの下に保存されます C:\tools\jasperreports-5.0.1\test。このファイルの内容は次のとおりです-
localization.text1 = This is English text.
別のロケールを使用するには、ファイルの名前をlocalizationdemo [locale] .propertiesにする必要があります。ここでは、スペイン語ロケールのファイルを作成します。このファイルを-として保存しますC:\tools\jasperreports-5.0.1\test\localizationdemo_es.properties。このファイルの内容は次のとおりです-
localization.text1 = Este texto es en Español.
resourceBundleプロパティの値を取得するための構文は$ R {key}です。
JasperReportsに使用するロケールを知らせるには、組み込みパラメーターに値を割り当てる必要があります。このパラメーターの名前はREPORT_LOCALEと呼ばれる定数として定義され、この定数はnet.sf.jasperreports.engine.JRParameterクラスで定義されます。定数の値は、java.util.Localeのインスタンスである必要があります。このロジックは、レポートに入力して生成するためにJavaコードに組み込まれています。このファイルを保存しましょうJasperReportFillI18.javaC:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspointディレクトリに移動します。ファイルの内容は次のとおりです-
package com.tutorialspoint;
import java.util.HashMap;
import java.util.Locale;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperFillManager;
public class JasperReportFillI18 {
public static void main(String[] args) {
String sourceFileName = "C://tools/jasperreports-5.0.1/test/"
+ "jasper_report_template.jasper";
HashMap parameterMap = new HashMap();
if (args.length > 0) {
parameterMap.put(JRParameter.REPORT_LOCALE, new Locale(args[0]));
}
try {
JasperFillManager.fillReportToFile(sourceFileName, null,
new JREmptyDataSource());
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
レポートの生成
通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行します。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。
インポートファイル--baseBuild.xmlは、Environment Setupの章から取得され、build.xmlと同じディレクトリに配置する必要があります。
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview the report stored
in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid="classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
次に、コマンドラインウィンドウを開いて、build.xmlが配置されているディレクトリに移動しましょう。最後に、コマンドを実行しますant -Dmain-class=com.tutorialspoint.JasperReportFillI18 (viewFullReportがデフォルトのターゲットです)次のように-
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFillI18
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defaulting to
[javac] Compiling 1 source file to C:\tools\jasperreports-5.0.1\test\classes
[javac] Note: C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\
JasperReportFillI18.java
uses unchecked or u
[javac] Note: Recompile with -Xlint:unchecked for details.
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig
for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFillI18
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 3 minutes 28 seconds
上記のコンパイルの結果、以下の画面に示すようにJasperViewerウィンドウが開きます-