如何解决JasperSoft Studio中MatrixToImageWriter无法解析的问题?
解决JasperSoft Studio重新安装后二维码报表编译失败问题
问题重现
重新安装JasperSoft Studio后,原本在生产环境正常运行的带二维码报表无法编译,报错:com.google.zxing.client.j2se.MatrixToImageWriter cannot be resolved to a type,已添加ZXing的Core和JavaSE jar包到Eclipse Build Path但无效。
报表二维码表达式:
com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage( new com.google.zxing.qrcode.QRCodeWriter().encode( $F{QRCODE}, com.google.zxing.BarcodeFormat.QR_CODE, 400, 400 ) )
报错堆栈:
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 . at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:229) at net.sf.jasperreports.eclipse.builder.JasperReportCompiler.compileReport(JasperReportCompiler.java:289) at net.sf.jasperreports.eclipse.builder.JasperReportCompiler.compileReport(JasperReportCompiler.java:141) at net.sf.jasperreports.eclipse.builder.JasperReportsBuilder.compileJRXML(JasperReportsBuilder.java:212) at com.jaspersoft.studio.editor.action.CompileAction.actionCompile(CompileAction.java:154) at com.jaspersoft.studio.editor.action.CompileAction$1.run(CompileAction.java:98) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
解决方案
1. 对齐ZXing jar包版本与生产环境
- 确保本地使用的ZXing(core、javase)jar包版本和生产环境完全一致,比如生产用3.5.1则本地也用同一版本,避免因版本差异导致类结构不匹配。
2. 将ZXing jar包添加到JasperReports专属类路径
Eclipse Build Path仅用于项目Java代码编译,JasperReports编译报表时使用独立的类加载器,需手动配置:
- 打开JasperSoft Studio,依次点击
Window > Preferences > JasperReports > Classpath - 点击
Add External JARs,选中ZXing的core和javase jar包,点击确定后保存配置 - 额外检查项目级配置:右键项目 >
Properties > JasperReports > Classpath,确认两个jar包已被添加
3. 清理项目并重新编译
- 右键项目 >
Clean...,选择当前项目执行清理 - 清理完成后,重新编译报表文件,清除编译缓存导致的类加载异常
4. 优化报表表达式的类导入
在报表的Imports区域添加类导入,简化表达式同时避免全限定名可能的路径问题:
import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.BarcodeFormat;
修改后的二维码表达式:
MatrixToImageWriter.toBufferedImage( new QRCodeWriter().encode( $F{QRCODE}, BarcodeFormat.QR_CODE, 400, 400 ) )
5. 匹配JRE版本与生产环境
- 确认本地JasperSoft Studio使用的JRE版本和生产环境运行报表的JRE版本一致(如均为Java 8),避免跨版本兼容性问题
内容的提问来源于stack exchange,提问作者Thomas Carlton
相关产品推荐
相关产品推荐

