Стили отчетов
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, как показано на экране, приведенном ниже -
Здесь мы видим, что цвет шрифта меняется на синий для четного подсчета (в столбце страны). В названии столбца цвет шрифта изменяется на зеленый (на этот стиль ссылается шаблон стиля).