ireport快速入门指南

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

写在前面的话
今年北京的夏天格外的热,工作之余竟然不想出去看风景了。

蜷缩在没有空调的房子里才开始怀念冷气的味道,为了降温只能拿块湿毛巾搭在肩膀上。

古老的方式却也带来一丝惬意,打开笔记本想想还是写个总结吧,给自己找点事做,总比闲的好……
用这样的字体开始写这段话我只想说明的是这段话无关紧要,权当是我对着自己电脑自言自语吧,你完全可以跳过这里查找你需要的地方。

不过我还是要感谢前辈们的“前人栽树,后人乘凉”的精神,没有他们的无私也没有这篇个人总结的出现。

所以你可以任意分割和转载,同样如果你认为毫无价值可以拉到回收站以免占用您宝贵的硬盘……
同样希望得到您的批评和指正,谢谢!
目录
所谓的介绍 (3)
1.JasperReport 简介 (3)
2.jFreeChart简介 (3)
3.iReport简介 (4)
开始愉快的旅程 (6)
1.必要条件 (6)
2.下载与安装 (6)
3.添加一个JDBC连接 (7)
4.开始一个简单的报表 (9)
5.认识进阶 (14)
6.报表中的组件 (16)
7.输出报表 (41)
8.Web工程中的配置和导出 (44)
该结束了 (47)
所谓的介绍
如果您总是很喜欢看一本书前几页的介绍,很遗憾这里显然无法满足您的需求,不过简要的介绍还是少不了的!
1.JasperReport 简介
JasperReport 是一款报表打印组件,是开放源代码和免费的,在我写这篇总结的时候,JasperReport 的最新版本是3.7.3版,
JasperReport 的最新版本可以从/projects/jasperreports下载得到。

JasperReport 适合用来做WEB应用程序与Java Application的报表打印组件!
注:目前已经升级到3.7.4版本,截图是最新官网页面
2.jFreeChart简介
JFreeChart主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

官方地址:/jfreechart/
这里就不详细介绍了,可以查看我的个人总结jFreeChart,也可以问问google老师。

很多前辈共享的资料很全的!
注:详细资料请查看我整理的《JfreeChart入门总结》
3.iReport简介
iReport是一款开源组织的免费软件,其主要作用是用来以可视化的方式设计、生成JasperReport 所使用的报表格式文件,因为JasperReport 本身并未提供很好的可视化报表设计工具,iReport正好是为了弥补这个缺陷而诞生的吧。

你可以通过下面的链接(/projects/ireport)来找到你所需要的软件,还是希望你安装最新的版本,因为旧版本中存在的Bug会使你重做很多工作,当然作为程序员的你还是有必要多接触些Bug的。

注:目前已经升级到3.7.4版本,截图是最新官网页面下面很简单列出它的功能特点:
百分之九十九支持JasperReport XML标签
所见即所得的报表编辑器,也就是说它具有创建矩形,线,椭圆,正文域,标签,图表,子报表,条码等完善的工具图标供使用。

嵌入式编辑器带有灯泡提示代码规则
支持Unicode和非拉丁语言(俄文,中文,日文,韩文…)
文档结构浏览器
完善的报表编译器和输出器
支持所有可以通过JDBC连接的数据库
支持所有有效的数据源
自动报表创建向导
支持子报表
源文件的备份
支持文档模版
支持TrueType字型
支持本地化
可添加插件扩展功能
完全支持脚本
支持图表
标准对象库管理(页码…)
支持拖拽
无限制的取消/重做
开始愉快的旅程
1.必要条件
iReport是用Java语言开发的,所以Sun Java 2 SDK,iReport-3.7.3需要JDK版本至少要1.5,如果看过官方指引的话,还会说明内存、硬盘空间的要求,这里没有必要说明了。

2.下载与安装
下载地址上面已经给出,也可以问问Google老师,在装好JDK的Windows系统上安装iReport 操作与安装腾讯QQ聊天软件没什么区别,所以这里就不再贴图演示了,需要值得注意的:
你可以配置下Viewers,因为在你预览报表的时候,可以采用不同的方式来查看,这里看图点击Preview在弹出的viewer列表中选择,如下图所示:
3.添加一个JDBC连接
使用iReport设计的报表的,一般都需要添加一个JDBC连接,操作步骤如下所示:1、找到非常富有意义的按钮,单击弹出如下窗口:
点击new,看到如下窗口:
选择“Database JDBC connection”,接下来详细填写吧,根据你的数据库,选择你合适的JDBC Driver,笔者用的是MySQL,填写完整后,点击Test测试下是否连接成功。

