web应用中集成Ireport
从项目需求,资源,技术上的综合考量, 最后还是选择开源软件【jasperReports+Ireport】, 作为各种报表,模板打印的工具。 已经在生产环境上运行。
web架构: S2SH + Ireport。
Ireport网上的中文资料很少, 实际操作起来会遇到各种问题,中文显示问题, Ireport模板绘制问题, 应用在window下没错,linux下报错等一系列奇葩问题。
当时选择哪个版本来集成到项目中的时候就折腾了很久, 一开始取得最新的版本iReport-5.6.0,但是执行的时候总是报错,看log应该是版本的问题, 最后还是选择了iReport-3.7.0。
下载Ireport之后再 iReport-3.7.0\ireport\modules\ext 的目录下面 找到 jasperreports-3.7.0.jar, 直接放到项目的lib下面。
ireport生成pdf的程序部分:
ireport生成pdf的程序部分
List listInfo= new ArrayList();
// 生成导出类JRPdfExporter 来自JRExporter
JRPdfExporter exporter = new JRPdfExporter();
JRBeanCollectionDataSource beanColDataSource1_1 = new JRBeanCollectionDataSource(
printDatas);
// jrxml 编译 .jasper 文件
JasperReport mainjReport1_1 = JasperCompileManager
.compileReport(mainDesign1_1);
Map paramMap1_1 = new HashMap();
String imagePath = reportpath + File.separator + "images" + File.separator;
InputStream imgsrc = new FileInputStream(qRCode);
String logo_Path = imagePath + "logo1.png";
InputStream a_imgsrc = new FileInputStream(logo_Path);
// 加logo 和 二维码
paramMap1_1.put("qrcode1", imgsrc);
paramMap1_1.put("a_logo", a_imgsrc);
JasperPrint print1_1 = JasperFillManager.fillReport(mainjReport1_1, paramMap1_1,
beanColDataSource1_1);
listInfo.add(print1_1);
// 多个报表模板操作
exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, listInfo);
FileOutputStream output = new FileOutputStream(“具体要到处的pdf文件全路径”);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, output);
// 输出
exporter.exportReport();
Ireport 模板生成部分: ireport画模板相对比较麻烦, 尤其是子报表,子报表嵌套子报表, 我这里有一些ireport的相关资料,还有一些字体和jar文件也可以下载。 有需要的可以去下载,也可以一起探讨。
字体(微软雅黑, 粗体 ,宋体, 粗体) + jasperreports-3.7.1.jar:
http://download.csdn.net/detail/d124939312/9830360
Ireport相关资料:
http://download.csdn.net/detail/d124939312/9830357
***如果是子报表嵌套子报表,生成的.jasper要放到web应用的classpath下面,不然ireport加载不到相关的jasper文件。
window下没错,linux下报错: 这个是因为字体的原因造成的, windows下字体很全, 但是我们项目是部署到linux上的, ireport上用的字体在linux上没有, 所以linux上跑起来会报字体的问题。
解决1: linux上安装相关字体。
解决2: 修改jasperreports-3.7.1.jar里面的配置文件default.jasperreports.properties的配置信息
net.sf.jasperreports.awt.ignore.missing.font=false 把 false 改成 true。 虽然比较暴力但是还是解决了问题,更推荐用第一种方式。
上一篇: 第一个登录界面web应用
推荐阅读
-
将Django框架和遗留的Web应用集成的方法
-
Asp.net中处理一个站点不同Web应用共享Session的问题
-
Struts2中实现web应用的初始化实例详解
-
巧用FileSystem组件实现WEB应用中的本地特定打印的方法
-
说说Java Web中的Web应用程序|乐字节
-
Asp.net中处理一个站点不同Web应用共享Session的问题
-
巧用FileSystem组件实现WEB应用中的本地特定打印
-
asp.net Reporting Service在Web Application中的应用
-
session在PHP大型web应用中的使用
-
Python中SOAP项目的介绍及其在web开发中的应用