我正在使用iReport并生成大约 20 个 pdf 报告。现在我希望报告中包含值 0(零)的所有字段都为空白。
为此,我使用代码设置文本字段表达式
$F{diamondQty}.doubleValue() == 0.0 ? null : $F{diamondQty}.doubleValue()
并启用Blank when null该字段的选项。
它工作正常,但需要对所有 20 个报告的所有字段执行相同操作。
还有其他更好的解决方案吗?
我正在使用iReport并生成大约 20 个 pdf 报告。现在我希望报告中包含值 0(零)的所有字段都为空白。
为此,我使用代码设置文本字段表达式
$F{diamondQty}.doubleValue() == 0.0 ? null : $F{diamondQty}.doubleValue()
并启用Blank when null该字段的选项。
它工作正常,但需要对所有 20 个报告的所有字段执行相同操作。
还有其他更好的解决方案吗?
也许您可以使用FormatFactory。
格式工厂允许您指定自己的日期和数字格式。您可以将其设置为报表属性 ( formatFactoryClass),或将其设置为参数 ( REPORT_FORMAT_FACTORY)
以下似乎有效:
下一个:
srcbuild像往常一样创建一个报告(带有一个使用日期、参数或字段的文本字段),然后:
com.company.reports.ReportFormatFactory接下来,在名为com.company.reports. 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
i18nReportsLocale将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 );
}
并将这些常量添加到类定义中(在public class声明之后,大约第 15/16 行):
private final static String DATE_FORMAT = "date.format";
private final static String DATE_FORMAT_DEFAULT = "YYYY/MM/dd";
重启 Jaspersoft Studio,然后:
date.format属性dd/MM/YYYY例如,当报表运行时,日期应类似于 1976 年 2 月 29 日。
您可以调整它以根据需要更改字段值。