`
wgcode
  • 浏览: 599321 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JSP 实现报表打印

    博客分类:
  • Java
阅读更多
iReport_web开发配置向导- -
                                      
一、iReport简介

 说到iReport不得不先介绍Jasperreport,Jasperreport是一个报表制作程序,用户需要按照它制定的规则编写一个XML文件,然后得到用户需要输出的格式文件。它支持输出的文件格式包括PDF,HTML,XML,XLS,CVS等等。而iReport就是一个制作Jasperreport的XML文件的可视化开发工具。只是一个UI。

二、安装说明

 2.1 基本安装
 现在最新的版本是iReport 0.5.1 (Aug 27, 2005).
 下载后解压然后在根目录双击iReport.bat就可以用了,但是为了可以使用external ttf font还必须要把 iReport-0.5.1/fonts 加到环境变量里面去。
 
 2.2 了解制作报表用的包
 下载后到到 iReport-0.5.1/lib 里看看,你就可以发现iReport的真面目了。
 (1)  jasperreports-1.0.1.jar
 jasperreports是iReport的核心内容。它是一个强力的报表产生工具,他有能力描述丰富内容到屏幕上、到打印机或到PDF, HTML, XLS, CSV和XML文件。它完全用Java编写的,并可在各种Java应用(包括J2EE或WEB应用)中用来产生动态内容。它的主要目的是以一种简单而灵活的方式来帮助创建导向的页面。
 JasperReports组织根据在一个XML文件中定义的报表设计通过JDBC来接受来自一个关系数据库中的数据. 为了以数据来填充报表,报表设计必须首先被编译。
 jasperreports的官方网站:http://jasperreports.sourceforge.net/
(2) itext-1.3.1.jar
 iText是一个开放源码的Java类库,是用来生成PDF文件的。
 iText的官方网站:http://itext.sourceforge.net
 如果要在生成的pdf文件显示中文等亚洲字符,还必须下载itext的亚洲字符包。
 tTextAsian的官方下载地址:http://itextdocs.lowagie.com/downloads/iTextAsian.jar
  
(3) jfreechart-1.0.0-rc1.jar
 jfreechart是一款免费的、功能强大的统计图生成工具,可以直接生成PNG,JPG等各式的文件。
 这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
 jfreechart的官方下载地址:http://www.jfree.org/jfreechart/
   
(4) jcommon-1.0.0-rc1.jar
 JCommon是一组有用的classes集合.它已经用在JFreeChart,JFreeReport与其它项目上. 这个类库包含了以下功能: 文本工具类(text utilities), 用来显示关于应用程序信息的用户界面类,布局定制管理器,一个日期选择面板,序列化工具类,XML解析器支持类.
 jcommon的官方下载地址:http://www.jfree.org/jcommon/
(5) poi-2.0-final-20040126.jar
 Apache的Jakata项目的POI子项目,目标是处理ole2对象。目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。
 直接调用poi包的不是ireport,而是jasperreport。
 poi的官方下载地址:http://www.apache.org/dyn/closer.cgi/jakarta/poi/
 
 这些是用来制作报表用的包,所以可以用最新的版本来代替原有包。但是务必保持与项目中的包一致,因为很多开源的项目都不向下兼容。(例如jasperreport)
 

三、制作jrxml、jasper

 3.1 选择语言
 Tools->Option->General->Language
 3.2 连接数据库
 资料来源->连结/资料来源
 如果要使用mysql以外的数据库,要保证jdbc包在环境变量里。放到iReport-0.5.1/lib 下也可以。name相当于一个JNDI。添好后点击test按钮如果显示成功就可以执行下一步了。
 3.3 新建一个Report
 定位可以控制报表是横向的还是纵向的。Portrait是纵向,Landscape是横向。
 边距是可以调整的。
 
 3.4 基本域
 title域用来放报表的总标题
 pageHeaher域顾名思义页头
 columnHeader域是用来放static text的,也就是不循环的部分。
 detail域是用来放text field的,也就是循环部分。
 pageFooter域是用来放本页的统计参数的。
 summary域是用来放整个表的统计参数的。
 
 可以直接调整每个域的长度,也可以通过Band properties来调整。当然总长度是不会超过页面的原长。
 
 3.5 报表查询
 3.5.1 为报表添加SQL查询语句
 资料来源->报表查询
 在Report SQL query里填写SQl语句。如果语句正确,在下面的field里就会显示正常的表字段。
 
 3.5.2 为报表添加动态字段
 预览->报表字段
 把fields里的字段直接拖到报表上就行了。
 
 3.5.3 为SQL语句添加参数
 预览->报表参数
 在parameters里新增一个参数
 paratemeter name 是参数名,在SQL语句里写成"$P{参数名}"
 paratemeter class type里选择参数类型。
 注意:如果是int型的数据,最好在报表字段里将该字段的Class type改成java.lang.String型的。
 另外一种办法,不管该字段原来是什么数据类型,直接在paratemeter class type里选择java.lang.String类型,然后在Default value expression 填写"Integer.toString(整数)"。
 
 3.5.4 添加报表变量
 预览->报表变量 $V{变量名}
 
 3.5.5 处理字体
 3.5.5.1 基本设置
 选中字段->右键->properties->font(双击也可以)
 Report font 选择全局的字体(仅限于该报表)
 Font name 选择在ireport里面显示的字体
 Pdf font name 选择在pdf里面显示的字体
 Rotation 选择内容是否旋转(很有用的选项)
 PDF Encoding 中文要用UniGB-UCS2-H,外部字体要选Identity-H
 
 3.5.5.2 选择外部字体
 第一步 先在Pdf font name里选择External TTF font,然后在下面的Ture Type font里选择外部字体,当然要用的外部字体放在iReport-0.5.1/fonts目录下面。
 第二步 在web项目的WEB-INF/classes/下面放要用到的外部字体,才能在程序里正常显示。
 
 3.5.5.3 设定该报表的全局字体
 预览->报表字型
 
 3.6 编译jrxml
 建立->编译
 编译后生成一个后缀名为jasper的binary文件,可以直接给程序调用。
 

四、web项目应用
 4.1 jsp输出PDF报表
 
 4.1.1 需要放到项目里的包
 itext-1.3.1.jar
 iTextAsian.jar
 jasperreports-1.0.1.jar
 
 4.1.2 输出PDF注意事项:
 
 4.1.3 jsp输出PDF的例子
 
 <%@ page import="java.sql.*" %>
 <%@ page import="java.util.*" %>
 <%@ page import="java.io.*" %>
 <%@ page import="net.sf.jasperreports.engine.JasperFillManager" %>
 <%@ page import="net.sf.jasperreports.engine.JasperPrint"%>
 <%@ page import="net.sf.jasperreports.engine.JRException"%>
 <%@ page import="net.sf.jasperreports.engine.JasperRunManager"%>//pdf
 
 <%
  String rowid = "1";//初始化变量
  
  Connection conn= DriverManager.getConnection("proxool.test");//从数据源连接数据库
  
  //装载jasper文件application
  File exe_rpt = new File(application.getRealPath("/reports/test.jasper"));
  
  //rowid就是iReport的变量$P{rowid}的名称
  Map parameters = new HashMap();
  parameters.put("rowid",rowid);
 
  try{
   // fill
   JasperPrint jasperPrint = JasperFillManager.fillReport(exe_rpt.getPath(),parameters,conn);
   
   // 生成pdf
   byte[] bytes = JasperRunManager.runReportToPdf(exe_rpt.getPath(),parameters,conn);
  
   response.setContentType("application/pdf");
   response.setContentLength(bytes.length);
   ServletOutputStream ouputStream = response.getOutputStream();
   ouputStream.write(bytes,0,bytes.length);
   ouputStream.flush();
   ouputStream.close();
   
   conn.close();
   }catch(JRException ex){
   out.print("Jasper Output Error:"+ex.getMessage());
  }
 %>
 
 4.2 jsp输出EXCEL报表
 
 4.2.1 需要放到项目里的包
 jasperreports-1.0.1.jar
 poi-2.0-final-20040126.jar
 
 4.2.2 输出excel要注意的:
 (1) 输出excel报表必须fields的边界刚好填充满整个页面,不然会有大量的空白出现。
 (2) 删除记录最下面的空行需要加上参数
 exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
 (3) 删除多余的ColumnHeader需要加上参数
 exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);
 (4) 在ireport里给fields加上border,那输出的excel就会有很黑的边框,跟excel默认的灰度边框就会很不协调。但是如果不加border,在输出的excel里就不会显示每个表格的边框。
 解决方法是:
 第一步 在选中字段->右键->properties->Common->Transparent 打上勾。
 第二步 在输出的jsp页面加上参数
 exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);
 
 4.2.3 jsp输出EXCEL的例子
 <%@ page import="java.sql.*" %>
 <%@ page import="java.util.*" %>
 <%@ page import="java.io.*" %>
 <%@ page import="net.sf.jasperreports.engine.JasperFillManager" %>
 <%@ page import="net.sf.jasperreports.engine.JasperPrint"%>
 <%@ page import="net.sf.jasperreports.engine.JRException"%>
 <%@ page import="net.sf.jasperreports.engine.JRExporterParameter"%>//excel
 <%@ page import="net.sf.jasperreports.engine.export.JRXlsExporterParameter"%>//excel
 <%@ page import="net.sf.jasperreports.engine.export.JRXlsExporter"%>//excel
 
 <%
  String rowid = "1";
  Connection conn= DriverManager.getConnection("proxool.test");
 
  //装载jasper文件application
  File exe_rpt = new File(application.getRealPath("/excel/test_excel.jasper"));
  
  //rowid就是iReport的变量$P{rowid}的名称
  Map parameters = new HashMap();
  parameters.put("rowid",rowid);
  
  try{
 
   // fill
   JasperPrint jasperPrint = JasperFillManager.fillReport(exe_rpt.getPath(),parameters,conn);
   
   // excel输出
   ByteArrayOutputStream oStream = new ByteArrayOutputStream();
  
    JRXlsExporter exporter = new JRXlsExporter(); 
   
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);
    exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE); // 删除记录最下面的空行
    exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);// 删除多余的ColumnHeader
    exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);// 显示边框
    exporter.exportReport();
   
   byte[] bytes = oStream.toByteArray();
   
   if(bytes != null && bytes.length > 0) {
    response.reset();
    response.setContentType("application/vnd.ms-excel");
     response.setContentLength(bytes.length);
    ServletOutputStream ouputStream = response.getOutputStream();
    ouputStream.write(bytes,0,bytes.length);
    ouputStream.flush();
    ouputStream.close();
  
   }else{
    out.print("bytes were null!");
   }
   
   conn.close();
   }catch(JRException ex){
   out.print("Jasper Output Error:"+ex.getMessage());
  }
 
 %>
 
 4.3 jsp输出html报表
 没有意义,不写。
五、备注

 5.1 下载地址
 iReport的官方网站:http://ireport.sourceforge.net/
 jasperreports的官方网站:http://jasperreports.sourceforge.net/
 tTextAsian的官方下载地址:http://itextdocs.lowagie.com/downloads/iTextAsian.jar
 jfreechart的官方下载地址:http://www.jfree.org/jfreechart/
 jcommon的官方下载地址:http://www.jfree.org/jcommon/
 poi的官方下载地址:http://www.apache.org/dyn/closer.cgi/jakarta/poi/
AUTHOR:  JOMPER    2005.10.22
分享到:
评论
2 楼 吉米家 2015-01-27  
感觉帆软报表的flash打印就很不错哇,特别好用
1 楼 程俊2009 2012-02-25  
这些是用来制作报表用的包,所以可以用最新的版本来代替原有包。但是务必保持与项目中的包一致,因为很多开源的项目都不向下兼容。(例如jasperreport)
现在 最新版本jasperreports-3.7.4.jar  运行出 java.lang.NullPointerException
at net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImage.java:1034)
at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:1004)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:258)
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:499)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillBackground(JRVerticalFiller.java:1800)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:259)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:127)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:942)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:841)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:58)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247)
at org.apache.jsp.testReport_jsp._jspService(testReport_jsp.java:118)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
jasperreports-1.0.1.jar 这个jar 找不到 ,要不你给个可下载的例子出来吧

相关推荐

    JSP报表打印的一种简单解决方案

    本文介绍了一种基于JSP的简单报表打印解决方案,该方案通过利用日常办公软件如Microsoft Word或Excel来设计报表模板,并通过简单的JSP脚本实现报表数据的填充和打印。 #### 报表样式设计 首先,需要在Microsoft ...

    报表与打印(jsp).rar

    在这个"报表与打印(jsp).rar"压缩包中,很可能是包含了一组与JavaServer Pages (JSP)技术相关的资源,用于实现报表的生成和打印功能。 首先,我们来深入了解一下报表。报表通常由一系列的数据和图表组成,它们可以...

    JSP 报表打印的一种简单解决方案

    本文提出了一种基于JSP实现报表打印的简单解决方案。通过这个方法,开发者可以在JSP页面中嵌入报表数据,使用相关的技术实现打印功能。接下来,我们将详细探讨这个方案中涉及到的各个知识点。 1. 制作报表样式:...

    打印功能(jsp报表)

    ### 打印功能(JSP报表) #### 背景与目的 在当今信息化时代,将数据以报表形式呈现出来并支持打印是许多Web应用程序的基本需求之一。...掌握了这些技能后,就可以轻松地为Web应用添加报表打印的功能了。

    WEB应用中报表打印的实现

    本文将探讨在Web应用中如何实现报表打印,特别是在不使用ActiveX控件的条件下。 首先,我们来看一个基于ASP(Active Server Pages)的例子。在ASP中,可以通过ADO(ActiveX Data Objects)与数据库进行交互,获取...

    自定义报表打印JSP源程序代码

    本资源提供了一个基于JSP(Java Server Pages)的自定义报表打印源程序代码,这为开发者提供了极大的灵活性和便利性。JSP是一种动态网页技术,它可以将Java代码嵌入到HTML页面中,使得服务器端能够处理数据并返回...

    Java Jsp 调用ireport动态模板打印

    Java JSP调用iReport动态模板打印是一种在Web应用程序中实现报表打印的常见技术。iReport是一款开源的报表设计工具,它可以与Java、JSP、Servlets等进行集成,为开发者提供灵活的报表生成和打印功能。在这个场景下,...

    jsp中如何实现水晶报表

    实现报表展示 报表的展示通常依赖于JSP页面中的脚本代码。开发者需要编写相应的JSP代码来调用水晶报表的API,从而加载并渲染报表。这包括设定报表参数、查询数据库、填充数据集以及最终呈现报表内容。 #### 4. ...

    报表打印模块

    在本教程中,我们将深入探讨报表打印模块的设计与实现,重点涉及使用JavaServer Pages(JSP)技术进行开发的相关知识。 一、报表的基本概念与类型 报表通常分为静态报表和动态报表。静态报表是一次性生成,内容固定...

    jsp 分页 局部打印 技术 的实现

    ### jsp分页局部打印技术实现详解 在Web开发中,特别是使用JSP进行页面设计时,分页和打印功能是提升用户体验的重要方面。本文将深入探讨如何在JSP页面中实现分页局部打印,主要关注的技术点包括:JSP分页原理、...

    JavaWeb开发技术方案宝典--报表打印方案(报表打印方案要点代码)

    本方案宝典着重探讨了如何在JavaEE环境中高效地实现报表打印,旨在为开发者提供一系列实用的技术选择和最佳实践。以下是针对报表打印方案的重点内容: 1. **JasperReports**: JasperReports是一款开源的报表工具,...

    vb6.0listview控件打印报表

    考虑到压缩包文件名称“报表打印”,我们可以推测其中可能包含了使用VB6的ListView控件实现报表打印的示例代码、教程文档或者是相关资源。这些文件可能详细介绍了如何设置和配置ListView控件,如何处理数据,以及...

    JSP打印\JAVA的JSP打印代码

    #### 四、报表打印逻辑 1. **确定打印范围**: - 确定报表每页打印的行数以及总的打印行数。 ```java int PrintRowCount = RowCount; // 每页打印的行数 int PageRowCount = 16; // 一页需要打印的行数 int ...

    jsp打印功能有列子源代码.rar

    在JSP中实现打印功能,可以让用户方便地将网页内容输出到打印机,这对于报表生成、文档分享等场景非常实用。本教程将通过一个具体的例子深入解析JSP的打印功能。 首先,我们需要理解JSP页面的基本结构,它由HTML...

    html,jsp操作页面打印例子

    在网页开发中,有时我们需要为用户提供打印功能,例如打印网页内容、报表或其他文档。这个"html,jsp操作页面打印例子"就是一个很好的学习资源,它涵盖了如何在HTML和JSP页面中实现这一功能的关键知识点。 首先,...

    japser实现批量打印

    你可以通过查看源代码和配置文件,了解如何集成iReport设计的报表到Java应用中,以及如何实现批量打印功能。 总的来说,JasperReports和iReport的组合为开发者提供了一套强大的报表解决方案,不仅可以用于单一报表...

    Java Web开发技术方案宝典-报表打印

    - **Word打印**: 在JSP中可以通过调用Word的对象模型来实现报表打印。关键对象包括Application对象、Document对象和Range对象等。例如,`Application`对象提供了一系列的方法和属性来操作文档,如`ActiveDocument`...

Global site tag (gtag.js) - Google Analytics