【问题标题】:External Styles in JasperReportsJasperReports 中的外部样式
【发布时间】:2010-09-16 20:03:35
【问题描述】:

我正在开发一个包含大量报告的系统,这些报告是使用JasperReports 生成的。其中一项较新的功能是您可以定义报告的样式。

从可用的文档中,我相信有一些方法可以让外部文件定义要使用的样式,您可以在 jasper 报告中引用它。这允许多个报告使用单一样式。

我找不到任何关于这是否是实际功能的具体信息,如果是,如何使用它。有谁知道jasper报告是否可以有外部样式,如果可以,怎么做?

【问题讨论】:

    标签: jasper-reports styles


    【解决方案1】:

    使用JasperReport templates。 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 中(尽管我确实注意到有时它不会拾取它们,因此需要重新加载或重新编译)。

    【讨论】:

    • 我正在提前很多年进行测试,今天我需要以这种方式添加&lt;template&gt;&lt;![CDATA["styles.jrtx"]]&gt;&lt;/template&gt;。并且元素模板必须紧跟在property 元素之后。
    【解决方案2】:

    您还可以避免在 &lt;template&gt; 元素中指定实际文件名,方法是使用在运行时传递到报告中的参数

    &lt;parameter name="TEMPLATE_FILE" isForPrompting="false" class="java.lang.String"/&gt;

    &lt;template&gt;&lt;![CDATA[$P{TEMPLATE_FILE}]]&gt;&lt;/template&gt;

    其中 $P{TEMPLATE_FILE} 是样式资源的完整路径

    【讨论】:

      【解决方案3】:

      我喜欢分享我在 Jasper 报表中使用样式的学习,我认为这对像我这样的报表设计者非常有用,来自 Bilal Siddiqui 的一本名为 JasperReport Development Cookbook 的书。我喜欢这本书,并发现以多种方式展示风格,例如:

      • 创建可重复使用的样式
        只需在创建新报告时选择“样式”并定义文本、线条和矩形的样式。样式文件将存储为 .jrtx 文件。

      • 在您的报告中导入可重复使用的样式
        在您的报告中导入样式时有三个信息块。 第1步。样式模板的名称和位置

      <template><![CDATA["C:\\ BigBoldRedTemplate.jrtx"]]></template>
      

      步骤 2。每次使用样式模板将样式应用于报表元素时,都会创建一个 &lt;reportElement&gt; 标记,如下所示:

      //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>
      
      • 在报表中混合使用内部样式和可重用样式
      • 使用 HTML 的强大功能来设置报表样式
        例如,您的文本字段具有以下包含 HTML 标记(即&lt;li&gt;)的表达式,并且您希望 HTML 标记在您的报告设计中起作用:
      "<li>"+"Invoice # "+$F{InvoiceID}+", "+
      

      $F{CustomerName}+" 已购买 "+$F{ProductName}+" 在 "+$F{InvoicePeriod}+"(发票值: \$ "+$F{InvoiceValue}+")"+"

      解决方法很简单,只需将文本字段的“Markup”属性设置为“Styled”即可。

      我已获得作者的许可,可以在这篇文章中从他的 JasperReports 食谱中复制代码块。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-09
        • 1970-01-01
        • 2016-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多