需要值得注意的是,如果没有该数据库的JDBC 驱动jar包,iReport会很智能用红色来显
示该驱动名称,所以你赶紧找到该驱动jar包
我这里用mysql数据库所以下面是我的系统配置:
4.开始一个简单的报表
点击new在弹出的窗口中选择iReport,新建一个报表如图所示:
首先选择一个样式,单击进入如下界面:
点击下一步,接下来写sql语句了(这里我随便找了个数据库中的内容进行测试)如下所示:
你也可以单击进行操作了,这里自己体会下吧!接着我们单击
选择需要的fields吧,如图所示:
单击进入group by
这里我们需要制作一个简单的报表,所以先跳过group by,继续单击
到此终于看到了久违的成功界面了,大胆的单击吧,接下来的界面将是你梦寐以求的了:
现在我们先预览下自己的第一个杰作吧!
单击上图中的preview你会看到报表运行结果:
但你很遗憾的发现,name 和class下面的都是小方块的乱码,其实在我们的数据库中都是方方正正的汉字啊,这里出现了中文乱码的问题,也是在刚接触iReport所遇到的比较棘手的问题。

当然下面给出了解决方法:
如何解决中文问题?
如下图所示,选择需要中文输出的地方(这里暂且这么说)
在右侧属性设置栏中找到下面四个属性,设置为下图所示的内容吧!
很显然到这里我们解决了这个问题。

这里是我们解决这个问题后的显示界面:
还有值得说明的是,如果你细心会发现这个黑色的小按钮,移动鼠标出现下面的提示:
现在明白了吧,单击它,可以得到一张图片,这张图片就是报表运行后的结果:
5.认识进阶
下面是没有任何模板的空页面,这样看比较直观,易于理解:
这里截图有点模糊希望你认真看下各个band的说明吧,其实最好还是实践下吧。

多看看每一个band的属性,这样才能做出自己需要的报表。

选择该报表,单击右键,在弹出的菜单中,打开该报表的属性设置窗口如下所示:
Page Header
Column Header Group Header
Detail Group Footer
Column Footer Page Footer
Last Page Footer
报表属性所解决的问题?
1.可以设置页面的大小
2.Columns设置报表显示的列数,(这里可以节省纸张啊,呵呵!)
3.当记录返回显示为null时,想要去掉null,用空白来代替
(其他问题在实际应用中找Google老师可以完美的解决!)
6.报表中的组件
继续认识iReport中的组件了,我们很容易在组件面板中找到这些组件。

下图所示:
我没有必要把这些组件全部翻译过来,如果接触过VB,也拖拽过Swing界面的人来说,拖动、使用这些组件的操作感觉是很类似的。

1.Static Text组件、Frame组件、Text Field组件、image组件的使用
报表结构图:
报表设计图:
Static Text 组件中的文本时静态的,也可以说不会改变的,而Text Field 是可以改变的。

给Text Field 赋值的方法,拖拽一个Text Field 组件,点击鼠标右键如图所示
选择Edit expression 进入如下界面:
这边留着就行了,不需要写东西
选中Fields,再选择class,双击鼠标左键,即把当前的字段添加到该Field中。

如下图所示:
点击完成该操作。

●修改边框,调节显示样式,点击鼠标右键如图所示
选择Padding And Borders进入如下界面:
具体操作自行体会,这里不再赘述。

●格式化输出内容(非常棒的功能,让你省下很多人力、物力)点击鼠标右键如图所示
选择Field pattern弹出如下窗口:
小数点后保留几位
试了大家都说好
试下就知道这个功能有多强大了!大家都需要的东西。

该注意的问题
Field的Expression Class和java中的类型是相对应的,避免出现“牛头不对马嘴”的错误!
下面是这个简单报表的运行效果:
接下来稍微修改了一下,显示效果为下面样式:
image组件的使用
奇偶行不同背序号的使用
景交替显示
序号的使用:(报表中的变量variables)
显然为每一行添加一个序号是报表中经常要求的,那么现在我们就完成这样的任务吧,
其实这里需要数的就是报表中的变量了。

如图为报表中的变量:
很明显这些都是系统中自带的,当然我们也可以自定义需要的变量,现在我们选用了
PAGE_COUNT在序号对应的Field Text中完成下图中的操作吧!
说完报表中的变量variables,接着就该说下报表中的参数parameters。

