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里面会报错。还有好多坑,,,下次贴代码。

时间: 2024-10-27 18:57:29

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

使用Open Xml按模版导出Excel文件(下)

(3)将数据写入Excel 把数据写入到Excel文件是本文的关键技术.这里需要用到OpenXml.在Sdk里已经提供了足够的文件操作方法,我们就调用这些方法,将数据源的数据写到文件中. 首先我们定义了一些工具类,用于读取单元格的行列值. 在Excel中,每个单元格都有一个地址:如B3表示第二行第三列的格子,在Utility中的GetRowIndex和GetColumnIndex就是输入字符串”B3”,返回Int类型的索引2 和3.还有输入“B3”,返回列的字母“B”等等. 在WorkSheet

XML数据源快速开发框架&mdash;&mdash;XmlFramwork

浪漫的周末从cnblogs开始.话说,今天和往常的周末一样,韩君躲在被窝里用手机翻阅着园子里的珠玑.一篇<应用XML作为数据库的快速开发框架>的文章在韩君脑子里激起了一波球形闪电.想想上周中刚好完成的一个WinCE小项目,这波久久不能平息.韩君做了一个比马兄更艰难的决定,秒速穿戴衣裤后,开始了那第N次的亲密接触... 成果: 一个外传版的XML数据源快速开发框架:XmlFramwork. PathRoute:路由XML数据文件路径: List<T>:XML实体类的泛型集合,对应XM

asp.net 上传XML,txt 直接读取文件内容

if (GetUploadFileContent.PostedFile.InputStream.Length < 1) { Msg.Text = "请选择文件";return; } string FileName = GetUploadFileContent.FileName;//上传文件文件名 string FilePath = GetUploadFileContent.PostedFile.FileName;//上传文件完整路径+文件名string fileExtName =

使用Open Xml按模版导出Excel文件(上)

完整内容请参见我的网站 http://www.iyummy.com.cn/Blog/Detail/3 我们在做应用系统中经常需要将数据库中的数据导出成为Excel文件.如果是要导出报表的话,最好是能够根据定义好的模版生成一个美观的Excel. 以前要生成有样式的Excel.一般是使用Xml形式的Excel修改,或者使用Excel的Api.前者要修改样式的话特别麻烦,后者在Asp.net里会起很多进程. 庆幸的是从office 2007开始,微软使用了OpenXml来定义office的文件.使用r

UI进阶 XML解析适配 引入GDataXML文件时候 &#39;libxml/tree.h&#39;file not found 错误解决办法

在工程的"Build Settings"页中找到"Header Search Path"项,添加"/usr/include/libxml2". 在"Other Linker Flags"项,添加"-lxml2" 同理引入别的类型文件不匹配的时候也可以用这种方法 UI进阶 XML解析适配 引入GDataXML文件时候 'libxml/tree.h'file not found 错误解决办法

Zend studio文件注释模板设置方法

步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增.删.改.导入等)管理你的模板.新建文件注释.函数注释.代码块等模板的实例 新建模板,分别输入Name.Description.Pattern a)文件注释 Name: 3cfileDescription: tkyouxi.com文件注释模板 Pattern:/*** tkyouxi.com xx文件* =============================================

从XML到XSLT一对一mapping的XSLT模板

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="utf-8" indent="yes" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/&g

项目管理文件夹模板

符合CMMI体系建立的项目管理文件夹模板 ├─00_项目管理│ ├─00_01_项目计划│ ├─00_02_工作周报│ ├─00_03_会议纪要│ ├─00_04_重要邮件│ └─00_05_其它项目管理文件├─01_系统需求│ ├─01_01_客户调研│ └─01_02_需求分析├─02_系统设计│ ├─02_01_框架设计│ ├─02_02_界面原型│ │ └─02_02_01_美工UI设计│ ├─02_03_详细设计│ └─02_04_数据库设计├─03_Source_Code│ ├─03

applicationContext.xml文件配置模板

<?xml version="1.0" encoding="gb2312"?><!--  Spring配置文件的DTD定义--><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd"><!--  Spring配置文件的根元素是beans--