报表笔记
常用的几大报表技术:POI 、Itext、jasperreport技术,本篇以jasperreport为例。
Jasperreport:
jasperreport是一个强大的、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成 PDF、HTML或者xml格式等。
该库完全是由java编写,可以用于各种java应用程序,包括javaee,web应用程序中生成动态内容。
jasperreport是开源的,但是文档是收费的,它还有一个开源的工程IRepoet,Ireport是一个图形化的辅助工具,能弥补jasperreport的缺点,jasperreport仅提供了可使用的类库。
IReport:
iReport的删除格式,支持PDF、HTML、CSV、java2d、Excel、纯文字、JRViewer,其中最常用的是PDF、JRViewer
报表模板的结构:
![70][]
Title:报表的标题,如有多页只有一个标题
Page Header :每页报表数据的页头
Cloumn Header:数据的列头
Detail:显示数据的内容
Column Footer:表格页脚
PageFooter:页脚
Summarg:摘要
常用的报表组件
![70 1][]
Static Text : 静态的文本
TextField :显示动态的文本
设置预览的格式 — PDF
Irerot :配置数据库的连接,基于报表生成
![70 3][]
1,字段的创建
点击Next之后,进行链接那个数据库
数据库为红色表示没有改驱动,需要加入该驱动
连接完成数据库之后,然后可以直接对数据库进行使用sql语句直接查询
在使用sql语句查询的时候,可以使用参数来传递条件表达式中的参数
select * from 表名 where = $P{PojectName} order by pronname
1,2方式二
右键创建
重命名:
创建完成之后,将创建的字段 添加到Datail 1中 此时会在Column Header中出现你要设置的对应的字段的名字
可以对指定的字段进行属性的设置
1.3使用 javabean的形式创建Field
选择的目录是当前javabean所在的工程路径下编译后的class文件所在的目录。
2.参数
通常是用来在打印的时候从程序里的传值到报表里,也就是说参数通常的是其参数传递的作用,在使用的时候,一般是用来将数据放在map中设置key和value两个参数,key就是对应的报表中的参数,参数的类型是java中的Object类型,所以可以传递任意的类型。
在使用参数的时候,格式是:$P{parameter name}
在程序中将参数传递到报表中:
1,创建一个Map集合,将要显示的数据封装到map集合中,如果是多个对象类型的,主要对象中的属性值要跟报表中的参数的名称一致,将对象放进map集合中即可
2,创建JaperFillManager.fillReport(fileName,hm,new JREmptyDataSource());方法
fileName : 参数表示的是:根据报表模板生成的模板对象
hm : 表示的map集合
new JREmptyDataSource() : 表示的数据源 -- 如果是对象显示数据的时候,将查询出的数据当参数传递(从数据库中查询的数据)
@RestController
public class Demo01 {
@Autowired
ServletContext context;
@RequestMapping(value = "/hello")
public void report() throws IOException, JRException {
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes attributes1 = (ServletRequestAttributes) attributes;
HttpServletRequest request = attributes1.getRequest();
HttpServletResponse response = attributes1.getResponse();
// 获取全局参数
// WebApplicationContext context =
// ContextLoader.getCurrentWebApplicationContext();
// ServletContext servletContext = context.getServletContext();
// 设置下载的类型
response.setContentType("application/pdf");
// 获取当前浏览器的类型
String header = request.getHeader("user-agent");
// 设置头信息,设置下载的中文乱码的问题
String s = FileUtils.encodeDownloadFilename("报表.pdf", header);
// 设置点击下载的时候下载的文件名称
response.setHeader("Content-Disposition","attachmnet;filename"+s);
// 获取IRrport的路径 的全路径
// String realPath = context.getRealPath("ReportDemo/src/main/resources/jasper/report1.jrxml");
String realPath = this.getClass().getClassLoader().getResource("jasper/Ieport.jrxml").toString();
System.out.println(realPath);
// 根据给的IReport的模板,生成IRrport的对象
JasperReport jasperReport = JasperCompileManager.compileReport(realPath);
HashMap<String, Object> map = new HashMap<>();
map.put("name","李四");
map.put("age","20");
map.put("sex","男");
// 将数据和地址绑定在一起 因为为没有设置数据源,所以传入null
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, new JRBeanCollectionDataSource(null));
JRPdfExporter pdfExporter = new JRPdfExporter();
// 设置对象的输出 格式为PDF 的格式
JRPdfExporter jrPdfExporter = new JRPdfExporter();
// 设置 数据
jrPdfExporter.setParameter(JRExporterParameter.JASPER_PRINT,null);
// 将结果放进流中,进行输出
jrPdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,response.getOutputStream());
// 执行导出
jrPdfExporter.exportReport();
}
}
常用的三个参数 (拿sql举例):
select id ,count from a where id = idstr;(idstr表示传递的数据)
$F{id}:即显示以上sql查询的id值 用于数据的显示
$P{idstr} :即显示传进来的参数值
$V{sumCunt} 即求和的count 列的值,并显示
还没有评论,来说两句吧...