这个也是相当重要的举个例子:在一个服装进销存系统中需要根据指定的时间段来统计某一服装的销量,生成报表并打印。

这里我们就需要向报表中传递“开始日期”、“结束日期”,某一服装的编号。

这就是所谓的给报表添加参数parameters
parameters的添加和赋值
在这里添加一个最简单参数test_parameters,参数的属性如下,只是一个字符串而已,为了测试我们可以在报表中让它显示一下:
预览报表的时候提示给参数test_parameters赋值:
给参数test_parameters赋值:“这个是参数”,预览效果如下:
看这里!
奇偶行不同背景交替实现的方法:
1.拖拽一个Frame组件覆盖在需要改变改变背景的地方,调整大小。

设置下面属性如
图所示:(颜色自定义)
2.接下来找到属性
将Print When Expression设置为new Boolean((($V{PAGE_COUNT}.intValue()) % 2)==1)表示奇数列时才显示,同样就会出现这种效果了!
2.分组显示和Crosstab组件和Table组件
首先简要说明下group的使用,同样新建一张新报表,前面的操作步骤相同,在设置group by时按照下图中操作:
这里演示用class来分组,也可以在嵌套分组。

接着我们允许刚才制作好的报表就可以看到分组后的显示效果图,发现所有学生按班级来分类显示。

按班级分组
显示了!
交叉报表也是在报表设计中经常用到的一个组件,在新建的空白报表,点击拖动一个
组件,进入下面界面:
行显示分组
列显示分组
试试看这里的
Function
经过小心的“点缀”撒上喜欢的“调料”:
“烘焙”出炉,展现在我们面前的是一块美味的“巴西烤肉”:
很人性化的显示样式
非常庆幸我们完成了一块美味的“巴西烤肉”,接下来该组件了,试试看能做出什么美味的佳肴?Subreport翻译过来是子报表的意思,需要有主报表了,现在继续开始我们的征途:
下面是子报表的样式:
接着我们把主报表简单整理下:
编译运行下看看效果:
注:这个是一个毫无意义的例子
主报表和子报表的参数的“沟通”,下面我们首先在子报表中添加一个用来测试用的参数test_p,这个参数是最简单,只是用来显示测试结果的:
然后我们先预览一下子报表,会要求我们输入参数test_p的值:
子报表预览效果:
在子报表中给
参数test_p赋值
现在我们在主报表中给这个子报表的参数test_p赋值,选中该子报表,找到Parameters,点击添加如下值:
预览主报表看看,在主报表中设置的值是否传个了子报表,如下所示:
主报表给子报表的参
数test_p赋值
3.chart组件
chart组件其实是来自于鼎鼎大名的jFreeChart,不过与JfreeChart相比较iReport内置的这个组件只能说是个入门级的,这里也给出几个例子供大家参考。

这次我们找点水果做实验吧,要不大夏天的除了冷饮还有水果也是受欢迎的,正好我数据库中有这些东西:下面在数据库的数据记录就长这么个样子,我们用它来做饼状图的演示:
3D饼状图
单击在弹出如下的窗口中选择一个饼状图作为开始:
看图操作,最后我们得到下面这个小东西,这就是我们需要的饼状图:
运行下看看效果吧,截图也放出来了:
你会忍不住说“哇!好丑……”的确如此,长的很抽象,这能怪谁,只能怪缺少“包装”。

