レポートスタイル

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ウィンドウが開きます-

ここでは、フォントの色が偶数カウント(列の国)で青に変更されていることがわかります。列名で、フォントの色が緑に変更されます(このスタイルはスタイルテンプレートから参照されます)。