JasperReports有一个功能< style>这有助于控制报告模板中的文本属性.此元素是在报告级别声明的样式设置的集合.前景色,背景色,字体是否为粗体,斜体或正常,字体大小,字体边框以及许多其他属性等属性由< style>控制.元件.样式可以扩展其他样式,也可以添加或覆盖父样式的属性.
样式属性
A< style> element有很多属性.下面给出的表中列出了一些最常用的和减号;
S.否 | 属性和描述 |
---|---|
1 | name 是强制性的.它必须是唯一的,因为它在整个报告中引用了相应的报告样式. |
2 | isDefault 指示此样式是否为文档的默认样式. |
3 | style 是对父母风格的引用. |
4 | mode 指定元素的透明度.可能的值是不透明和透明. |
5 | forecolor 是对象的前景色. |
6 | backcolor 是对象的背景颜色. |
7 | fill 确定用于填充对象的填充图案.目前,允许的单个值是 Solid . |
8 | backcolor 指定矩形角圆弧的半径. |
9 | scaleImage 仅指定图像的比例.可能的值: Clip,FillFrame,RetainShape,RealHeight,和 RealSize . |
10 | hAlign 指定水平对齐方式.可能的值:左,中,右,和对齐. |
11 | vAlign 指定垂直对齐方式.可能的值: Top,Middle,和 Bottom . |
12 | rotation 指定元素的旋转.可能的值:无,左,右,和 UpsideDown . |
13 | lineSpacing 指定文本行之间的行间距.可能的值: Single,1_1_2,Double . |
14 | markup 指定样式文本的标记样式. |
15 | fontName 指定字体名称. |
16 | fontSize 指定字体大小. |
17 | isBold 指示字体样式是否为粗体. |
18 | isItalic 指示字体样式是否为斜体. |
19 | isUnderline 指示字体样式是否为下划线. |
20 | isStrikeThrough 指示字体样式是否为删除线. |
21 | pdfFontName 指定相关的PDF字体名称. |
22 | pdfEncoding 指定PDF输出格式的字符编码. |
23 | isPdfEmbedded 表示如果嵌入了PDF字体. |
24 | pattern 指定格式化文本的格式模式. |
25 | isBlankWhenNull 表示是否为空字符串(空格)如果表达式求值为null,则应显示. |
条件样式
在某些情况下,只有在满足特定条件时才应用样式(例如,在报表详细信息部分中交替相邻的行颜色).这可以使用条件样式来实现.
条件样式有两个元素 :
布尔条件表达式
样式
仅当条件求值为时才使用样式.
将样式应用于报表元素
任何类型的报表元素都可以使用style属性引用报表样式定义.因此,将继承适用于当前元素的样式定义声明的所有样式属性.要覆盖继承的值,可以使用在报表元素级别指定的样式属性.
样式模板
我们可以创建一组报表通过在公共场所定义样式来获得共同的外观.然后,报告模板可以引用此常用样式模板.样式模板是包含一个或多个样式定义的XML文件.约定使用的样式模板文件 * .jrtx 扩展名,但这不是强制性的.
样式模板包含以下元素 :
< jasperTemplate> : 这是样式模板文件的根元素.
< template> : 此元素用于包含对其他模板文件的引用.此元素的内容被解释为引用模板文件的位置.
< style> : 此元素与报表设计模板(JRXML文件)中具有相同名称的元素相同,但样式模板中的样式不能包含条件样式.这种限制是由条件样式涉及报表表达式而导致的,而表达式只能在单个报表定义的上下文中解释.
样式模板的引用作为< template>包含在JRXML报告中.元素.样式模板在报告填充时加载,样式名称引用在加载所有模板后解析.加载样式模板并将样式名称解析为样式时,会创建样式模板的树/图,树的顶部是报告中定义的样式集.在此树上,样式名称引用被解析为与深度优先遍历中的名称匹配的最后一个样式.
示例
让我们试一试条件样式和样式模板.让我们添加< 样式>元素 alternateStyle 到我们现有的报告模板(章节报告设计).根据条件,字体颜色变为蓝色以进行均匀计数.我们还添加了样式模板"styles.jrtx".修订后的报告模板(jasper_report_template.jrxml)如下所示.将其保存到C:\tools\jasperreports-5.0.1 \ test目录 :
"styles.jrtx"
样式模板 styles.jrtx 的内容如下.将其保存到C:\tools\jasperreports-5.0.1 \ test目录.
报告填充的java代码保持不变.文件的内容 C:\tools\jasperreports-5.0.1 \ test \\ src\com\it1352\ JapersReportFill.java 如下给出 :
package com.it1352; 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/测试/jasper_report_tem plate.jasper"; DataBeanList DataBeanList = new DataBeanList(); ArrayList< DataBean> dataList = DataBeanList.getDataBeanList(); JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataList); Map parameters = new HashMap(); /** *将ReportTitle和Author作为参数传递 */ parameters.put("ReportTitle","联系人列表"); parameters.put("作者","由Manisha编写"); try { JasperFillManager.fillReportToFile( sourceFileName,parameters,beanColDataSource); } catch(JRException e){ e.printStackTrace(); } } }
POJO文件的内容 C:\tools\jasperreports -5.0.1\test\src\com\it1352\ DataBean.java 如下 :
package com.it1352; 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(); ArrayListdataList = 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(); } }}
文件的内容 C:\tools\jasperreports-5.0.1 \ test \src\com\it1352\ DataBeanList.java 如下 :
package com.it1352; import java.util.ArrayList;public class DataBeanList { public ArrayListgetDataBeanList() { ArrayList dataBeanList = new ArrayList (); 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放在同一目录中.
接下来,让我们打开命令行窗口并转到build.xml所在的目录.最后,执行命令 ant -Dmain-class = com.it1352.JasperReportFill (viewFullReport是默认目标)为 :
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.IT屋.JasperReportFillBuildfile: C:\tools\jasperreports-5.0.1\test\build.xmlclean-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.jrprintcompile: [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\classescompilereportdesing: [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.IT屋.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窗口打开,如下面给出的屏幕所示 :
在这里,我们可以看到字体的颜色变为蓝色甚至计数(在列国家).在列名称中,字体颜色更改为绿色(此样式从样式模板引用).