JRProperties被弃用,推荐的替换方式

时间:2016-02-23 10:59:05

标签: java jasper-reports

JRProperties类已注释为已弃用,并由JRPropertiesUtil替换,如文档中所述

我一直在使用它以下列方式设置属性(因为它是一个提供静态方法的类),

JRProperties.setProperty("net.sf.jasperreports.default.font.name", defaultPDFFont);
JRProperties.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");
   (...)

我假设现在设置属性的一种未经推荐的方法。

我已经找到了两种符合API文档的方法,即直接使用JasperReportsContext的实例:

JasperReportsContext jasperReportsContext = DefaultJasperReportsContext.getInstance();
jasperReportsContext.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");
jasperReportsContext.setProperty("net.sf.jasperreports.default.font.name", defaultPDFFont);
   (...)

或将JasperReportsContext个实例传递给JRPropertiesUtil

JasperReportsContext jasperReportsContext = DefaultJasperReportsContext.getInstance();
JRPropertiesUtil jrPropertiesUtil = JRPropertiesUtil.getInstance(jasperReportsContext);
jrPropertiesUtil.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");
jrPropertiesUtil.setProperty("net.sf.jasperreports.default.font.name", defaultPDFFont);
   (...)

所以我的问题是:

为报告打印机设置属性的推荐方法是什么?

2 个答案:

答案 0 :(得分:1)

您目前建议的metod没有区别,但如果您正在寻找设置属性的常规方法。

.properties个文件和您的jrxml文件加载属性。

这是覆盖结构

  1. 从分发

  2. 中的default.jasperreports.properties加载属性
  3. 如果在您的发行版的根软件包中提供,则jasperreports.properties加载/覆盖属性

  4. 如果在jrxml 报告级别

    中指定,则加载/覆盖属性

    <jasperReport...>
       <property name="net.sf.jasperreports.awt.ignore.missing.font" value="true"/>
       ...
    </jasperReport>
    
  5. 如果在jrxml 元素级别

    中指定,则加载/覆盖属性
    <reportElement>
         <property name="net.sf.jasperreports.export.html.class" value="test"/>
    </reportElement>
    
  6. 您还可以使用

    在jrxml中设置动态属性
    <propertyExpression name="net.sf.jasperreports.export.xls.sheet.name"><![CDATA[$F{SheetName}]]></propertyExpression>
    

    阅读更多内容以了解如何使用IDE:properties-how-use-additional-properties-build-enhanced-reports

    那么你应该把你的财产net.sf.jasperreports.awt.ignore.missing.font=true放在哪里?

    你应该不使用这会导致出口不一致,你应该使用字体扩展名,请参阅我的回答Font is not available to the JVM with Jasper Reports

    如果您不小心将其置于jasperreports.propertiesjrxml报告级别

答案 1 :(得分:0)

您找到的两个解决方案都可用于设置全局属性。

他们做同样的事情,JRPropertiesUtil.setProperty()调用JasperReportsContext.setProperty()。

我会推荐第一个,因为它更短。