报表笔记

常用的几大报表技术: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

报表模板的结构:

    

Title:报表的标题,如有多页只有一个标题

Page Header :每页报表数据的页头

Cloumn Header:数据的列头

Detail:显示数据的内容

Column Footer:表格页脚

PageFooter:页脚

Summarg:摘要

常用的报表组件

    

Static Text :  静态的文本

TextField :显示动态的文本  

设置预览的格式  -- PDF

   

Irerot :配置数据库的连接,基于报表生成

     

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 列的值,并显示

猜你喜欢

转载自blog.csdn.net/weixin_38297879/article/details/81324121