java - 为什么在 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 库是:
- com.google.zxing:core:3.3.0
- net.sf.jasperreports:jasperreports:6.4.0
- org.apache.tomcat:jasper-jdt:6.0.29
解决方案
推荐阅读
- javascript - 为什么我不能将数据传输到另一个 HTML 页面
- javascript - 带有字符串/数字数组的 React-admin 数组输入
- macos - NSGestureRecognizer 的 cancelTouchesInView 等效项
- jquery - jQuery-单击图像上的坐标并在那里画一个圆圈
- python - 将新的日期时间添加到具有值的日期时间索引 Pandas 数据框
- php - 无法将自定义站点配置添加到 Silverstripe 4
- python - UUIDS 的 peewee ArrayField
- c# - 添加 CosmosDB 实体,(无法解析租户类型实体的 iD)
- c++ - 在编译时检查指针内存布局:联合方法在 constexpr 中失败
- r - 在 R 中自动运行文件