安全配置向导:iReportweb开发配置向导(二)

四、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的例子:pdf.jsp
<%@page c%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page import="net.sf.jasperreports.engine.*"%>
<%@page import="java.util.*"%>
<%@page import="java.io.*"%>
<%@page import="java.sql.*"%>
<%
System.out.println("chenggong");
File reportFile = new File(application.getRealPath("ireports/report3.jasper "));
System.out.println(reportFile.getPath());
Map parameters = new HashMap();
parameters.put("getId", "50");
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@*", "*", "*");
System.out.println("连接数据库成功");
}
catch (Exception e) {
System.out.println(e);
}
//JasperRunManager run = new JasperRunManager();
System.out.println("abc");
byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, conn);
System.out.println("def");
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
%>
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的例子:xls.jsp
<%@ 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";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@*:*", "*","*");

//装载jasper文件application
File exe_rpt = new File(application.getRealPath("/ireports/report3.jasper"));

//rowid就是iReport的变量$P{rowid}的名称
Map parameters = new HashMap();
parameters.put("getId", "50");

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报表
没有意义,不想不写:tohtml.jsp
<%@page session="false"%>
<%@page import="net.sf.jasperreports.engine.*"%>
<%@page import="javax.naming.*"%>
<%@page import="java.sql.*"%>
<%@page import="javax.sql.*"%>
<%@page import="java.util.*"%>
<%@page import="java.io.*"%>
<html>
<head>
<meta http-equiv="Content-Type" c>
<title></title>
<%
DataSource ds = null;
try {
// InitialContext ctx = new InitialContext();
//ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
//Connection conn = ds.getConnection();
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@*:*", "*","*");
//装载jasper 文件
File business_rpt = new
File(application.getRealPath("/ireports/report3.jasper"));
//配置参数,可以参考《第二部分:使用Jasperreport 作为报表控件开发胖客户端报表应用》
// http://blog.csdn.net/jemlee2002/archive/2004/10/08/JJem3.aspx
//ProjectName 就是iReport 的变量$P{ProjectName}的名称,
//参考第一部分的5.6 添加参数和使用参数
//proname 就是从界面上获取的值。
Map parameters = new HashMap();
parameters.put("getId", "50");
// JasperRunManager是一个输出控制管理类,下文会提及部分内容
JasperRunManager.runReportToHtmlFile(business_rpt.getPath(), parameters, conn);
//如果创建报表成功,则转向该报表,其实可以把报表套在框架内,这样实现比较有意义的报表格式。
response.sendRedirect("/ireport/ireports/report3.html");
}
catch (Exception ex) {
out.print("出现例外,信息是:" + ex.getMessage());
ex.printStackTrace();
}
%>
</head>
<body></body>
</html>
4.4把报表直接输出到word
我认为这是采用web方式的OA做报表的好方式。制作简单,只要修改原jsp文件,把输出方式该成调用word就行 。那么输出的报表直接调用word,运行是会弹出对话框问是否打开还是保存,选择打开,ie就直接调用word, 那客户就可以在word里直接编辑输出的报表了。
jsp文件修改的地方:<%@ page c %>
就是修改contentType的值。
例子:mytest.jsp
<%@ page c %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>报表></title>
</head>
<body bgcolor="#FFFFFF">
<center><h1>报表</h1></center>
<table border=1 cellspacing=0 cellpadding=0 bordercolor=#000000 align=center>
<tr>
<td>用户名</td>
<td>真实姓名</td>
<td>性别</td>
</tr>
<%
java.sql.Connection sqlCon; //数据库连接对象
java.lang.String strCon; //数据库连接字符串
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
//连接user数据库
strCon ="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=kenoah" ;
//连接数据库
sqlCon = java.sql.DriverManager.getConnection(strCon,"sa","sa");
Statement stmt=sqlCon.createStatement();
ResultSet rs=stmt.executeQuery("select * from kenoahuser ");
//查询user表
while(rs.next()){
%>
<tr>
<td><%= rs.getString("fullname") %></td>
<td><%= rs.getString("mobile") %></td>
<td><%= rs.getString("workemail") %></td>
</tr>
<% } %>
<%
rs.close();
stmt.close();
sqlCon.close();
%>
</table>

五、备注
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/


JasperReport有如下几个主要的Manager:
JasperCompileManager
将jrxml文件编译成jasper文件或JasperReport对象
JasperFillManager
从数据源中获取数据并填充jasper文件或JasperReport对象,产生JasperPrint对象
JasperPrintManager
将JasperPrint对象直接输出到打印机打印
JasperExportManager
将JasperPrint对象导出成PDF或HTML文件(或流)
JasperRunManager
运行一个jasper文件或JasperReport对象并输出到PDF或Html文件(或流)中,我的理解是等于集成了JasperFillManagerJasperExportManager的功能
对于上述对象的详细说明请参阅JasperReport的文档。
例程:
public static void main(String[] args) {
try {
Class.forName("org.gjt.mm.mysql.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://wes:3306/umpdb?useUnicode=true&characterEncoding=GBK", "root", "elite");
File f1 = new File("Account.jrxml");
File f2 = new File("Contact.jrxml");
JasperReport main = JasperCompileManager.compileReport(f1
.getAbsolutePath());
JasperReport report = JasperCompileManager.compileReport(f2
.getAbsolutePath());
Map props = new HashMap();
props.put("subreport", report);
JasperPrint print = JasperFillMan
Tags:  开发环境配置 安全配置向导

延伸阅读

最新评论

发表评论