Ireport报表设计有两种图形化实现方式,一种是安装jasper studio软件,另一种是在eclipse中安装Ireport插件,两种实现方式功能是差不多的。(推荐使用插件的方式,因为可以更加方便的将java bean加入至dataset中)
进入marketplace后,左下角“marketplace”一般默认为“eclipse”,如果不是先切换为“eclipse”,切换完成后在“find”中输入“ireport”进行搜索,找到“jaspersoft studio”单击installed进行安装,之后会进行插件的下载和安装,只需静待安装完成就好了
如果有无法进行在线安装的情况,可以将已经下载好的“ireport插件”导入到eclipse的对应文件下,在进行1.1和1.2的步骤即可解决
ireport插件链接:ireport插件
提取码:e1q3
Ps:找到eclipse的安装路径,将压缩文件解压至对应的文件夹下,执行前两部操作
在file下选择new,出现如下图所示的选项表示插件安装成功了
首先将eclipse的“outline”功能打开,便于之后的操作
2.2.1.选择想要将jasper文件创建的文件夹位置,选中右键单击选择“new-jasper report”
2.2.2.左侧可以选择不同的报表格式,选择合适自己的模板后单击“next”
2.2.3.修改文件名后单击“next”
2.2.4.在此可以选择你的数据源
这里有两个选项,第一个是创建一个没有检索字段的jasper文件(可以之后添加数据源),第二个选项是添加一个简单的数据库连接,因为我是要将java bean作为报表的检索字段所以选择第一个选项,单击“finish”完成创建
报表主要元素介绍,之后添加的所有元素(单元格、图片、图表等都会在右侧的outline中显示,便于之后的操作)
一般设计一个简单报表时只需要“title、column header、detail”三个主要元素即可,其他元素可以删除掉(在outline中右键选中需要删除的元素delete,后续如果需要可以再次右键“add band”)
2.5.1.对报表页面进行设置,左键单击报表的灰色区域,可以在控制台的“properties”中看到页面的基本属性和参数
切换至“advanced”页签中,因为我需要将报表导出为Excel,所以将报表的所有margin设置为0,负责会出现空的列
2.5.2.添加报表所需单元格元素,单元格元素主要分为“static text(静态文本单元格)”和“text field(动态文本区域)”
2.5.3.首先添加报表的title和column header
文件的title一般是固定的所以需要添加一个“静态文本框”,直接左键将“static text”拖入“title”区域即可,然后双击单元格修改文本内容,也可以在下方的“properties-static text”页签中修改单元格的基本格式(字体样式、字号、对齐方式等),“borders”可以对单元格的边框进行设置;“column header”的设置方式同“title”一样。
报表标题:单元格:高为28px,字体:微软雅黑,18,加粗,左右上下居中
列标题:单元格宽度为一般文本120p,长文本350,高20px;字体:微软雅黑,10,加粗,一般文本左右上下居中,长文本居左上下居中,金额居右上下居中
Ps:双击各个元素的空白区域,可以快速调整元素高度为当前单元格占用的高度
报表正文需要添加“text field(动态文本区域)”,单击将单元格拖入detail区域中即可
Ps:此处需要注意两点
1.将“text adjust”的“cutText”修改为“stretchHeight”动态伸缩高度,否则报表会将超出单元格的文本进行剪切,导致数据错误
2.将“blank When NULL”勾选,这样当数据为“null”是报表总会显示“空值”而不是字符“null”
3.将单元格高度设置为动态高度,防止因为文本过长导致行高不一致,出现错误。
现在需要给报表添加“动态检索字段”,单击下图图标,在弹出框总选择“java bean”页签
单击选择按钮,在新的弹出框中输入className
在选项中双击想要添加的类,就会将类属性添加至“字段的待选区域”
为“动态文本区域”添加字段前需要先将要使用的字段添加至报表的“fields”中,选中需要添加的字段点击“add selected field(s)”
双击“动态文本区域”,在弹出页面中双击刚才添加好的字段,点击finish,到此报表基本就设计完成了
Ps:
new SimpleDateFormat("yyyy-MM-dd").format($F{applyDate})
在Java Project中引入Jasper相关的jar包
控制类
/**
*
* 根据用户所在项目导出项目
* @author QIANG_HAO
* @date 2020-01-08
* @param bean 项目bean
* @param session session信息
* @return
*/
@ResponseBody
@RequestMapping("/exportTest")
public DataGrid exportTest(ArchiveBean bean, HttpServletResponse response,HttpSession session){
SessionInfo sessionInfo = (SessionInfo) session.getAttribute("sessionInfo");
try {
bean.setPermission(sessionInfo.getPermisson());
bean.setOrgId(sessionInfo.getOrgId());
bean.setUserId(sessionInfo.getUserId());
PageParams pageParams = new PageParams();
pageParams.setPage(0);
pageParams.setRows(10000);
DataGrid rows = archiveService.queryList(bean, pageParams);
JasperReportCriteria criteria = new JasperReportCriteria();
criteria.setJrxmlName("test");// 模板名
if (rows != null && rows.getRows() != null && rows.getRows().size() > 0){
criteria.setResult(rows.getRows());
}
criteria.setJrxmlPath("/report/project");// 路径
criteria.setAutoBuildJasper(false);
criteria.setSheetName("项目归档信息");
criteria.setReportFileName("项目归档信息");// 文件名
criteria.setType(JasperReportCriteria.REPORT_TYPE_MSEXCEL);// 文件类型
ReportExporter.exportReport(criteria, response);
} catch (Exception e) {
log.error("查询项目归档信息异常",e);
}
return null;
}
导出方法实现
/**
* 导出报表
* @param criteria - JasperReport条件设定DTO
* @param response - HttpServletResponse
* @return 导出是否成功
* @throws Exception
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static boolean exportReport(JasperReportCriteria criteria, HttpServletResponse response) throws Exception {
log.debug("Enter method ReportExporter.exportReport()");
if (criteria == null) {
return false;
}
ByteArrayOutputStream outputStream = null;
ServletOutputStream oStream = null;
try {
JasperReport jasperReport = null;
// 需要jrXml文档的方式
if (criteria.isAutoBuildJasper() == false) {
String jrXml = criteria.getJrxmlPath() + criteria.getJrxmlName() + JasperReportCriteria.JRXML_EXT_NAME;
InputStream inputStream = ReportExporter.class.getResourceAsStream(jrXml);
JasperDesign design = JRXmlLoader.load(inputStream);
// 编译报表(.jrxml -> .jasper)
jasperReport = JasperCompileManager.compileReport(design);
}
// 填充报表
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, criteria.getParameters(),
new JRBeanCollectionDataSource(criteria.getResult()));
outputStream = new ByteArrayOutputStream();
JRAbstractExporter exporter = null;
if (StringUtils.hasText(criteria.getType()) == false) {
exporter = new JRPdfExporter();
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
exporter.setConfiguration(configuration);
} else if (criteria.getType().equals(JasperReportCriteria.REPORT_TYPE_MSWORD)) {
exporter = new JRRtfExporter();
SimpleRtfReportConfiguration configuration = new SimpleRtfReportConfiguration();
exporter.setConfiguration(configuration);
} else if (criteria.getType().equals(JasperReportCriteria.REPORT_TYPE_MSEXCEL)) {
exporter = new JRXlsxExporter();
SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
configuration.setOnePagePerSheet(true);
configuration.setDetectCellType(true);
configuration.setCollapseRowSpan(false);
configuration.setSheetNames(new String[]{criteria.getSheetName()});
exporter.setConfiguration(configuration);
} else {
exporter = new JRPdfExporter();
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
exporter.setConfiguration(configuration);
}
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream));
exporter.exportReport();
byte[] bytes = outputStream.toByteArray();
response.setContentType(JasperReportCriteria.getContentTypeMap().get(criteria.getType()));
response.setCharacterEncoding("iso8859-1");
String fileName = URLEncoder.encode(criteria.getReportFileName(), JasperReportCriteria.CHARACTER_ENCODING) + JasperReportCriteria.getReportExtNameMap().get(criteria.getType());
fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
response.setHeader("Content-disposition", "attachment;filename="
+ fileName);
response.setContentLength(bytes.length);
outputStream.close();
oStream = response.getOutputStream();
oStream.write(bytes, 0, bytes.length);
oStream.flush();
oStream.close();
log.debug("Exit method ReportExporter.exportReport()");
return true;
} catch (Exception e) {
log.error("Exception: method ReportExporter.exportReport() - " + e, e);
return false;
} finally {
if (oStream != null) {
oStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
}