java+ireport应用 (1)
- 格式:doc
- 大小:308.50 KB
- 文档页数:11
ireport制作复选框的办法
——JN学习心得1.首先拉一个矩形框,然后再拉一图形控件。
把他们设置大小一样。
2把图片放到矩形框中。
打开图片的属性在common中设置
new ng.Boolean($F{TransJob}.equals("1")) 其中$F{TransJob}是复选框这个字段,而equals("1")中1是复选框的值,就是说当复选框的值是1的时候显示图片。
3 选择图片,可以是预先做好的打钩或黑点。
“./”是相对路径,a.jpg就是在本文件夹内。
当然你要点FIND按钮查找页可以。
这里要注意的是,如果你想在服务器上调用这图片,也要在服务器上指定好图片的路径。
4做完上面得那些还不够,图片还是显示不了。
要把复选框字段的类型改为string.
这回你再运行就OK了。
1.1跟我学JasperReports报表框架——利用iReport工具管理Web报表的应用示例1.1.1利用iReport工具操作报表1、编译报表由于Jasperreport在运行时需要的就是一个*.jasper后缀的文件,编译过程其实就是把*.jrxml后缀的文件生成*.jasper后缀的文件。
(1)有关的菜单(2)编译过程中的状态输出(3)编译后所产生出*.java程序和*.jasper后缀的文件2、执行报表Jasperreport提供了两种运行的方式-------静态运行和动态运行,动态运行是带数据源的运行,比如带数据库运行。
前者就是静态文本运行,和数据源无关。
因此,在静态运行方式下,如果报表中出现和数据源有关的对象,则以null显示。
(1)静态运行的菜单(2)动态运行的菜单最好采用动态连接(前面已经设置了动态连接),从而能够动态地获得数据库表中的数据值。
将出现下面的结果3、预览显示报表在iReport中提供了JRViewer的预览显示方式,JRViewer是直接以C/S方式作为报表的输出格式,在JFrame框架下输出。
Jasperreport提供默认的JRViewer输出类,这是iReport 自身带的PDF格式预览。
选择其菜单然后再选择“执行报表(使用动态连结)”,将出现下面的结果4、导出为其它格式的报表iReport的出格式可以支持以下几种:PDF、HTML、CSV、JA V A2D、Excel、纯文字等形式。
选择其他格式的预览,系统会以这种格式保存到磁盘中。
保存位置读者也可以选择,在iReport菜单栏中选择Options,在其中选择Compiler标签,选择编译好的文件以及各种形式的报表保存位置。
在一些应用程序环境下,将JasperReport生成的文档从其特有的格式导出到其他更为流行的格式如PDF,HTML是非常有用的。
这样一来,其他人就可以在没有安装JasperReport 的情况下查看这些报表,特别是当这些文档要通过网络发送出去的时候。
iReport使用说明iReport使用说明1、简介iReport是一个开源的报表设计工具,基于Java开发,可用于创建和各种类型的报表。
本文档旨在提供详细的使用说明,帮助用户熟悉iReport的各项功能并正确操作。
2、安装和配置2.1 和安装Java Development Kit (JDK)2.2 并安装iReport2.3 配置iReport的环境变量3、创建新报表3.1 新建报表项目3.2 设计报表3.2.1 设置报表属性3.2.2 添加数据源3.2.3 设计报表布局3.2.4 添加报表组件3.2.5 设置数据绑定3.2.6 设置报表参数3.2.7 设计报表样式和格式4、数据源管理4.1 添加数据库连接4.1.1 添加JDBC连接4.1.2 添加JNDI连接4.2 添加自定义数据源4.3 设置查询语句4.3.1 使用SQL查询4.3.2 使用JPQL查询5、报表布局5.1 页面设置5.1.1 设置页面大小5.1.2 设置页边距5.1.3 设置纸张方向5.1.4 设置打印设置5.2 添加报表元素5.2.1 文本框5.2.2 图片5.2.3 矩形框5.2.4 表格5.2.5 图表5.2.6 子报表5.2.7 其他组件5.3 设置组件样式和属性5.3.1 设置字体和颜色 5.3.2 设置边框和背景 5.3.3 设置可见性和位置5.3.4 设置超和书签6、数据绑定6.1 绑定静态数据6.2 绑定动态数据6.2.1 单值绑定6.2.2 列表绑定6.2.3 数据表绑定6.2.4 重复区域绑定7、报表参数7.1 添加参数7.1.1 输入参数7.1.2 输出参数7.1.3 多值参数7.2 设置参数默认值7.3 使用参数表达式8、报表样式和格式8.1 设置报表样式8.1.1 标题样式8.1.2 表头样式8.1.3 页脚样式8.1.4 数据行样式 8.1.5 重复区域样式8.2 设置报表格式8.2.1 数字格式8.2.2 日期格式8.2.3 对齐方式8.2.4 条件格式化9、预览和输出报表9.1 预览报表9.2 导出报表9.2.1 导出为PDF9.2.2 导出为9.2.3 导出为Excel9.2.4 导出为Word9.2.5 导出为其他格式附件:2、数据库连接配置文件法律名词及注释:1、JDK:Java Development Kit,Java开发工具包,由Oracle 提供的用于开发Java应用程序的软件包。
iReport高级应用1.问题:IReport如何实现变量字段$F{ propertyName}赋值为一个NULL对象时不显示”null”,而现实为空白?解决方法:选中动态单元格,右键选择属性,在弹出对话框TextField选项卡中选中Blank when null,如下图所示。
思考:以往我们为IReport中变量字段赋值时会在程序或报表Textfield expression中用三目符号去判空,用IReport此功能既可以提高准确度,又可以减少工作量。
2.问题:IReport中如果动态单元格中$F{propertyName}显示的字过长,如何换行?解决方法:选中动态单元格,右键选择属性,在弹出对话框TextField选项卡中将选中Stretch With Overflow,如下图所示,思考:有很多bug都是因为动态文字($F{propertyName})显示不全而造成的,而且这些bug的修改方式也不是根本解决办法,因为就算拉长单元格对于动态字过多时也会出现同样的问题,而且现场也会出现同样的问题。
有了“动态长度超过文本框长度会自动换行”这个功能就会解决此问题。
3、问题:iReport中一个单元格由于内容太多而换行了,而其它没换行那么其显示高度肯定不一致了,如何解决换行导致的单元格对不齐问题?解决方法:把同行所有单元格的属性Stretch Type=" RelativeToBbandHheight "。
选择同一行所有单元格,点击右键选择属性,在弹出对话框Common选项卡中选中将Stretch Type 属性设为"RelativeToBbandHheight",如下图所示。
思考:有了此功能,我们使打印格式显示得更加整齐,就像一个表格框着每个单元格一样。
4、问题:iReport中当单元格中的文字出现换行跨页的情况,如何保证换行的字段能够正常显示,并且保证换行后同行的高度保持一致?解决方法:选择同行所有单元格,,点击右键选择属性,在弹出对话框Common选项卡中选中Print when detail over,如下图所示。
JasperReport那些事儿如果你还不知道jasperreport和ireport,那你可以参考我的上一篇文章,或者谷歌百度一下。
好了,废话少说,Let’s start,Go!我的环境是iReport3.0+JDK6.0。
先看看效果。
1)准备数据源,这里使用XML文件(使用UTF8编码)作为数据源。
2)打开iReport,新建一个空的模版文件。
3)加入一个静态文本(StaticText),右击属性(Property),编辑字体属性和内容。
关于Font Name 属性和PDF Font Name属性需要PMingLiu字体(下载)(将PMingLi u字体放在ireport安装目录的font文件夹下)或者你可以选择其他字体,例如宋体,PDF Font Name 选STSong-Light。
4)接下来就要做表格部分,新建一个子报表(subreport),除了第二步选择No C onnection or datasource,基本上只要点Next就行了。
5)完成上一步后就会跳到子报表NameList_subreport0的视图,其实子报表也是一个独立的报表。
但是你现在只能看到一个叫Detail的区域(band)。
我们还需要更多的区域来结合完成表格的制作。
调出区域管理器(菜单View->Bands),将column header 和column footer的高度(height)设为20.6)在column header加入三个静态文本(StaticText),字体属性和之前的一样,分别加入内容姓名,性别,年龄。
在detail区域加入三个文本(textField),在column fo oter加入一个文本,字体属性和StaticText保持一样。
然后设置所有静态文本和文本的边框,如图。
现在的textField都是没有数据的,那么怎么填充数据呢?现在我们来看怎么配置数据源和填充数据。
7)菜单data->connections/datasource,新建一个XML datasouce,目录位置指向之前建立的XML文件。
iReport使⽤指南及常见功能⽰例详解⽬录报表结构数据源⽰例3.1 简单⽰例3.2 分组⽰例3.3 ⼦表⽅式分组查看3.4 图表⽰例3.4.1 饼图3.4.2 柱状图3.5交叉报表在使⽤ireport的过程中,因为各种功能都要百度,但是⼤家使⽤的例⼦⼜千差万别让⼈很苦恼,所以⽤⼀个简单例⼦贯穿的展⽰⼀下ireport的常见功能。
我使⽤的是iReport 3.5.1,使⽤的⽰例数据表如图:sales表:(⼈名、⼤致结构来⾃帆软电⼦⽂档,如有雷同,⽆意冒犯)sellers表:下⾯开始介绍:报表结构左边是view区,联系着主设计区中的各个band区域的数据,以及参数、变量等。
中间是主设计区,通过拖拽控件⾯板可以在此区域进⾏设计,有三种模式:设计(Designer)、源码(Xml)、预览(Preview),设计模式是可视的,源码⽅式可以直接在上修改,预览是对设计好的报表样式进⾏预览,也是⼀个编译的过程;右边是控件⾯板和属性⾯板,可以在此使⽤控件和设置属性。
JasperReport有三个⽅式来保持数据:Field、Paramrter、Variables。
⼀般情况下,Field是⽤作保存从数据源取出来的数据,⽤法是;Parameter是⽤来占位—我们在设计时往往不知道具体的值,那么⽤⼀个参数来占住它们的位置,在执⾏时,从程序或者数据库中传递对应的参数过来,从⽽实现⼀个动态的过程,⽤法是Variables是变量,可以将变量⽤于TextFild表达式中,也可以设置它的属性,使它具有⼀些功能,如求和,求平均数等,⽤法是数据源ireport提供很多种数据源的连接⽅式,点上⽅的数据库标识就可以设置数据库,下⽅的数据标识⽤来写SQL语句获取数据。
我们这⾥选择jdbc数据连接,mysql连接语句,数据库名称是testtest⼀下是否连通,输⼊数据库密码以后,如果成功会出现提⽰:⽰例3.1 简单⽰例⾸先连接数据库表sales:点击ok,这时左侧view窗⼝的field区域就得到了取到的数据:这时,在主设计区域拖拽静态⽂本控件:在column header区域添加列名,然后拖动左侧的field字段到detail域相应的列名下:3.2 分组⽰例有时候我们需要分组来观察数据,这时就需要group,我们以区域id来分组,需要注意的是,如果使⽤group分组,需要在⼀开始的sql语句中加上order by语句,否则ireport是不会⾃动分组的。
ireport制作报表的流程:首先,我们用ireport设计报表的样式,通过编译生成.jasper文件,为java做准备。
其次,我们在java中定义report公共类,来解析.jasper文件。
最后,通过流输出到页面显示。
1.用ireport设计简单报表:在这里我们选用ireport3.0,因为3.0比较稳定。
1.1,首先,新建一个报表文件,如下图:有title、pageHeader、columnHeader......等等栏。
1.2,title栏是用来放置标题的;pageHeader栏是放副标题和日期等;columnHeader栏是放表头的;detail栏是放详细信息(向下遍历数据显示);summary栏是放置图和交叉报表的;左下角的文件结构有“参数”、“字段”和变量,参数是用来定义一些静态文本的,可以通过后台进行传值,字段是定义VO的属性,变量是用来参与运算的;1.2.1首先我们来定义一个参数叫做title,选择参数--->"添加"----->parameter,如下图:在弹出的对话框的参数名中输入title后点击确定,然后将title参数拖拽到title栏中,如下图:在这里我们可以设置title的字体、大小和位置等。
1.2.2用同样的方法我们建立两个字段:username和password:分别拖拽到detail栏中,并调整大小、位置和边界:接下来我们可在对于的列上加上表头:点击工具栏的“T”静态文本,在columnHeader栏中画出:以上一个简单的报表就画好了,我们点击工具栏的“执行报表”按钮,编译成.jasper文件。
1.3,接下来我们定义java类Reports.java:import java.io.ByteArrayOutputStream;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import .URLEncoder;import java.util.ArrayList;import java.util.List;import java.util.Map;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.jasperreports.engine.JRException;import net.sf.jasperreports.engine.JRExporterParameter;import net.sf.jasperreports.engine.JasperFillManager;import net.sf.jasperreports.engine.JasperPrint;import net.sf.jasperreports.engine.JasperReport;import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;import net.sf.jasperreports.engine.export.JExcelApiExporter;import net.sf.jasperreports.engine.export.JRHtmlExporter;import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;import net.sf.jasperreports.engine.export.JRXlsExporterParameter;import net.sf.jasperreports.engine.util.JRLoader;public class Reports {/**//** 生成HTML报表显示*/public void selectHtmlReport(List list,HttpServletResponse response,String url,Map map){response.setContentType("text/html;charset=utf-8");File reportFile = new File(url);JasperReport jasperReport = null;try {jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath()); } catch (JRException e) {e.printStackTrace();}JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(list); JasperPrint jasperPrint = null;try {jasperPrint = JasperFillManager.fillReport(jasperReport,map,jrbean);} catch (JRException e) {e.printStackTrace();}JRHtmlExporter exporter = new JRHtmlExporter();PrintWriter out = null;try {out = response.getWriter();} catch (IOException e) {e.printStackTrace();}exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_R OWS,Boolean.TRUE);try {exporter.exportReport();} catch (JRException e) {e.printStackTrace();}}/**//** 导出EXCEL报表*/public void selectExcelReport(List list,HttpServletResponse response,String url,Map map,String reportName){try{//加载jasper文件File reportFile = new File(url);JasperReport jasperReport =(JasperReport)JRLoader.loadObject(reportFile.getPath());//装载数据JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(list);//构造jasperPrint对象JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, jrbean);//输出流ByteArrayOutputStream oStream = new ByteArrayOutputStream();//构造输出对象JExcelApiExporter exporter = new JExcelApiExporter();exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"./image?image=" );exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEE N_ROWS,Boolean.TRUE); // 删除记录最下面的空行exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolea n.FALSE);// 删除多余的ColumnHeaderexporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boo lean.FALSE);// 显示边框exporter.exportReport();//excel文件名String fileName = reportName + ".xls";response.reset();response.setHeader("Content-Disposition", "attachment;filename=\"" + URLEncoder.encode(fileName,"utf-8") + "\"");//写输出流byte[] bytes = oStream.toByteArray();if(bytes != null && bytes.length > 0) {response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setContentLength(bytes.length);ServletOutputStream ouputStream = response.getOutputStream();ouputStream.write(bytes,0,bytes.length);ouputStream.flush();ouputStream.close();}else{}}catch(Exception ex){ex.printStackTrace();}}/*** 功能:生成默认图形报表的处理方法* 方法名:selectHtmlReport* @param List list 数据集* @param HttpServletResponse response* @param HttpServletRequest request* @param String url 解析的报表文件* @param Map map 报表用的参数* @author 郭洪治 2010-03-15* @return void*/public void selectHtmlReport(List list,HttpServletResponseresponse,HttpServletRequest request,String url,Map map){response.setContentType("text/html;charset=utf-8");File reportFile = new File(url);JasperReport jasperReport = null;try {jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());} catch (JRException e) {e.printStackTrace();}JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(list);JasperPrint jasperPrint = null;//设置报表图形默认存放物理目录String outPutDir =request.getSession().getServletContext().getRealPath("/")+"/reportimg/";//加载图形报表的相对目录String sourceDir = request.getContextPath()+"/reportimg/";try {File file = new File(outPutDir);//判断此目录是否存在if(!file.exists()){file.mkdir();}jasperPrint = JasperFillManager.fillReport(jasperReport,map,jrbean);} catch (JRException e) {e.printStackTrace();}JRHtmlExporter exporter = new JRHtmlExporter();PrintWriter out = null;try {out = response.getWriter();} catch (IOException e) {e.printStackTrace();}exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR_NAME,outPutDir);exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,sourceDir);exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.TRUE);exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);try {exporter.exportReport();} catch (JRException e) {e.printStackTrace();}}/*** 功能:生成指定目录图形报表查询的处理方法* @param List list 数据集* @param HttpServletResponse response* @param HttpServletRequest request* @param String url 解析的报表文件* @param Map map 报表用的参数* @param String imgDir 图形生成的目录* @author 郭洪治2010-01-20* @return void*/public void selectHtmlReport(List list,HttpServletResponseresponse,HttpServletRequest request,String url,Map map,String imgDir){response.setContentType("text/html;charset=utf-8");File reportFile = new File(url);JasperReport jasperReport = null;//生成图形目录String outPutDir =request.getSession().getServletContext().getRealPath("/")+"/"+imgDir;//图形源目录String sourceDir = request.getContextPath()+"/"+imgDir;try {jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath()); } catch (JRException e) {e.printStackTrace();}JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(list); JasperPrint jasperPrint = null;try {jasperPrint = JasperFillManager.fillReport(jasperReport,map,jrbean);} catch (JRException e) {e.printStackTrace();}JRHtmlExporter exporter = new JRHtmlExporter();PrintWriter out = null;try {out = response.getWriter();} catch (IOException e) {e.printStackTrace();}//设置图片存入的物理目录exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR_NAME,outPutDir);//设置图片显示的目录exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,sourceDir);//生成图片到目录exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.TRUE);exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_R OWS,Boolean.TRUE);try {exporter.exportReport();} catch (JRException e) {e.printStackTrace();}}/*** 功能:导出多sheet报表的处理方法* 方法名:selectAllExcelReport* @param List list 数据集* @param HttpServletResponse response* @param String url 解析的报表文件* @param String reportName 生成excel保存的名字* @author 郭洪治* 创建时间:Nov 3, 2009 2:08:31 PM*/@SuppressWarnings("unchecked")public void selectAllExcelReport(List list,HttpServletResponse response,String url,String reportName){try{//加载jasper文件File reportFile = new File(url);JasperReport jasperReport =(JasperReport)JRLoader.loadObject(reportFile.getPath());List jasperPrintList = new ArrayList();int listSize = list.size();String sheetNamesArray[] = new String[listSize];for(int i = 0; i < listSize; i++){Map eachMap = (Map)list.get(i);List eachList = (List)eachMap.get("ls");sheetNamesArray[i] = (String)eachMap.get("title");//装载数据JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(eachList); //构造jasperPrint对象JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, eachMap, jrbean);jasperPrintList.add(jasperPrint);}//输出流ByteArrayOutputStream oStream = new ByteArrayOutputStream();//构造输出对象JExcelApiExporter exporter = new JExcelApiExporter();exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"./image?image=" );exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEE N_ROWS,Boolean.TRUE); // 删除记录最下面的空行exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolea n.FALSE);// 删除多余的ColumnHeaderexporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boo lean.FALSE);// 显示边框exporter.setParameter(JRXlsExporterParameter.SHEET_NAMES, sheetNamesArray);exporter.exportReport();//写输出流byte[] bytes = oStream.toByteArray();if(bytes != null && bytes.length > 0) {response.reset();response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setContentLength(bytes.length);//excel文件名String fileName = reportName + ".xls";response.setHeader("Content-Disposition", "attachment;filename=\"" + URLEncoder.encode(fileName,"utf-8") + "\"");ServletOutputStream ouputStream = response.getOutputStream();ouputStream.write(bytes,0,bytes.length);ouputStream.flush();ouputStream.close();}}catch(Exception ex){ex.printStackTrace();}}}1.4,在action中调用:Map<String,String> parameters = new HashMap<String,String>();//定义参数mapparameters.put("title", "我的报表"); //添加参数String url = “WEB-INF/report/test.jasper";//定义报表文件路径Reports report = new Reports();//创建报表类对象report.selectHtmlReport(list, response, url, parameters);//调用生成表方法其中list是从数据库中查询的值,放的是VO对象,VO对象的属性和.jasper报表文件中定义的字段要一一对应。