Учебники

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

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

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

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

S.NO Атрибут и описание
1

название

Является обязательным. Он должен быть уникальным, поскольку он ссылается на соответствующий стиль отчета по всему отчету.

2

IsDefault

Указывает, является ли этот стиль стилем документа по умолчанию.

3

стиль

Ссылка на родительский стиль.

4

Режим

Определяет прозрачность элемента. Возможные значения: Opaque и Transparent .

5

ForeColor

Цвет переднего плана объекта.

6

BackColor

Цвет фона объекта.

7

заполнить

Определяет шаблон заливки, используемый для заливки объекта. На данный момент единственное допустимое значение — Solid .

6

радиус

Определяет радиус угловой дуги прямоугольника.

7

scaleImage

Определяет масштаб только для изображений. Возможные значения: Clip, FillFrame, RetainShape, RealHeight и RealSize .

8

hAlign

Определяет горизонтальное выравнивание. Возможные значения: Левый, Центр, Правый и Обоснованный .

9

VALIGN

Определяет вертикальное выравнивание. Возможные значения: Top, Middle и Bottom .

10

вращение

Определяет поворот элемента. Возможные значения: None, Left, Right и UpsideDown .

11

межстрочный интервал

Определяет межстрочный интервал между строками текста. Возможные значения: Single, 1_1_2, Double .

12

наценка

Определяет стиль разметки для стилизованных текстов.

13

Fontname

Определяет имя шрифта.

14

размер шрифта

Определяет размер шрифта.

15

isBold

Указывает, является ли стиль шрифта жирным.

16

isItalic

Указывает, является ли стиль шрифта курсивом.

17

isUnderline

Указывает, подчеркнут ли стиль шрифта.

18

isStrikeThrough

Указывает, зачеркнут ли стиль шрифта.

19

pdfFontName

Указывает имя связанного шрифта PDF.

20

pdfEncoding

Определяет кодировку символов для формата вывода PDF.

22

isPdfEmbedded

Указывает, встроен ли шрифт PDF.

23

шаблон

Определяет шаблон формата для форматированных текстов.

24

isBlankWhenNull

Указывает, должна ли отображаться пустая строка (пробел), если выражение имеет значение null.

название

Является обязательным. Он должен быть уникальным, поскольку он ссылается на соответствующий стиль отчета по всему отчету.

IsDefault

Указывает, является ли этот стиль стилем документа по умолчанию.

стиль

Ссылка на родительский стиль.

Режим

Определяет прозрачность элемента. Возможные значения: Opaque и Transparent .

ForeColor

Цвет переднего плана объекта.

BackColor

Цвет фона объекта.

заполнить

Определяет шаблон заливки, используемый для заливки объекта. На данный момент единственное допустимое значение — Solid .

радиус

Определяет радиус угловой дуги прямоугольника.

scaleImage

Определяет масштаб только для изображений. Возможные значения: Clip, FillFrame, RetainShape, RealHeight и RealSize .

hAlign

Определяет горизонтальное выравнивание. Возможные значения: Левый, Центр, Правый и Обоснованный .

VALIGN

Определяет вертикальное выравнивание. Возможные значения: Top, Middle и Bottom .

вращение

Определяет поворот элемента. Возможные значения: None, Left, Right и UpsideDown .

межстрочный интервал

Определяет межстрочный интервал между строками текста. Возможные значения: Single, 1_1_2, Double .

наценка

Определяет стиль разметки для стилизованных текстов.

Fontname

Определяет имя шрифта.

размер шрифта

Определяет размер шрифта.

isBold

Указывает, является ли стиль шрифта жирным.

isItalic

Указывает, является ли стиль шрифта курсивом.

isUnderline

Указывает, подчеркнут ли стиль шрифта.

isStrikeThrough

Указывает, зачеркнут ли стиль шрифта.

pdfFontName

Указывает имя связанного шрифта PDF.

pdfEncoding

Определяет кодировку символов для формата вывода PDF.

isPdfEmbedded

Указывает, встроен ли шрифт PDF.

шаблон

Определяет шаблон формата для форматированных текстов.

isBlankWhenNull

Указывает, должна ли отображаться пустая строка (пробел), если выражение имеет значение null.

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

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

У условного стиля есть два элемента —

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

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

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

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

Шаблоны стиля

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

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

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

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

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

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

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

<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, как показано на приведенном ниже экране —

Пример стиля отчета Jasper

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