- 报表
- 无参数的Ext.XTemplate
- js页面这样写产生报表页面 需要导入jasperreports-2.0.3.jar包
var RptHtml = CommPrintReport( '../rpt/Rpt01Action!PrintReportData.action', params, reportHeight, reportWidth);
// 4.通过模板映射到web页面的div
var TptTpl = new Ext.XTemplate(RptHtml); //模版,自定义组件
TptTpl.overwrite('id_rpt01_rpt'); //id_rpt01_rpt 是在页面中要插入的组件id号
// 打印报表:【src:action路径】【 params:参数】
// 【frameHeight:Iframe高度】【frameWidth:Iframe宽度】
function CommPrintReport(src, params, frameHeight, frameWidth) {
var paramStr = src;
if (null != params) {
Ext.each(params, function(items, index) {
if (index > 0) {
paramStr += '&';
} else if (index == 0) {
paramStr += '?';
}
paramStr += items.key + '=' + items.value;
});
}
var StrPrint = '<Iframe height = ' + frameHeight + ' width = ' + frameWidth
+ ' src="' + paramStr + '"></iframe>';
return StrPrint;
};
- java程序中这样写,结合数据库产生报表
第一步
通过jndi获得上下文对象,调用该对象的lookup()方法,获得数据源对象ds,通过数据源得到连接对象con,实例化HttpServletRequest,HttpServletResponse对象
第二步
通过文件路径(jasper)创建File对象,创建map对象,并将“SQLSTR”(这个是报表需要的参数对象,与值)参数添加进去,接着判断是否还有其他的参数,都添加
第三步
调用JasperRunManager对象的runReportToPdf()方法,得到buty字节数组,
通过调用response对象的setContentType设置内容类型。
第四步
通过ServletOutputStream 对象流将内容写出来
ServletOutputStream outStream = response.getOutputStream();
outStream.write(bytes, 0, bytes.length);// /写入对象输出流中
outStream.flush();
outStream.close();
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
JasperRunManager.runReportToPdf(
reportFile.getPath(), parameters, con);
// 初始化查找命名空间
Context initContext = new InitialContext();
// 找到DataSource
DataSource ds = (DataSource) initContext
.lookup("java:/comp/env/jdbc/oracleDb");
try {
con = ds.getConnection();
HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request = (HttpServletRequest) ActionContext
.getContext().get(
org.apache.struts2.StrutsStatics.HTTP_REQUEST);
Map parameters = new HashMap();
File reportFile = new File(request.getRealPath(reportPath));
// SQL参数
parameters.put(ParamName, SqlStr);
// 其他参数
if (null != varMaps && varMaps.size() > 0) {
Set set = varMaps.entrySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Map.Entry mapentry = (Map.Entry) iterator.next();
parameters.put((String) mapentry.getKey(),
(String) mapentry.getValue());
}
}
byte[] bytes = JasperRunManager.runReportToPdf(
reportFile.getPath(), parameters, con);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream outStream = response.getOutputStream();
outStream.write(bytes, 0, bytes.length);// /写入对象输出流中
outStream.flush();
outStream.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (null != con) {
try {
con.close();
} catch (SQLException e) {
con = null;
e.printStackTrace();
}
}
}
- 打印报表
// 2.产生报表页面
var RptHtml = CommExportReport(
'../rpt/Rpt01Action!ExportReportData.action',
params);
// 报表导出:【src:action路径】【 params:参数】
function CommExportReport(src, params) {
var paramStr = src;
if (null != params) {
Ext.each(params, function(items, index) {
if (index > 0) {
paramStr += '&';
} else if (index == 0) {
paramStr += '?';
}
paramStr += items.key + '=' + items.value;
});
}
window.open(paramStr);
};
- java程序中这样写,结合数据库产生报表
第一步
通过jndi获得上下文对象,调用该对象的lookup()方法,获得数据源对象ds,通过数据源得到连接对象con,实例化HttpServletRequest,HttpServletResponse对象
第二步
通过文件路径(jasper)创建File对象,创建map对象,并将“SQLSTR”(这个是报表需要的参数对象,与值)参数添加进去,接着判断是否还有其他的参数,都添加
第三步
判断通过jasper路径创建的文件是否存在,存在则
JRLoader调用loadObject()方法,参数是文件的路径 得到JasperReport对象
JasperFillManager调用fillReport()方法,参数是上面的JasperReport对象,参数对象map,连接对象,得到JasperPrint对象
response.setContentType("application/msword;charset=utf-8");//设置resonson对象内容类型
String fileName = new String("未命名.doc".getBytes("GBK"),
"ISO8859_1");
response.setHeader("Content-disposition",
"attachment; filename=" + fileName);
创建JRExporter 对象,调用setParameter(JRExporterParameter.JASPER_PRINT,
jasperPrint);
setParameter(JRExporterParameter.OUTPUT_STREAM,
response.getOutputStream()); 方法
最后调用exporter.exportReport();
第四步
Connection con = null;
// 初始化查找命名空间
Context initContext = new InitialContext();
// 找到DataSource
DataSource ds = (DataSource) initContext
.lookup("java:/comp/env/jdbc/oracleDb");
try {
con = ds.getConnection();
HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request = (HttpServletRequest) ActionContext
.getContext().get(
org.apache.struts2.StrutsStatics.HTTP_REQUEST);
Map parameters = new HashMap();
File reportFile = new File(request.getRealPath(reportPath));
// SQL参数
parameters.put(ParamName, SqlStr);
// 其他参数
if (null != varMaps && varMaps.size() > 0) {
Set set = varMaps.entrySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Map.Entry mapentry = (Map.Entry) iterator.next();
parameters.put((String) mapentry.getKey(),
(String) mapentry.getValue());
}
}
if (reportFile.exists()) {
JasperReport jasperReport1 = (JasperReport) JRLoader
.loadObject(reportFile.getPath());
JasperPrint jasperPrint = JasperFillManager.fillReport(
jasperReport1, parameters, con);
response.setContentType("application/msword;charset=utf-8");
String fileName = new String("未命名.doc".getBytes("GBK"),
"ISO8859_1");
response.setHeader("Content-disposition",
"attachment; filename=" + fileName);
JRExporter exporter = new JRRtfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,
jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
response.getOutputStream());
exporter.exportReport();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (null != con) {
try {
con.close();
} catch (SQLException e) {
con = null;
e.printStackTrace();
}
}
}
- 有参数Ext.XTemplate
var elcText = "{H_ELEC}kWh"; //H_ELEC是参数
var elcTextTpl = new Ext.XTemplate(elcText);
elcTextTpl.overwrite('firstVau1', {
H_ELEC : H_ELEC //H_ELEC是模版中的参数
});
在struts2.xml配置文件中是这样写的,其中package标签得继承struts-default,jasperreports-default包,返回结果的类型是jasper
<!--报表action-->
<package name="default" namespace="/rpt" extends="struts-default,jasperreports-default">
<action name="Rpt01Action" class="rpt.Rpt01Action">
<result type="jasper"></result>
</action>
<action name="Rpt02Action" class="rpt.Rpt02Action">
<result type="jasper"></result>
</action>
</package>