经过简单地“包装”,看看“包装”后的她吧!
如果你觉得这个也并不是很漂亮的话,就该自己动手“丰衣足食”了,闲话少说仔细看下备注说明,在反复看看chart 各个元素的属性,我把这些属性截图如下:
下面随便贴出更换Theme 效果的饼状图:
Title
透明效果
鼠标移动到扇形区域显示提示信息
更改提示文字
Legend
透明效果就靠它了!
自己试试
更改提示文字:
选中当前饼状图,点击鼠标右键选择“Chart Data”在单击“detail”选项卡如下图:
刚才我们填
过的,同样
也可以在这
里修改
仔细看看这里添
加的吧!
当鼠标移动到扇形区域显示提示信息:
其实在饼状图中这个显得并不是很重要,但这也牵扯出一个信息,可以为每一个扇形块添加一个链接,这里没有演示如何添加链接,只是巧妙地利用这个功能实现了上面的效果:
柱状图
下面再说一个同样具有代表性的柱状统计图,下面是简要的操作步骤,大家参考下:
点击完成,下面是经过简单包装后的柱状图:
这里没标注,属性设置截图,相信大家参考3D饼状图可以很快认识柱状图:
同样可以修改的属性,可以使柱子睡会觉,下面是修改后的效果图:
下面是修改Theme的效果图:
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;
public class PdfExportDemo {
public void exportPdf(String reportName) {
File file = new File(reportName + ".jasper");
JasperReport report = null;
JasperPrint jasperPrint = null;
try {
report = (JasperReport) JRLoader.loadObject(file);
} catch (JRException e1) {
e1.printStackTrace();
}
/**
* 获得一个jdbc连接
*/
Connection conn = JDBCConnection.getConnection();
/**
* 传入报表的参数
*/
Map<String, String> params = new HashMap<String, String>();
try {
jasperPrint = JasperFillManager.fillReport(report, params, conn);
} catch (JRException e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
pdfExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
"D:\\test-ireport-two.pdf");
try {
pdfExporter.exportReport();
} catch (JRException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
PdfExportDemo pdfExportDemo = new PdfExportDemo();
pdfExportDemo.exportPdf("test-ireport-two");
}
}
运行程序,看看结果吧。

注意这里需要引入的jar包,下面是导入jar的截图:
这里需要说明的是输出为文本的时候,代码有点不同,代码如下:
JRTextExporter textExporter = new JRTextExporter();
textExporter
.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); textExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
"D:\\test-ireport-two.text");
textExporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH,
new Float(10f));
这个是主题(皮肤)包,如果你在报
表中选用了chart的非默认主题(皮
肤)那么需要添加这个包
如果报表中没有使用chart组件就
不需要这个包了
textExporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT, new Float(10f));
try {
textExporter.exportReport();
} catch (JRException e) {
e.printStackTrace();
}
8.Web工程中的配置和导出
首先在web.xml文件中配置:
<servlet>
<servlet-name>JRHTMLServlet</servlet-name>
<servlet-class>org.xinyunfei.web.JRHTMLServlet</servlet-class> </servlet>
<servlet-mapping>
<servlet-name>JRHTMLServlet</servlet-name>
<servlet-class>
net.sf.jasperreports.j2ee.servlets.ImageServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/images</url-pattern>
</servlet-mapping>
这个是servlet类,代码较多,包和import都删除了,JRHTMLServlet.java
public class JRHTMLServlet extends HttpServlet {
private static final long serialVersionUID = -8648013315666950893L;
private Connection conn = JDBCConnection.getConnection();
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context =
this.getServletConfig().getServletContext();
File file = new File(context
.getRealPath("/report/test-ireport-two.jasper"));
Map<String, String> parameters = new HashMap<String, String>();
JasperPrint jasperPrint = null;
try {
JasperReport jasperReport = (JasperReport) JRLoader
.loadObject(file);
jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, conn);
} catch (JRException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 得到当前报表的总页数
*/
System.out.println(jasperPrint.getPages().size());
OutputStream out = resp.getOutputStream();
if (jasperPrint != null) {
JRHtmlExporter htmlExporter = new JRHtmlExporter();
resp.setContentType("text/html;charset=utf-8");
htmlExporter.setParameter(JRExporterParameter.JASPER_PRINT,
jasperPrint);
htmlExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
/**
* 与web.xml配置文件中的想对应!
* 如果不添加这个,页面显示图片链接失效的小方框。

* 这主要是由于生成的web报表中的空白区域是用小图片填充的
htmlExporter.exportReport();
} catch (JRException e) {
e.printStackTrace();
}finally{
out.close();
}
}
}
}
jsp页面直接添加下面代码,调用该servlet即可
当然以上操作将所有的页面都显示出来,其实我们也可以实现分页效果。

这个很简单,以上代码中我多写了一行,在后台打印报表的总页数,再试着看看下面这个截图中的代码:
现在该明白如何实现分页了吧!
该结束了
这篇总结只是给刚接触ireport的朋友们提供一点资料!其中文中提到的jFreeChart,我也简要写了下关于它的总结,希望我的总结可以给您带去帮助,我也诚挚地希望互相学习和交流,也希望您及时提出批评和指正,下面是我的联系方式:
Email:xinyunfei@ QQ:396464838(加QQ的时候说明是iReport)。

相关文档
最新文档