jasperreport

2020-02-22 12:56

学习完jasperreports+ireport,给我感觉深刻,不仅掌握了报表开发技术,还掌握了如何在web中生成pdf,xls,rtf文件,以下是jasperreports+ireport开发知识点: 1.字段,变量,参数,传参 2.矢量图,位图 3.超链接,锚

4.数据源,自定义数据源 5.国际化(I18N) 6.脚本 7.子报表

8.图表(饼图,柱图,线图) 9.导出pdf,xls,html...

操作版本:jasperreports2.0.2+ireport2.0.2

说明:本文并非入门级教程,所以阅读本文需要有一定基础.

以下针对每个知识点,讲解在ireport中是如何操作,以及在真实项目中如何部署.

1.字段,变量,参数,传参

这个知识点很简单,在ireport的 view 菜单下有 Fields,Variables,Parameters三个菜单,如要定义一个参数,可进行如下操作.

点击 Parameters 菜单,此时弹出一个操作参数的窗口,单击 New 按钮,输入参数名(Parameter Name),选择参数类型(Parameter Class Type),如要赋一个默认值则填写默认值表达式(Default Value Expression)(默认值如为字符串则以\形式填写,如为整形则以 new Integer(1) 形式填写,以此类推.),填好后,点 OK 就新建了一个参数了.

定义字段与定义参数是一样的操作,至于定义变量操作差不多,也相对少用一些,在此就不讲述.

在ireport中如何引用字段,变量,参数? 引用字段使用 $F{field_name} 引用变量使用 $V{variable_name}

引用参数使用 $P{param_name} 或 $P!{param_name}

$P!{param_name}一般用于拼接sql语句,它的值可以与sql语句拼接后,再去执行查询. 例:定义一个参数名为 where 类型为String 默认值为 \id=100\有一查询语句:select * from user $P!{where}

则执行查询时会替换成:select * from user where id=100

$P{param_name}在sql语句中使用时,也有一特殊情况.

例:有一参数名为 id,类型为Integer,默认值为 new Integer(100) 有一查询语句:select * from user where id=$P{id}

执行查询可正常查询,但如果有一参数名为 name,类型为String,默认值为\有一查询语句:select * from user where name=$P{name}

执行查询时出错,不知道为什么(即使数据库中有该条记录),不知是不是bug,还是自已哪里弄错了.解决办法是,将查询语句改为:select * from user where name='$P!{name}'

可以证明$P!{}语法,只做替换操作,如上只将$P!{name}替换成zhanngle.

也可以证明$P{}语法,在sql语句中使用时,值为数字类型还可以正常执行,如为字符串类型则会出错.

在程序中如何传参?

如上例定义了一个name参数,那么在程序中如何动态传参查询出不同的记录呢,也很简单. 程序代码如下:

