我正在开发一个包含大量报告的系统,这些报告是使用JasperReports生成的。较新的功能之一是您可以定义报告的样式。
从可用的文档中,我相信有一些方法可以让外部文件定义要使用的样式,您可以在 jasper 报告中引用它。这允许多个报告使用单一样式。
我找不到任何关于这是否是实际功能的具体信息,如果是,如何使用它。有谁知道碧玉报告是否可以有外部样式,如果可以,怎么做?
我正在开发一个包含大量报告的系统,这些报告是使用JasperReports生成的。较新的功能之一是您可以定义报告的样式。
从可用的文档中,我相信有一些方法可以让外部文件定义要使用的样式,您可以在 jasper 报告中引用它。这允许多个报告使用单一样式。
我找不到任何关于这是否是实际功能的具体信息,如果是,如何使用它。有谁知道碧玉报告是否可以有外部样式,如果可以,怎么做?
使用JasperReport 模板。JasperReports 模板是一个以 结尾的模板.jrtx
,可能看起来类似于此 ( styles.jrtx
):
<?xml version="1.0"?>
<!DOCTYPE jasperTemplate
PUBLIC "-//JasperReports//DTD Template//EN"
"http://jasperreports.sourceforge.net/dtds/jaspertemplate.dtd">
<jasperTemplate>
<style name="Report Title" isDefault="false" hAlign="Center" fontSize="24" isBold="true"/>
<style name="Heading 1" isDefault="false" fontSize="18" isBold="true"/>
<style name="Heading 2" isDefault="false" fontSize="14" isBold="true"/>
</jasperTemplate>
然后在您的.jrxml
文件中,将其作为模板包含在内:
...
<template><![CDATA["styles.jrtx"]]></template>
...
iReport 也理解这一点,因此您的样式被导入并正确显示在 iReport 中(尽管我确实注意到有时它不会选择它们,因此需要重新加载或重新编译)。
您还可以<template>
通过在运行时使用传递到报告中的参数来避免在元素中指定实际文件名
<parameter name="TEMPLATE_FILE" isForPrompting="false" class="java.lang.String"/>
<template><![CDATA[$P{TEMPLATE_FILE}]]></template>
其中 $P{TEMPLATE_FILE} 是样式资源的完整路径
我喜欢分享我在 Jasper 报表中使用样式的学习,我认为这对像我这样的报表设计师非常有用,来自 Bilal Siddiqui 的一本名为 JasperReport Development Cookbook 的书。我喜欢这本书,并发现以多种方式展示风格,例如:
创建可重复使用的样式
只需在创建新报告时选择“样式”并定义文本、线条和矩形的样式。样式文件将存储为 .jrtx 文件。
在您的报告中导入可重复使用的样式在您的报告
中导入样式时有三个信息块。第1步。样式模板的名称和位置
<template><![CDATA["C:\\ BigBoldRedTemplate.jrtx"]]></template>
第2步。每次使用样式模板将样式应用于报表元素时,<reportElement>
都会创建一个标签,如下所示:
//style applied to a rectangle
<rectangle radius="10">
<reportElement style="BigBoldRed" mode="Transparent" x="0" y="0" width="555" height="44"/>
</rectangle>
//style applied to a the text field
<staticText>
<reportElement style="BigBoldRed" x="0" y="0" width="555" height="66"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Monthly Customer Invoices]]></text>
</staticText>
<li>
),并且您希望 HTML 标记在您的报表设计中起作用:"<li>"+"Invoice # "+$F{InvoiceID}+", "+
$F{CustomerName}+" 在 "+$F{InvoicePeriod}+" 购买了 "+$F{ProductName}+" (发票价值: \$ "+$F{InvoiceValue}+")"+"
解决方案很简单,只需将文本字段的“标记”属性设置为“样式”即可。
我已获得作者的许可,可以在这篇文章中从他的 JasperReports 食谱中复制代码块。