Стили отчетов

JasperReports имеет функцию <style>, которая помогает управлять свойствами текста в шаблоне отчета. Этот элемент представляет собой набор настроек стиля, объявленных на уровне отчета. Такие свойства, как цвет переднего плана, цвет фона, жирный шрифт, курсив или нормальный шрифт, размер шрифта, граница для шрифта и многие другие атрибуты управляются элементом <style>. Стили могут расширять другие стили, а также добавлять или переопределять свойства родительского стиля.

Свойства стиля

У элемента <style> много атрибутов. Некоторые из наиболее часто используемых перечислены в таблице ниже -

S.NO Атрибут и описание
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.

Условные стили

В некоторых ситуациях стиль следует применять только при соблюдении определенного условия (например, для чередования цветов соседних строк в разделе сведений отчета). Этого можно добиться с помощью условных стилей.

Условный стиль состоит из двух элементов:

  • логическое выражение условия
  • стиль

Стиль используется только в том случае, если условие истинно .

Применение стилей к элементам отчета

Любой тип элемента отчета может ссылаться на определение стиля отчета с помощью атрибута style. Следовательно, все свойства стиля, объявленные определением стиля, которые применимы к текущему элементу, будут унаследованы. Чтобы переопределить унаследованные значения, можно использовать свойства стиля, указанные на уровне элемента отчета.

Шаблоны стилей

Мы можем сделать набор отчетов с единым видом, определив стиль в общем месте. На этот шаблон общего стиля затем могут ссылаться шаблоны отчетов. Шаблон стиля - это файл XML, содержащий одно или несколько определений стиля. Файлы шаблонов стилей, по соглашению*.jrtx расширение, но это не обязательно.

Шаблон стиля содержит следующие элементы -

  • <jasperTemplate> - это корневой элемент файла шаблона стиля.

  • <template> - этот элемент используется для включения ссылок на другие файлы шаблонов. Содержимое этого элемента интерпретируется как расположение указанного файла шаблона.

  • <style> - этот элемент идентичен элементу с таким же именем из шаблонов дизайна отчетов (файлы JRXML), за исключением того, что стиль в шаблоне стиля не может содержать условные стили. Это ограничение вызвано тем фактом, что условные стили включают выражения отчета, а выражения могут быть интерпретированы только в контексте одного определения отчета.

Ссылки на шаблоны стилей включаются в отчеты JRXML как элементы <template>. Шаблоны стилей загружаются во время заполнения отчета, а ссылки на имена стилей разрешаются после загрузки всех шаблонов. При загрузке шаблонов стилей и преобразовании имен стилей в стили создается дерево / граф шаблонов стилей, вершиной которого является набор стилей, определенных в отчете. В этом дереве ссылки на имена стилей преобразуются в последний стиль, который соответствует имени при обходе в глубину.

пример

Давайте попробуем условные стили и шаблоны стилей. Добавим <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 взят из главы « Настройка среды» и должен быть помещен в тот же каталог, что и 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 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, как показано на экране, приведенном ниже -

Здесь мы видим, что цвет шрифта меняется на синий для четного подсчета (в столбце страны). В названии столбца цвет шрифта изменяется на зеленый (на этот стиль ссылается шаблон стиля).