首页 > 解决方案 > 为什么在 spring-boot 应用程序中包含 zxing qr 代码时出现 Jasperreport.engine.JRException 错误?

问题描述

在spring-boot app中编译jasperreport模板jrxml时遇到错误

 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. com.google.zxing.client.j2se.MatrixToImageWriter cannot be resolved to a type
                value = com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage( //$JR_EXPR_ID=38$
                        <---------------------------------------------->
2. com.google.zxing.client.j2se.MatrixToImageWriter cannot be resolved to a type
                value = com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage( //$JR_EXPR_ID=38$
                        <---------------------------------------------->
3. com.google.zxing.client.j2se.MatrixToImageWriter cannot be resolved to a type
                value = com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage( //$JR_EXPR_ID=38                        <---------------------------------------------->
3 errors
.] with root cause

RestController 代码;

   @RequestMapping(value = "/reports/{format}/{param}", method = RequestMethod.GET)
    public void export(ModelAndView model, HttpServletResponse response, @PathVariable("format") String format, @PathVariable("param") String param) throws IOException, JRException, SQLException {
        JasperPrint jasperPrint = null;
        response.setContentType("application/x-download");
        response.setHeader("Content-Disposition", String.format("attachment; filename=file.pdf"));
        OutputStream out = response.getOutputStream();
        jasperPrint = reportService.exportPdfFile(format, param);
        JasperExportManager.exportReportToPdfStream(jasperPrint, out);
    }

服务类代码如下;

    public JasperPrint exportPdfFile(String format, String param) throws JRException, IOException{
        JasperPrint jasperPrint = null;
        List<Bean> bean = beanRepository.findJoins(Long.parseLong(param));

        String reportPath = resourceLoader.getResource("classpath:templates/template.jrxml").getURI().getPath();
        // Compile the Jasper report from .jrxml to .japser
        JasperReport jasperReport = JasperCompileManager.compileReport(reportPath);
        // Get your data source
        JRBeanCollectionDataSource jrBeanCollectionDataSource = new JRBeanCollectionDataSource(bean);
        // Add parameters
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("createdBy", "john Doe");
        // Fill the report
        jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jrBeanCollectionDataSource);
        return jasperPrint;
    }

图像组件的 Jrxml 代码

<image>
    <reportElement x="420" y="75" width="134" height="135" uuid="fc315f59-1b66-41ec-afe6-71fc61362073"/>
    <imageExpression><![CDATA[com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage(
                    new com.google.zxing.qrcode.QRCodeWriter().encode("http://localhost:7777/api/reporto/temp/"+$F{isr_id},com.google.zxing.BarcodeFormat.QR_CODE, 300, 300)
            )]]></imageExpression>
</image>

包含在 Maven 导入中的 Jar 库是:

标签: javajasper-reports

解决方案


推荐阅读