热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

jasperreport报表的简易demo

[java]<prename"code"class"java"><prename"code"class"java"><spanstyle"font-family:Arial,Helvetica,san
[java] 
最近项目经理安排任务学习jasperreport报表的设计与制作,根据提供的资料以及在网上的学习,自己实现了一个可以通过外部传入数据下载excel的报表,
因为还在初学阶段,数据源暂时是在程序中传入,还没通过数据库或者javabean传入,接下来的时间里慢慢深入。
首先是在IReport软件里设计好自己的报表图,我设计了一个很简单的报表,其实报表设计最重要的是其核心的几个过程
  
设计报表,数据导入,输出报表
  
[java]  
第一个程序是service里的下载代码  
[java]  
@Service("reportService")  
@Path("/report")  
public class ReportService {  
    @Autowired  
    private ICommonDao dao;  
      
    @Path("download")  
    @Produces(MediaType.TEXT_PLAIN)  
    @Transactional  
    public String downloadReport(@Context HttpServletRequest req , @Context HttpServletResponse res) throws Exception{  
        String designFilePath = req.getSession().getServletContext().getRealPath("/jasper") +   
                File.separator + "reportTest.jrxml";  
        File designFile = new File(designFilePath);  
          
        if(designFile.exists()){  
            DataReportProcess reportProcess = new DataReportProcess();  
            reportProcess.process(req, res, designFile);  
              
        }  
        return "success";  
    }  
}  
这段代码里涉及DataReportProcess类
[java] 
public class DataReportProcess extends XLSReportProcess{  
      
    /** 
     *从模板文件编译获得jasperReport对象 
     *@return JasperReport对象 jasperReport 
     * @throws JRException  
     */  
    private JasperReport getJasperReport(File designFile) throws Exception{  
        JasperReport jasperReport = null;  
        JasperDesign design = JRXmlLoader.load(designFile);  
        jasperReport = JasperCompileManager.compileReport(design);  
        return jasperReport;  
    }  
      
    public void process(HttpServletRequest req , HttpServletResponse res, File designFile) throws Exception{  
        String outputFileName = "dataReport.xlsx";  
        Map dataMap = new HashMap();  
        dataMap.put("name", "张三");  
        Collection> dataMapList = new ArrayList>();  
        dataMapList.add(dataMap);  
        JRMapCollectionDataSource dataSource = new JRMapCollectionDataSource(dataMapList);  
          
        JasperReport jasperReport = this.getJasperReport(designFile);  
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,null,dataSource);  
        this.exportWebReport(ReportProcess.Type.xlsx, res, jasperPrint , outputFileName);  
    }  
}  
这里面的数据源接口用的是JRMapCollectionDataSource,现在是写死的key value。这个类中主要是jasperrepor中涉及到的一些API
JasperReport核心API
1. JRXmlLoader(xml加载器)
里面有load方法用来加载*.jrxml文件 返回jasperDesign对象
 
2.JRcompile(接口)
里面定义了方法接受参数返回 jasperReport对象
3.JasperCompileManager(编译管理器)
提供了一些方法用来编译Report成文件的
JasperReport jasperReport = JasperCompileManager.compileReport(design);
 
4.JasperFillManager(填充管理器)
主要用来把report填充到文件里面
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, reportParams, resultSetDataSource);
 
5.JasperPrintManager(打印管理)
主要是把JasperPrint对象(相关的数据)打印到pdf.xml等文件中去
 
6.JasperExportManager(导出管理器)
主要是把JasperPrint对象(相关的数据)导出到pdf.xml等文件中去
 
最后一个时输出报表函数
[java] 
@Override  
    public void exportWebReport(Type type, HttpServletResponse res, JasperPrint print, String outputFileName) throws Exception{  
        if(type!=null&&type.equals(ReportProcess.Type.xlsx)){  
            //2007 excel以上  
            res.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");  
        }else{  
            res.setContentType("application/vnd.ms-excel");  
        }  
        //解决中文文件名并设置文件名  
        if(outputFileName!=null && !outputFileName.isEmpty()){  
            res.setHeader("charset","ISO8859-1");    
            res.setHeader("Content-Disposition", "attachment;filename=\"" + new String(outputFileName.getBytes(), "ISO8859-1") + "\"");  
        }  
        BufferedOutputStream outputStream =null;  
      
            outputStream = new BufferedOutputStream(res.getOutputStream());  
              
            this.exportFile(res,print,outputFileName,outputStream);  
            outputStream.flush();  
            outputStream.close();  
          
          
    }  
      
[java] 
 //这里只要是为输出的excel文件设置各种高属性,文件名 sheetname 。。。  
    public void exportFile(HttpServletResponse res , JasperPrint print , String outputFileName,OutputStream outputStream) throws JRException{  
        JRAbstractExporter jrExporter = new JRXlsxExporter();  
        jrExporter.setParameter(JRExporterParameter.JASPER_PRINT, print);  
        jrExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);  
        jrExporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);  
        jrExporter.setParameter(JRXlsExporterParameter.IS_COLLAPSE_ROW_SPAN, Boolean.TRUE);  
        jrExporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);  
        jrExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);  
        jrExporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);  
        if(outputFileName!=null && !outputFileName.isEmpty()){  
            jrExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFileName);  
        }  
        System.out.println("exportFile:outputFileName outputStream " + outputFileName + " " + outputStream);  
        jrExporter.setParameter(JRXlsExporterParameter.SHEET_NAMES, new String[]{"信息"});  
       
        jrExporter.exportReport();  
    }  
最后的效果是输入service的链接 会自动下载文件名为dataReport.xlsx的excel表格,里面内容很简单就是
姓名
张三
 
ok,很简易的demo就这样完成了,接下来会实现更通用有针对性的报表设计了

推荐阅读
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文介绍如何在 Unity 的 XML 配置文件中,将参数传递给自定义生命周期管理器的构造函数。我们将详细探讨 CustomLifetimeManager 类的实现及其配置方法。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 本文详细介绍了如何解决MyBatis中常见的BindingException错误,提供了多种排查和修复方法,确保Mapper接口与XML文件的正确配置。 ... [详细]
author-avatar
mobiledu2502906557
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有