Jasper-reports-jasper-report-styles

提供:Dev Guides
移動先:案内検索

レポートスタイル

JasperReportsには、レポートテンプレートのテキストプロパティの制御に役立つ機能<style>があります。 この要素は、レポートレベルで宣言されたスタイル設定のコレクションです。 前景色、背景色、フォントが太字、斜体、通常のいずれであるか、フォントサイズ、フォントの境界線、その他の多くの属性などのプロパティは、<style>要素によって制御されます。 スタイルは、他のスタイルを拡張したり、親スタイルのプロパティに追加したり、プロパティをオーバーライドしたりできます。

スタイルのプロパティ

<style>要素には多くの属性があります。 最も一般的に使用されるいくつかは、以下の表に記載されています-

S.NO Attribute and Description
1

name

必須です。 レポート全体で対応するレポートスタイルを参照するため、一意である必要があります。

2

isDefault

このスタイルがドキュメントのデフォルトスタイルかどうかを示します。

3

style

親スタイルへの参照です。

4

mode

要素の透明度を指定します。 可能な値は、_Opaque_および_Transparent_です。

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 を既存のレポートテンプレートに追加しましょう(チャプターリンク:/jasper_reports/jasper_report_designs [Report Designs])。 条件に基づいて、偶数カウントではフォントの色が青に変わります。 スタイルテンプレート "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 \ finddevguides \ JasperReportFill.java の内容は以下のとおりです-

package com.finddevguides;

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 \ finddevguides \ DataBean.java の内容は次のとおりです-

package com.finddevguides;

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 \ finddevguides \ DataBeanList.java の内容は次のとおりです-

package com.finddevguides;

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は、チャプターリンク:/jasper_reports/jasper_environment_setup [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.finddevguides.JasperReportFill (viewFullReportがデフォルトのターゲットです)を-として実行します

C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.finddevguides.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/faql#noconfig for more info.
   [jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.

run:
   [echo] Runnin class : com.finddevguides.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ウィンドウが開き、以下の画面に表示されます-

Jasperレポートスタイルの例

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