实际上我想转换一些计算(例如:123作为一百二十三的单词)。所以我分别设计了一个jar文件和ireport designer 5.6.0中的“Tools” - >“options” - >“classpath”并添加了jar并在“scriptlet”中我编写了com.reporter.jasper.ConvertToWord并在报告中创建了一个文本字段,并添加了“$ REPORT_SCRIPTLET.readNumber($ V {Total})”并保存了它。所以,当我点击预览标签时,它的工作完美(例如:64501为64.51)。
现在出现了问题。我复制了report.jrxml和report.jasper并将其粘贴在“/WEB-INF/reports/report.jrxml”中并在服务器上运行,以便转换为PDF,DOC,XLS ,XLSX它显示的错误如此图像
我也提供了jar文件的代码
package com.reporter.jasper;
import java.io.PrintStream;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
public class ConvertToWord extends JRDefaultScriptlet {
String numberInWord = "";
String inpstr = "";
int inputLength;
String temp = "";
public String readNumber(double xDouble) {
long x = (long)xDouble;
this.inpstr = "" + x;
this.inpstr = this.inpstr.trim();
this.inputLength = this.inpstr.length();
this.numberInWord = "";
if (this.inpstr.substring(0, 1).trim().equalsIgnoreCase("-")) {
this.inpstr = this.inpstr.substring(1);
--this.inputLength;
}
this.getDigits(this.inputLength);
return this.numberInWord;
}
显示ireport图片
正如您在上面的Scriptlet类中看到的那样,“com.reporter.jasper”是包,“ConvertToWord”是类。
在文字字段$P{REPORT_SCRIPTLET}.readNumber($V{Sub Total} +$V{Output VAT and CST and Service Tax})
readNumber是方法名称。
所以我现在要做的就是成功地将数据显示为PDF,DOC,XLS和XLSX。
答案 0 :(得分:0)
您的班级ConvertToWord
也必须位于 Web应用程序的类路径中,因此不足以将jar添加到iReport,您需要将它添加到WEB-INF。
作为备注:看不到整个ConvertToWord
课程,但是如果你没有覆盖JRDefaultScriptlet
的方法(在beforeDetailEval()
上做了代码,那就是为了做代码)。
Scriptlet是每次报告事件发生时执行的Java代码序列。报告变量的值可以通过scriptlet影响
没有必要扩展它你可以简单地用一个方法做一个类并从你的jrxml中调用它
public class ReportHelper{
public static synchronized String readNumber(double xDouble) {
...
}
}
然后在jrxml es。
中调用你的类ReportHelper.readNumber($V{Sub Total} +$V{Output VAT and CST and Service Tax})
如果您正在使用包,则包含包定义的完整路径。如果您不喜欢静态,请将ReportHelper类作为参数传递或将其定义为变量。
当然,类需要始终在classpath中。