zoukankan      html  css  js  c++  java
  • 报表技术之PDF格式报表生成 ----JasperResport

    JasperReport简介

    JasperReport:java提供的一个类库,承上启下,读取IReport生成的xxx.jrxml文件,获取到pdf中需要显示的全部内容,然后底层调用IText相关的方法,生成一个具体的PDF文档

    IReport:  图形化报表开发工具(java swing编写的一个可视化工具) --->xxx.jrxml

    IText:java提供的一套用于生成PDF文档的类库编写的代码.

     报表技术之PDF格式报表生成 (JasperResport)

    1.JasperReport

    IText PDF 类库 , 编程非常复杂 ,运维成本非常高 

    这里写图片描述
    这里写图片描述
    2.IReport 图形化报表开发工具 下载安装

    这里写图片描述 
    下载网址:

    http://community.jaspersoft.com/project/ireport-designer/releases

    注意:可能需要jdk1.7才能打开 
    3.IReport 报表模板简介和设置中文生成 
    3.1. 新建 JasperReport 模板文件 .jrxml 
    这里写图片描述 
    这里写图片描述

    3.2.设置中文, IReport 引入 ITextAsian.jar 中文包

    这里写图片描述 
    这里写图片描述 

    这里写图片描述 
    这里写图片描述 
    3.3.了解报表模板结构 
    Title: 报表标题 
    PageHeader: 页眉 
    ColumnHeader: 表格列标题 
    Detail: 表格数据内容 
    ColumnFooter: 表格页脚 
    PageFooter: 页脚 
    Summary: 摘要 

    3.4.常用报表组件 
    这里写图片描述 
    StaticText: 静态文本 
    TextField : 显示动态文本

    3.5 设置预览格式为 PDF 
    这里写图片描述 
    4.IReport 配置数据库连接,基于数据表生成报表 
    这里写图片描述 
    4.1.点击按钮配置数据库连接 
    新建JDBC连接 
    这里写图片描述
    这里写图片描述 
    4.2 在 ireport 添加 oracle 的 jdbc 驱动 
    这里写图片描述 
    4.3 通过 ReportQuery 查询数据库 ,最后点击ok
    这里写图片描述 
    这里写图片描述 
    4.4.设计报表 
    这里写图片描述

    5.JasperResport 根据模板文件 生成报表 
    5.1. 设置 ireport 字段 自动换行 
    这里写图片描述 
    这里写图片描述

    5.2将桌面(文件路径)的waybill.jrxml文件复制到项目中 
    这里写图片描述 
    5.3在页面添加按钮,并绑定点击事件,提交表单 
    这里写图片描述 
    5.4在maven项目的父模块添加jasperReport依赖 
    这里写图片描述 
    5.5 在 ReportAction 添加 exportJasperPdf 方法 
    这里写图片描述 
    这里写图片描述 
    问题:当项目的功能够多时,可能会出现jar包冲突(当导入本次是jackson包冲突) 
    Caused by: java.lang.ClassNotFoundException: 
    com.fasterxml.jackson.annotation.ObjectIdResolver 
    在pom的坐标中引入 
    这里写图片描述 


    5.6.从数据导入只能显示与数据库匹配,但是如果要想导出我查询后的结果,重新设计ireport报表:

    根据java 符合实体类中的对象生成数据源.

    重新添加实体类的对象,删除原来的数据

    这里写图片描述  

    这里写图片描述 

    重新在项目加入jrxml文件.

    修改 ReportAction 代码 
    这里写图片描述 
    这里写图片描述 
    异常:

    Caused by: QueryPhaseExecutionException[Result window is too large, from + size must be less than or equal to: [10000] but was [2147483647]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level parameter.]
    

    修复 WayBillServiceImpl 查询数据代码: 

    这里写图片描述

    Action代码

    @Action("report_exportJasperPdf")
        public String exportJasperPdf() throws IOException, DocumentException,
                JRException, SQLException {
            // 查询出 满足当前条件 结果数据
            List<WayBill> wayBills = wayBillService.findWayBills(model);
    
            // 下载导出
            // 设置头信息
            ServletActionContext.getResponse().setContentType("application/pdf");
            String filename = "运单数据.pdf";
            //客户端浏览器
            String agent = ServletActionContext.getRequest()
                    .getHeader("user-agent");
            filename = FileUtils.encodeDownloadFilename(filename, agent);
            ServletActionContext.getResponse().setHeader("Content-Disposition",
                    "attachment;filename=" + filename);
    
            // 根据 jasperReport模板 生成pdf
            // 读取模板文件
            String jrxml = ServletActionContext.getServletContext().getRealPath(
                    "/WEB-INF/jasper/waybill.jrxml");
            JasperReport report = JasperCompileManager.compileReport(jrxml);
    
            // 设置模板数据
            // Parameter变量,
            Map<String, Object> paramerters = new HashMap<String, Object>();
            paramerters.put("company", "陕西朗朗");
            // Field变量
            JasperPrint jasperPrint = JasperFillManager.fillReport(report,
                    paramerters, new JRBeanCollectionDataSource(wayBills));
            System.out.println(wayBills);
            // 生成PDF客户端
            JRPdfExporter exporter = new JRPdfExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
                    ServletActionContext.getResponse().getOutputStream());
            exporter.exportReport();// 导出
            ServletActionContext.getResponse().getOutputStream().close();
    
            return NONE;
        }
    View Code
  • 相关阅读:
    【FastJSON序列化】FastJSON序列化
    【EsayExcel】EsayExcel生成自定义表头
    时间序列的基础频率
    问题记录 --> 未定义的引用 ||| not found
    linux shell find 用法大全
    pgrep -f abc匹配出含abc的进程 ||||||| pid pkill -f abc
    >/dev/null 2>&1
    编译,发版,链接库问题
    shell 问题 source project_env.sh
    linux/ubuntu 压缩与解压
  • 原文地址:https://www.cnblogs.com/wwwzzz/p/8215461.html
Copyright © 2011-2022 走看看