【问题标题】:JRProperties became deprecated, recommended way of replacingJRProperties 已弃用,推荐的替换方式
【发布时间】:2021-08-30 22:13:06
【问题描述】:

如文档中所述,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);
   (...)

所以我的问题是:

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

【问题讨论】:

  • 我刚请了几天假,但我现在接受了你的回答。谢谢!
  • 感谢接受,祝您有美好的一天...

标签: java jasper-reports


【解决方案1】:

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

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

这是覆盖结构

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

  2. jasperreports.properties 加载/覆盖属性(如果在您的发行版的根包中提供)

  3. 如果在 jrxml report level

    中指定,则加载/覆盖属性
    <jasperReport...>
       <property name="net.sf.jasperreports.awt.ignore.missing.font" value="true"/>
       ...
    </jasperReport>
    
  4. 如果在 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 报告级别

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      这可行,并且会在控制台上打印一个错误。

      2021-08-30 22:05:08 FontUtil [警告] JVM 无法使用字体“calibri”。更多详情请见http://

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多