1、相关jar包引入


        
            net.sf.jasperreports
            jasperreports
            4.5.1
            
                
                    commons-collections
                    commons-collections
                
                
                    commons-beanutils
                    commons-beanutils
                
                
                    org.apache.poi
                    poi-ooxml
                
            
        
        
        
            com.itextpdf
            itextpdf
            5.5.6
        
        
            net.sf.jasperreports
            jasperreports-fonts
            4.0.0
        
        
        
            cn.lesper
            iTextAsian
            3.0
        
        
        
            com.itextpdf
            itext-asian
            5.2.0
        
        
            com.itextpdf
            itext-pdfa
            5.5.11
        
        
            org.codehaus.groovy
            groovy-all
            2.4.13
        
        

2、工具类

/**
     * @param response              httpServletResponse
     * @param fileName              显示/保存 的文件名,不需要(.pdf)后缀
     * @param data                  Fields 数据集合
     * @param params                其它 params参数
     * @param downLoad              是否下载  true:下载  false:在线预览
     */
    public static void printPDF(HttpServletResponse response, String fileName, InputStream templateStream, List data, Map params, boolean downLoad) throws IOException, JRException {
        // 1. 获取数据源
        JRDataSource jrDataSource  = new JRBeanCollectionDataSource(data);
        // 2. 获取模板文件
        // File jasperFile = ResourceUtils.getFile("classpath:" + jrxmlTemplate);
        // 3. 编译 jrxml
        JasperReport jasperReport = JasperCompileManager.compileReport(templateStream);
        // 4. 获取报表
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, jrDataSource);
        // 通过outputStream输出
        JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());

        // 5. 设置响应格式
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/pdf");
        if(downLoad){
            response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".pdf");
        }else{
            response.setHeader("content-disposition", "inline;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".pdf");
        }
    }

3、调用Demo

    @RequestMapping(value = "/printTest", method = RequestMethod.GET)
    public Result printTest(HttpServletResponse response) throws Exception {
      
        List<Map> data = new ArrayList();
        Map map = new HashMap();
        map.put("name","张三");
        map.put("phone","88888888");
        data.add(map);
        String objectName = "test.jrxml";
        OSS ossClient = aliyunOssClient.createOssClient();
        OSSObject ossObject = ossClient.getObject(bucketName, objectName);
        InputStream templateStream = ossObject.getObjectContent();
        iReportHelper.printPDF(response,"打印预览", templateStream,data,map,false);
        return Result.setSucMsg("success");
    }

4、模板注意点

a) 模板数据源:list对应Fields,map对应Parameters

b) 模板字体尽量选用默认字体,jasper内置自带,其他字体容易报错jvm找不到字体,需要服务器安装。

SpringBoot集成ireport打印,并解决PDF中文显示问题插图

c) 打印PDF选中以下属性,中文字体方可正常显示。且注意引入jasperreports-fonts 包。

SpringBoot集成ireport打印,并解决PDF中文显示问题插图(1)

本站无任何商业行为
个人在线分享 » SpringBoot集成ireport打印,并解决PDF中文显示问题
E-->