zoukankan      html  css  js  c++  java
  • DynamicReport使用XML数据源+ireport的.jxml文件作为模板

    DynamicReport好不好用我不知道,但是它是开源的,文档还算全?用户的需求是想自己设计,但是ireport是给开发级别的使用的,据说用户并不想学,他们只想拖拖拽拽就出来一个报表。

    功能需求总结:

    1、用户自主设计报表样式

    2、数据动态加载

    解决方案:

    将用户拖拽的结果,参照jxml的格式生成jxml文件,作为模板加载到DynamicReport里面;

    数据源使用xml格式数据,可以实现动态

    本文版翻译权归__馋猫和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

    DynamicReport官方文档上面,这两个例子都有很详细的教程,链接如下:

    使用模板:http://www.dynamicreports.org/examples/examples-overview#templatedesign

    使用xml数据源:http://www.dynamicreports.org/examples/examples-overview#datasource

    这里主要给出二者相结合使用的例子,小白级别步骤入下:

    1、确定工程里面导入了DynamicReport所需要的各种jar包;

    2、将 模板:testTable_subreport1.jxml和 数据源:NameList.xml添加到TestXML.Java同一包下面;

    3、run即可;

    package a.test.xmlfile;
    
    <?xml version="1.0" encoding="UTF-8"?>
    <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="testTable_subreport1" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="8b0d8ddc-641f-46ec-a711-a5212faff8c4">
        <property name="ireport.zoom" value="1.0"/>
        <property name="ireport.x" value="0"/>
        <property name="ireport.y" value="0"/>
        <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
            <defaultValueExpression><![CDATA["F:\Users\Desktop\"]]></defaultValueExpression>
        </parameter>
        <queryString language="xPath">
            <![CDATA[/NameList/Person]]>
        </queryString>
        <field name="Name" class="java.lang.String">
            <fieldDescription><![CDATA[Name]]></fieldDescription>
        </field>
        <field name="Gender" class="java.lang.String">
            <fieldDescription><![CDATA[Gender]]></fieldDescription>
        </field>
        <field name="Age" class="java.lang.String">
            <fieldDescription><![CDATA[Age]]></fieldDescription>
        </field>
        <group name="GroupName" footerPosition="ForceAtBottom" keepTogether="true">
            <groupExpression><![CDATA[$F{Gender}]]></groupExpression>
            <groupHeader>
                <band splitType="Immediate"/>
            </groupHeader>
        </group>
        <title>
            <band height="79" splitType="Stretch"/>
        </title>
        <pageHeader>
            <band height="35" splitType="Stretch"/>
        </pageHeader>
        <columnHeader>
            <band height="61" splitType="Stretch">
                <staticText>
                    <reportElement mode="Transparent" x="141" y="41" width="100" height="20" uuid="506dc39b-345d-40cf-af57-e6d2264b4324"/>
                    <text><![CDATA[Name]]></text>
                </staticText>
                <staticText>
                    <reportElement x="41" y="41" width="100" height="20" uuid="eb47f825-0875-488a-be9f-d047df0cc967"/>
                    <text><![CDATA[Gender]]></text>
                </staticText>
                <staticText>
                    <reportElement x="241" y="41" width="100" height="20" uuid="06a53662-6d2a-4f55-b7ca-88880fbf55a4"/>
                    <text><![CDATA[Age]]></text>
                </staticText>
            </band>
        </columnHeader>
        <detail>
            <band height="21" splitType="Stretch">
                <rectangle>
                    <reportElement x="41" y="1" width="100" height="20" uuid="8016a9b4-352b-4a7b-a4db-281be1b1acff"/>
                </rectangle>
                <rectangle>
                    <reportElement x="141" y="1" width="100" height="20" uuid="9fcc48a6-004b-4298-a1a0-8096d1f98a5d"/>
                </rectangle>
                <rectangle>
                    <reportElement x="241" y="1" width="100" height="20" uuid="155963b8-fb26-4e85-8d94-49baae947444"/>
                </rectangle>
                <textField>
                    <reportElement x="141" y="1" width="100" height="20" uuid="2f3e4e70-3bd1-41a1-b815-de41a96fd504"/>
                    <textFieldExpression><![CDATA[$F{Name}]]></textFieldExpression>
                </textField>
                <textField>
                    <reportElement x="41" y="1" width="100" height="20" uuid="51f31db4-daf2-4521-bf60-988384f93caa"/>
                    <textFieldExpression><![CDATA[$F{Gender}]]></textFieldExpression>
                </textField>
                <textField>
                    <reportElement x="241" y="0" width="100" height="20" uuid="80c2563c-ae7c-41ed-adcd-6ba8e09bb53d"/>
                    <textFieldExpression><![CDATA[$F{Age}]]></textFieldExpression>
                </textField>
            </band>
        </detail>
    </jasperReport>
    
    testTable_subreport1
    testTable_subreport1
     1 package a.test.xmlfile;
     2 
     3 import java.io.InputStream;
     4 
     5 import net.sf.dynamicreports.examples.Templates;
     6 import net.sf.dynamicreports.jasper.builder.JasperReportBuilder;
     7 import net.sf.dynamicreports.report.builder.DynamicReports;
     8 import net.sf.dynamicreports.report.builder.style.StyleBuilder;
     9 import net.sf.jasperreports.engine.JRException;
    10 import net.sf.jasperreports.engine.data.JRXmlDataSource;
    11 
    12 public class TestXML {
    13 
    14     public TestXML() {
    15         build();
    16     }
    17 
    18     private void build() {
    19         JRXmlDataSource dataSource = null;
    20         try {
    21             dataSource = new JRXmlDataSource(TestXML.class.getResourceAsStream("NameList.xml"), "/NameList/Person");
    22         } catch (JRException e1) {
    23             // TODO Auto-generated catch block
    24             e1.printStackTrace();
    25         }
    26 
    27         InputStream is = TestXML.class.getResourceAsStream("testTable_subreport1.jrxml");
    28         JasperReportBuilder report = DynamicReports.report();// 创建空报表
    29         StyleBuilder chineseStl = DynamicReports.stl.style().setFontName("FreeUniversalMSY").setFontSize(12);
    30         try {
    31             // report;
    32 
    33             report.setTemplate(Templates.reportTemplate).setTitleStyle(chineseStl).setTemplateDesign(is)
    34                     .setDataSource(dataSource).show();
    35         } catch (Exception e) {
    36             e.printStackTrace();
    37         }
    38     }
    39 
    40     public static void main(String[] args) {
    41         new TestXML();
    42     }
    43 
    44 }
    TestXML
     1 <?xml version="1.0" encoding="utf-8" ?>
     2  <NameList>
     3      <Person>
     4          <Name>阿美</Name>
     5          <Gender></Gender>
     6          <Age>23</Age>
     7      </Person>
     8      <Person>
     9          <Name>李丽</Name>
    10          <Gender></Gender>
    11          <Age>58</Age>
    12      </Person>
    13       <Person>
    14          <Name>强尼</Name>
    15          <Gender></Gender>
    16          <Age>56</Age>
    17      </Person>
    18      <Person>
    19          <Name>杰森</Name>
    20          <Gender></Gender>
    21          <Age>21</Age>
    22      </Person>
    23      <Person>
    24          <Name>刘三</Name>
    25          <Gender></Gender>
    26          <Age>21</Age>
    27     </Person>
    28  </NameList>
    NameList

    本文版翻译权归__馋猫和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

    这里需要注意的是,如果你想自己写jxml文件,一定要注意顺序,有些标签出现顺序有排位,如果错位的话,DynamicReport里面会报错。还有好多坑,,,下次贴代码。

  • 相关阅读:
    算法-最大公约数
    算法-最大连续子序列和
    iOS开发-Bug锦囊
    iOS开发-简单抽奖
    iOS开发-UIActionSheet简单介绍
    iOS开发-UIActivityIndicatorView简单使用
    iOS开发-UITextView实现PlaceHolder的方式
    iOS开发-Reachability实时检测Wifi,2G/3G/4G/网络状态
    [转]jsPlumb插件做一个模仿viso的可拖拉流程图
    Python 日期和时间
  • 原文地址:https://www.cnblogs.com/chanmao--/p/6647348.html
Copyright © 2011-2022 走看看