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

JRProperties became deprecated, recommended way of replacing

文档中所述JRProperties class has been annotated as deprecated and replaced by JRPropertiesUtil

我一直在用它按以下方式设置属性(因为它 class 提供静态方法),

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);
   (...)

所以我的问题是:

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

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

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

这是覆盖结构

  1. 从分布default.jasperreports.properties加载属性

  2. Loads/override 来自 jasperreports.properties 的属性(如果在您的发行版的根包中提供)

  3. Loads/override 属性 如果在 jrxml 中指定 report level

    <jasperReport...>
       <property name="net.sf.jasperreports.awt.ignore.missing.font" value="true"/>
       ...
    </jasperReport>
    
  4. Loads/override 属性 如果在 jrxml 中指定 element level

    <reportElement>
         <property name="net.sf.jasperreports.export.html.class" value="test"/>
    </reportElement>
    

您还可以使用

在 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 报告级别

您找到的两种解决方案均适用于设置全局属性。

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

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

只需添加以下行即可将参数传递给 jasper 上下文。JRPropertiesUtil.asBoolean("net.sf.jasperreports.awt.ignore.missing.font", true);

这有效,并且会在控制台上打印错误。

2021-08-30 22:05:08 FontUtil [WARN] Font 'calibri' is not available to the JVM. For more details, see http:/