Jasper reports 当其包含值0(零)时,在字段中设置为空
我正在使用Jasper reports 当其包含值0(零)时,在字段中设置为空,jasper-reports,ireport,Jasper Reports,Ireport,我正在使用iReport并生成大约20个pdf报告。现在我希望报告中的所有字段都为空,其中的值为0(零) 为此,我使用代码设置文本字段表达式 $F{diamondQty}.doubleValue()==0.0?null:$F{diamondQty}.doubleValue() 并启用字段的空时为空 它工作正常,但需要对所有20个报告的所有字段执行相同的操作 还有其他更好的解决方法吗?也许你可以用一个。 格式工厂允许您指定自己的日期和数字格式。您可以将其设置为报表属性(formatFactory
iReport
并生成大约20个pdf报告。现在我希望报告中的所有字段都为空,其中的值为0(零)
为此,我使用代码设置文本字段表达式
$F{diamondQty}.doubleValue()==0.0?null:$F{diamondQty}.doubleValue()
并启用字段的空时为空
它工作正常,但需要对所有20个报告的所有字段执行相同的操作
还有其他更好的解决方法吗?也许你可以用一个。
格式工厂允许您指定自己的日期和数字格式。您可以将其设置为报表属性(formatFactoryClass
),或将其设置为参数(report\u FORMAT\u FACTORY
)以下操作似乎有效:
单击窗口>>首选项
选择功能
检查开发
单击确定
下一步:
打开项目浏览器
右键单击项目名称
选择属性
选择Java构建路径
单击源选项卡
单击添加文件夹
选择创建新文件夹
将文件夹名称设置为:src
单击完成
选择src
单击确定
设置默认输出文件夹:项目名称/build
单击确定
像往常一样创建报告(使用使用日期、参数或字段的文本字段),然后:
在“大纲”面板中选择报告
打开属性面板
将格式化工厂类设置为:com.company.reports.ReportFormatFactory
接下来,在名为com.company.reports
的包(文件夹)的“src”目录中创建一些源代码。将以下内容粘贴到名为ReportFormatFactory.java
的文件中,该文件保存在该目录中:
import java.text.DateFormat;
import java.util.Locale;
import java.util.TimeZone;
import net.sf.jasperreports.engine.util.DefaultFormatFactory;
/**
* Delegates creation of date and number formatters to JasperReports' default
* formatters. This class ensures that dates are formatted consistently across
* all reports.
*/
public class ReportFormatFactory extends DefaultFormatFactory {
/**
* Returns a DateFormat instance that creates dates in YYYY/MM/dd format.
*
* @param pattern Unused.
* @param locale Passed to the DefaultFormatFactory instance.
* @param timezone Passed to the DefaultFormatFactory instance.
*
* @return An object that can format dates.
*/
@Override
public DateFormat createDateFormat(
String pattern, Locale locale, TimeZone timezone ) {
return super.createDateFormat( "YYYY/MM/dd", locale, timezone );
}
}
运行报告时,日期的格式应为YYYY/MM/dd
如果要更改格式(例如,更改为dd/MM/YYYY
),请更新源代码中的日期格式行,然后重新启动Jaspersoft Studio(类加载器在修改后似乎不会重新加载ReportFormatFactory类)
为避免每次日期格式更改时都必须重新启动,请使用资源包:
创建一个名为i18n
右键单击项目名称
选择新建>>文件夹
将文件夹名称设置为i18n
单击完成
右键单击i18n
选择新建>>其他
展开消息编辑器
选择ResourceBundle
单击下一步
将名称设置为:ReportsLocale
添加一个区域设置(例如en_US)
单击完成
将i18n目录添加到构建过程:
右键单击i18n
选择生成路径>>配置生成路径
单击添加文件夹
检查i18n
单击确定
再次单击确定
将createDateFormat
方法更改如下:
@Override
public DateFormat createDateFormat(
String pattern, Locale locale, TimeZone timezone ) {
String dateFormat = DATE_FORMAT_DEFAULT;
try {
ResourceBundle rb = ResourceBundle.getBundle( "EducationReports" );
String df = rb.getString( DATE_FORMAT );
if( df != null ) {
dateFormat = df;
}
}
catch( Exception e ) {
// If the resource bundle isn't found, use the default date format.
// TODO: Pass this exception into a logger.
}
return super.createDateFormat( dateFormat, locale, timezone );
}
并将这些常量添加到类定义中(紧跟在公共类声明之后,第15/16行附近):
重新启动Jaspersoft Studio,然后:
编辑报告缩放文件
添加date.format
属性
将属性设置为dd/MM/YYYY
设置所有区域设置的属性值
例如,在运行报告时,日期应类似于1976年2月29日
您可以根据需要对此进行调整以更改字段值。我无法理解此答案?,问题是关于删除值(如果值为0),您正在发布关于格式化日期的帖子,好的,您可以用java创建自己的类以在0上显示空字符串,但此答案似乎离0问题的解决方案有点远,也许可以编辑它来包含一个数字格式的例子去点,彼特。它需要重写createNumberFormat
,而不是从超类重写createDateFormat
。我会在时间允许的情况下修改。谢谢,如果你完成后打电话给我,我很乐意在jasper reports部分投票选出好的答案
private final static String DATE_FORMAT = "date.format";
private final static String DATE_FORMAT_DEFAULT = "YYYY/MM/dd";