1、JSP 页面 添加PDF文件预览窗口
<iframe style="min-height: 700px; min-width: 800px" src='后台Ctrl路径处理方法'></iframe>
2、Ctrl实现
ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
//获得需要打印的数据
params.put(Consts.PRT_JR_DATA_SOURCE, getPrintViewData());
JasperPrint jasperPrint = fillReport(param, applicationContext);
OutputStream os = resp.getOutputStream();
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, os);
exporter.exportReport();
os.flush();
3、生成 JasperPrint
public static JasperPrint fillReport(Map<String, Object> params, ApplicationContext applicationContext) throws JRException {
String jasper = (String) params.get(Consts.PRT_JR_JASPER);//获得打印模版路径
JasperReport jasperReport = null;
if (jasper.endsWith(Consts.PRT_JR_COMPILED)) {//如果 文件是以 .jasper 结尾
jasperReport = (JasperReport) JRLoader.loadObjectFromFile(jasper);
} else {
jasperReport = JasperCompileManager.compileReport(jasper);
}
JasperPrint jrPrint = null;
Object data = params.get(Consts.PRT_JR_DATA_SOURCE);//获得传入模版内的参数
if (data instanceof List) {//如果是集合,不需要查数据库
@SuppressWarnings("rawtypes")
JRDataSource dataSource = new JRBeanCollectionDataSource((List) data);
jrPrint = fillReport(jasperReport, params, dataSource);
} else {//需要查数据库
DataSource dataSource = applicationContext.getBean(DataSource.class);
Connection conn = DataSourceUtils.getConnection(dataSource);
try {
jrPrint = fillReport(jasperReport, params, conn);
} finally {
DataSourceUtils.releaseConnection(conn, dataSource);
}
}
return jrPrint;
}
public static JasperPrint fillReport(JasperReport jasperReport, Map<String, Object> parameters,
JRDataSource dataSource) throws JRException {
//return JRFiller.fillReport(jasperReport, parameters, dataSource);
return JRFiller.fill(DefaultJasperReportsContext.getInstance(), jasperReport, parameters, dataSource);
}
public static JasperPrint fillReport(JasperReport jasperReport, Map<String, Object> parameters, Connection conn)
throws JRException {
//return JRFiller.fillReport(jasperReport, parameters, conn);
return JRFiller.fill(DefaultJasperReportsContext.getInstance(), jasperReport, parameters, conn);
}
4、防止中文不显示问题 POM文件需要添加
<!--添加ireport依赖-->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>5.5.0</version>
</dependency>
<!-- 解决中文字体显示问题 -->
<dependency>
<groupId>cn.lesper</groupId>
<artifactId>iTextAsian</artifactId>
<version>3.0</version>
</dependency>