数据源设计
点开上图红色标记,进行当前报表的数据源的设计,我们本节写的是Sql语句
输入SQL语句,会自动读取出查询的字段信息。
点击【OK】按钮,查询出的字段都会显示在Fields下,
报表结构
报表的结构包括如下部分:Title、Page Header、Column Header、Detail、Column Footer、Page Footer、Summary.
Title:为报表的标题部分,如果报表有多页,则只显示在第一页。
Page Header :为报表每页的一个头部名称,如果报表有多页,则每页都会显示。
Column Header:可以理解成表头,如果报表有多页,则每页都会显示。
Detail:详细记录,迭代列出所有的查询结果,有多少数据都会显示出来(分页)。
Column Footer:相当于表尾,如果报表有多页,则每页都会显示。
Page Footer:与Page Header对应,每页都会显示。
Summary:报表的一些统计信息。比如共有多少页,当前是第几页等信息。
报表设计
需求:列出系统所以用户的信息(由查询的SQL决定)
1、我们从组件面板中,拖出一个 Static Text 组件来,放置在报表的Title部分,输入“用户账户清单”。
2、在Page Header 也同样拖入一个 Static Text 组件,输入“管理员”
3、展开左侧的 Report Inspector,展开Fields子项,将所有字段,拖入Detail项中,此时会发现,Column Header项中自动填充了Static Text的表头,也可以对表头进行编辑,重命名等操作。可以调整各组件的位置、大小等信息。
4、点击【预览】
预览选择PDF模式,会输出信息,说明已经在目录下生成相应的PDF文件。
打开PDF文件,我们会发现中文居然没显示,这不是坑爹吗
别着急,我们需要配置下,在iReport的classpath里面导入包含了中文的字符的jar文件,还有供Pdf使用的字符jar包。
也可以添加自己所需要的字体。
更新生成PDF的字体
然后再次生成PDF,如下
导出不同格式的报表
1、生成HTML方式
创建web项目,导入 D:\jasperreports-5.6.0\dist 下4个包
jasperreports-5.6.0.jar
jasperreports-applet-5.6.0.jar
jasperreports-fonts-5.6.0.jar
jasperreports-javaflow-5.6.0.jar
导入 D:\jasperreports-5.6.0\lib 下包
commons-beanutils-1.8.0.jar
commons-collections-3.2.1.jar
commons-digester-2.1.jar
commons-javaflow-20060411.jar
commons-logging-1.1.1.jar
groovy-all-2.0.1.jar
jackson-annotations-2.1.4.jar
jackson-core-2.1.4.jar
jackson-databind-2.1.4.jar
以及oracle的jar
ojdbc14-10.2.0.5.0.jar
导入使用ireport创建的报表文件,D:\My Documents\ireport
helloreport.jasper
所有如下:
创建测试页面 index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ page import="net.sf.jasperreports.engine.*"%><%@ page import="java.util.*"%><%@ page import="java.io.*"%><%@ page import="java.sql.*"%><% String ctxpath = request.getContextPath(); Class.forName("oracle.jdbc.driver.OracleDriver"); tring url="数据库地址"; String user="账号"; String password="密码"; Connection conn= DriverManager.getConnection(url,user,password); //ireport生成的.jasper文件的存放位置,这里为了方便放置在根目录下面 File reportFile = new File(this.getServletContext().getRealPath("/helloreport.jasper")); Map parameters = new HashMap(); try { //执行报表程序 JasperRunManager.runReportToHtmlFile(reportFile.getPath(),parameters, conn); response.sendRedirect(ctxpath+"/helloreport.html"); }catch(Exception e) { System.out.println( e.getMessage() ); } finally { try { conn.close(); } catch (Exception ex) { System.out.println( ex.getMessage() ); } } %>
部署到tomcat服务器。运行结果如下:
和我们在ireport软件下一样的哈。
2、生成PDF方式
导入:D:\Program Files (x86)\Jaspersoft\iReport-5.6.0\ireport\modules\ext
iText-2.1.7.js2.jar
iTextAsian.jar
进入D:\Program Files (x86)\Jaspersoft\iReport-5.6.0\ireport\fonts目录
使用cmd命令,打包字体成jar文件一并引入
jar cf font.jar *
创建pdf.jsp
<%@ page contentType="text/html;charset=utf-8"%><%@ page import="net.sf.jasperreports.engine.*"%><%@ page import="java.util.*"%><%@ page import="java.io.*"%><%@ page import="java.sql.*"%><%@ page import="com.lowagie.text.*"%><% String ctxpath = request.getContextPath(); Class.forName("oracle.jdbc.driver.OracleDriver"); String url="数据库地址"; String user="账号"; String password="密码"; Connection conn= DriverManager.getConnection(url,user,password); //ireport生成的.jasper文件的存放位置,这里为了方便放置在根目录下面 File reportFile = new File(this.getServletContext().getRealPath("/helloreport.jasper")); Map parameters = new HashMap(); byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,conn); response.setContentType("application/pdf"); response.setContentLength(bytes.length); ServletOutputStream outStream = response.getOutputStream(); outStream.write(bytes,0,bytes.length); outStream.flush(); outStream.close(); out.clear(); out = pageContext.pushBody(); %>
部署到服务器,运行结果:
、
导出Excel格式
1、导入jxl-2.6.10.jar
2、创建测试文件
package ireportDemo;import java.io.File; import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.JRAbstractExporter; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.export.JExcelApiExporter; public class ReportExecl { public static void main(String[] args) { File reportFile = new File( "WebRoot\\helloreport.jasper"); Map parameters = new HashMap(); Connection conn = null; FileOutputStream output = null; try { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "地址"; Class.forName(driver); conn = DriverManager.getConnection(url, "账号", "密码"); Map parameter = new HashMap(); JasperPrint report = null; report = JasperFillManager.fillReport(reportFile.getPath(), parameter, conn); JRAbstractExporter exporter = new JExcelApiExporter(); output = new FileOutputStream("D:\\excel.xls"); exporter.setParameter(JRExporterParameter.JASPER_PRINT, report); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, output); exporter.exportReport(); } catch (Exception e) { e.printStackTrace(); } finally { try { output.close(); } catch (Exception e) { e.printStackTrace(); } try { conn.close(); } catch (Exception e) { e.printStackTrace(); } } } }
结果如下: