使用JasperReports生成含用户名的TXT文件时遇参数错误求助
解决JasperReports生成TXT文件时的JRRuntimeException错误
问题描述
使用Java代码结合JasperReports模板生成显示“Hello {用户名}”的TXT文件时,抛出JRRuntimeException,错误信息为:
Character height in pixels or page height in characters must be specified and must be greater than zero
(中文:必须指定像素单位的字符高度或字符单位的页面高度,且值必须大于0)
错误原因
JasperReports的文本导出器(JRTextExporter)要求必须配置垂直方向的排版参数:要么设置像素单位的字符高度,要么设置字符单位的页面高度,二者至少选其一。当前代码仅配置了页面宽度和字符宽度,缺少必要的垂直方向参数,导致导出器无法计算文本布局,触发异常。
解决方案
在SimpleTextReportConfiguration中添加字符高度或页面高度的配置,二者任选其一即可。推荐设置字符高度,与模板中的字体大小匹配,排版更准确。
修改后的核心代码
修改导出配置部分,添加字符高度设置:
// 导出JasperPrint到文本文件 Exporter exporter = new JRTextExporter(); exporter.setExporterInput(new SimpleExporterInput(print)); exporter.setExporterOutput(new SimpleWriterExporterOutput("output.txt")); SimpleTextReportConfiguration configuration = new SimpleTextReportConfiguration(); configuration.setPageWidthInChars(80); // 设置页面宽度为80字符 configuration.setCharWidth((float)8); // 设置字符宽度为8像素 configuration.setCharHeight((float)24); // 添加字符高度配置,与模板字体大小匹配 exporter.setConfiguration(configuration); exporter.exportReport();
注:这里设置字符高度为24像素,对应JRXML模板中
<font size="24"/>的字体大小,确保文本内容能正确显示。
也可以选择设置页面高度(字符数)替代字符高度,示例:
configuration.setPageHeightInChars(30); // 设置页面高度为30字符
模板验证
你的JRXML模板配置正确,参数userName和文本字段的表达式均无问题,修改代码后即可成功生成包含“Hey, salma”内容的TXT文件。
内容的提问来源于stack exchange,提问作者Salma Aboumzrag
相关产品推荐
相关产品推荐

