zoukankan      html  css  js  c++  java
  • 基于SpringBoot项目集成iReport

    学而时习之,不亦说乎

    基于SpringBoot项目集成iReport,实现预览、下载PDF功能。

    具体步骤如下:

    1. 加入相关依赖
    <!-- PDF打印相关依赖 -->
    	<dependency>
    		<groupId>net.sf.jasperreports</groupId>
    		<artifactId>jasperreports</artifactId>
    		<version>6.17.0</version>
    	</dependency>
    	<dependency>
    		<groupId>org.codehaus.groovy</groupId>
    		<artifactId>groovy-all</artifactId>
    		<version>2.4.11</version>
    	</dependency>
    	<!-- 解决中文字体显示问题 -->
    	<dependency>
    		<groupId>cn.lesper</groupId>
    		<artifactId>iTextAsian</artifactId>
    		<version>3.0</version>
    	</dependency>
    
    1. 在项目的resource目录下创建ireport文件夹,将在ireport设计器中设计好的test.jrxml文件,复制黏贴入该文件夹下。

    2. 提供service方法

        @Autowired
        private DataSource dataSource;
        
        @Override
        public void optPdf(HttpServletResponse response,String businessUuid,Integer optType) throws Exception {
    
            String fileName = "test.jrxml";
            String pdfName = "test";
            //File file = ResourceUtils.getFile("classpath:ireport/" + fileName);
            //jar部署方式需要以以下方式获取文件
            InputStream is = Test.class.getResourceAsStream("/ireport/" + fileName);
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/pdf");
            response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(pdfName, "UTF-8") + ".pdf");
    
            try {
                //编译jasperReport
                JasperReport jasperReport = JasperCompileManager.compileReport(is);
                //添加iReport入参
                HashMap<String, Object> params = new HashMap<>();
                params.put("uuid",businessUuid);
                //获取outputStream
                OutputStream outputStream = response.getOutputStream();
                if(optType == 1){
                    //预览
                    byte[] bytes = JasperRunManager.runReportToPdf(jasperReport,params,dataSource.getConnection());
                    response.setContentType("application/pdf;charset=UTF-8");
                    response.setHeader("content-disposition","inline");
                    response.setContentLength(bytes.length);
                    outputStream.write(bytes, 0, bytes.length);
                    outputStream.flush();
                    outputStream.close();
                }else{
                    //下载
                    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params,dataSource.getConnection());
                    JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
                }
    
            } catch (IOException | JRException e) {
                e.printStackTrace();
            }
        }
    
    1. 创建一个Controller类,增加相应API接口。
        @ApiOperation("业务申请单PDF预览")
        @GetMapping("/showPdf")
        public void showPdf(HttpServletResponse response,@RequestParam String businessUuid)throws Exception{
            resourceManageService.optPdf(response,businessUuid,1);
        }
    
        @ApiOperation("业务申请单PDF下载")
        @GetMapping("/downPdf")
        public void downPdf(HttpServletResponse response,@RequestParam String businessUuid)throws Exception{
            resourceManageService.optPdf(response,businessUuid,2);
        }
    
    1. 启动SpringBoot项目

    预览方式访问:

    http://127.0.0.1:8080/showPdf?businessUuid=1111

    下载方式访问:

    http://127.0.0.1:8080/downPdf?businessUuid=1111

  • 相关阅读:
    Python+fiddler(基于Cookie绕过验证码自动登录)
    Python+selenium(警告框处理)
    Python+selenium(多表单、多窗口切换)
    Python+selenium(定位一组元素)
    Python+selenium登录测试
    【转载】python format遇上花括号{}
    【转载】判断当前使用的编译器及操作系统
    动态库的创建,隐式加载和显式加载
    Google C++单元测试框架GoogleTest---AdvancedGuide(译文)
    三次样条插值 cubic spline interpolation
  • 原文地址:https://www.cnblogs.com/conswin/p/15220559.html
Copyright © 2011-2022 走看看