Map params=new HashMap(); params.put(\

JasperPrint print=JasperFillManager.fillReport(jasper, params,conn);

就是将参数名和值put进入一map,然后再填充报表时将map传过去就行了.

2.矢量图,位图

Jasperreports支持矢量图与位图功能,是因为他封装了jfreechart(jfreechart是一个开源的图形解决方案库),使用ireport绘制矢量图或插入位图,可以不用我们写一行代码,这些

jasperreports已经为我们全部封装好了,ireport只提供了三种矢量图,分别是矩形,圆形,线条,下面先介绍如何绘制矢量图,再介绍如何插入位图.

初始工作:先新建一个空报表

绘制矩形:点击工具栏的 Rectangle 按钮,在Detail区域,绘制一个矩形,绘制方法与windows自带的画图工具一样,绘制好后,在该矩形上点右键,选属性,即可设置该矩形的属性,大家可以根据自己需要进行设置,如设置前景色,背景色...

绘制圆形与绘制线条方法一样,只需要在工具栏点相应的圆形工具或线条工具就行了. 很简单吧. 问题出现

1. 图与图之间(更具体的说法,应该是元素与元素之间)不能有任何重叠,如重叠则只能显示

最上层的图.

2. 使用线条工具可以绘制斜线,当导出为pdf文件,没有任何问题,当导出html,xls文件时,

发现斜线变成了矩形,解决方案是:使用外部图形编辑软件,绘制一条斜线,并保存为图片文件,再将这个图片文件插入到报表相应位置中.

在ireport中如何测试预览pdf,html,xls…文件?

1.首先要设置一下pdf文件有什么预览,html文件用什么预览…

点Options -> Settings -> External Programs,在弹出的窗口中填写正确的外部程序。

如我的设置如下:

External Editor: C:\\Program Files\\EditPlus 2\\editplus.exe (jrxml文件编辑器) PDF Viewer: D:\\Program Files\\Adobe\\Acrobat 7.0\\Reader\\AcroRd32.exe HTML Viewer: C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE XLS Viewer: \Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE\RTF Viewer: C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe 该步操作只要设置一次,以后就不需要再设置了。

2.设置你要预览的是什么文件,ireport默认预览的是pdf文件,但不是使用我们配制的外部程序预览的,而是使用jasperreports的JRViewer预览的。你也可以设置使用我们配制的外部程序来预览,点Build -> PDF Preview,再点Execute (empty data sour

ce)按钮,即可预览PDF文件。点Build -> HTML Preview,再点Execute (empty data source)按钮,即可预览HTML文件。

注意:任何一个报表都必须要有一个数据源来为报表提供数据。

Execute (empty data source)的意思就是构造一个只有一条记录的数据源传给报表,并且这条记录的值都是null,这个按钮在测试报表不需要数据时,非常有用。

Execute (whit active connection)的意思就是将当前激活的连接或数据源传给报表,并生成报表。 位图

插入位图也很简单,在工具栏上点击 Image 按钮,然后在 Detail 区域绘制一个”矩形”(与绘制矩形操作相同),此时可以在你绘制的区域看到一个图片,在这个图片上点右键,选属性,选 Image 选项卡,点 “Find …”按钮,选择你要插入的图片,OK后,就可以看到你要插入的图片了.

在真实项目中如何插入图片,动态改变图片?

在真实项目中可不能使用上面介绍的方法来插入图片,上面的方法只是启到 hello world 的作用,要想在真实项目中插入图片,可以按照以下方法来配制. 1. 定义一个参数名为 imageName 类型:String 没有默认值

2. 在报表设计界面中绘制一个Image,打开该Image的属性框,选Image选项卡,在Ima

ge Expression文本框中输入:$P{imageName},代表该图片的路径是由imageName的参数值来决定的,我们可以在程序中传入该参数的值. 如何在程序中传入该参数值呢? 示例代码如下:

ServletContext context=request.getSession().getServletContext(); Map params=new HashMap();

Params.put(“imageName”,context.getRealPath(“/reports/test.jpg”)); JasperPrint print=JasperFillManager.fillReport(jasper, params,conn);

传入不同的路径值即可动态改变图片

在html中如何显示图片?

当导出带有图片的报表到pdf,xls文件时,没有任何问题,但导出到html文件时,发现图片不能正常显示,不要急,jasperreports已经为我们提供了解决方案.解决步骤如下: 1.将以下代码添加到web.xml文件中

JasperreportsImageServlet

net.sf.jasperreports.j2ee.servlets.ImageServlet

JasperreportsImageServlet /servlets/image 2.程序代码按以下方式编写

ServletContext context=request.getSession().getServletContext(); Map params=new HashMap();

Params.put(“imageName”,context.getRealPath(“/reports/test.jpg”)); Map imageMap=new HashMap();

request.getSession().setAttribute(\

JasperPrint print=JasperFillManager.fillReport(jasper,params,conn); request.getSession().setAttribute(net.sf.jasperreports.j2ee.servlets.ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,print);

JRHtmlExporter exporter = new JRHtmlExporter();

exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, response.getWriter());

exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP,imageMap);


jasperreport.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:精编新版《安全员》考试题库800题(答案)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: