首页 > 代码库 > DynamicReport使用XML数据源+ireport的.jxml文件作为模板

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即可;

技术分享
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <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">
 3     <property name="ireport.zoom" value="1.0"/>
 4     <property name="ireport.x" value="0"/>
 5     <property name="ireport.y" value="0"/>
 6     <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
 7         <defaultValueExpression><![CDATA["F:\\Users\\wenbo\\Desktop\\"]]></defaultValueExpression>
 8     </parameter>
 9     <queryString language="xPath">
10         <![CDATA[/NameList/Person]]>
11     </queryString>
12     <field name="Name" class="java.lang.String">
13         <fieldDescription><![CDATA[Name]]></fieldDescription>
14     </field>
15     <field name="Gender" class="java.lang.String">
16         <fieldDescription><![CDATA[Gender]]></fieldDescription>
17     </field>
18     <field name="Age" class="java.lang.String">
19         <fieldDescription><![CDATA[Age]]></fieldDescription>
20     </field>
21     <group name="GroupName" footerPosition="ForceAtBottom" keepTogether="true">
22         <groupExpression><![CDATA[$F{Gender}]]></groupExpression>
23         <groupHeader>
24             <band splitType="Immediate"/>
25         </groupHeader>
26     </group>
27     <title>
28         <band height="79" splitType="Stretch"/>
29     </title>
30     <pageHeader>
31         <band height="35" splitType="Stretch"/>
32     </pageHeader>
33     <columnHeader>
34         <band height="61" splitType="Stretch">
35             <staticText>
36                 <reportElement mode="Transparent" x="141" y="41" width="100" height="20" uuid="506dc39b-345d-40cf-af57-e6d2264b4324"/>
37                 <text><![CDATA[Name]]></text>
38             </staticText>
39             <staticText>
40                 <reportElement x="41" y="41" width="100" height="20" uuid="eb47f825-0875-488a-be9f-d047df0cc967"/>
41                 <text><![CDATA[Gender]]></text>
42             </staticText>
43             <staticText>
44                 <reportElement x="241" y="41" width="100" height="20" uuid="06a53662-6d2a-4f55-b7ca-88880fbf55a4"/>
45                 <text><![CDATA[Age]]></text>
46             </staticText>
47         </band>
48     </columnHeader>
49     <detail>
50         <band height="21" splitType="Stretch">
51             <rectangle>
52                 <reportElement x="41" y="1" width="100" height="20" uuid="8016a9b4-352b-4a7b-a4db-281be1b1acff"/>
53             </rectangle>
54             <rectangle>
55                 <reportElement x="141" y="1" width="100" height="20" uuid="9fcc48a6-004b-4298-a1a0-8096d1f98a5d"/>
56             </rectangle>
57             <rectangle>
58                 <reportElement x="241" y="1" width="100" height="20" uuid="155963b8-fb26-4e85-8d94-49baae947444"/>
59             </rectangle>
60             <textField>
61                 <reportElement x="141" y="1" width="100" height="20" uuid="2f3e4e70-3bd1-41a1-b815-de41a96fd504"/>
62                 <textFieldExpression><![CDATA[$F{Name}]]></textFieldExpression>
63             </textField>
64             <textField>
65                 <reportElement x="41" y="1" width="100" height="20" uuid="51f31db4-daf2-4521-bf60-988384f93caa"/>
66                 <textFieldExpression><![CDATA[$F{Gender}]]></textFieldExpression>
67             </textField>
68             <textField>
69                 <reportElement x="241" y="0" width="100" height="20" uuid="80c2563c-ae7c-41ed-adcd-6ba8e09bb53d"/>
70                 <textFieldExpression><![CDATA[$F{Age}]]></textFieldExpression>
71             </textField>
72         </band>
73     </detail>
74 </jasperReport>
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里面会报错。还有好多坑,,,下次贴代码。

DynamicReport使用XML数据源+ireport的.jxml文件作为模板