gpt4 book ai didi

java - 使用预编译的 jasper 文件或在运行时编译 jrxml 模板是否更好?

转载 作者:行者123 更新时间:2023-12-02 01:16:16 25 4
gpt4 key购买 nike

我有以下 2 个选项来使用 jasper 生成 PDF。

使用下面示例代码中给出的预编译 Jrxml (.jasper) 文件

JRBeanCollectionDataSource beanCollectionDS = new JRBeanCollectionDataSource(List<JavaObject>);
File jasperFile = new File("JasperTemplate.jasper");
JasperReport jr = (JasperReport) JRLoader.loadObject(jasperFile);
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("REPORT_TITLE", "Test Report");
JasperPrint jp = JasperFillManager.fillReport(jr, params, beanCollectionDS);

使用 Jasper 模板 (.jrxml) 文件,该文件在运行时编译,如下面的示例代码所示

JRBeanCollectionDataSource beanCollectionDS = new JRBeanCollectionDataSource(List<JavaObject>);
String template = "JasperTemplate.jrxml";
InputStream reportStream = this.getClass().getResourceAsStream(template);
JasperDesign jd = JRXmlLoader.load(reportStream);
JasperReport jr = JasperCompileManager.compileReport(jd);
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("REPORT_TITLE", "Test Report");
JasperPrint jp = JasperFillManager.fillReport(jr, params, beanCollectionDS);

哪种方法更好以及为什么。

最佳答案

总结@Andreas提供的答案。

<小时/>

需要进行报告编译的确切时刻取决于报告设计模板在应用程序执行期间是否发生更改。

如果报表设计(JRXML)在运行时不改变,即应用程序仅向预定义的报表模板提供动态数据和参数值,则报表设计可以被视为应用程序源代码,建议在应用程序构建期间编译它们处理并将编译报告(*.jasper 文件)包含在二进制/部署的应用程序中。

在更复杂的场景中,如果需要在运行时生成、更改或部署报告模板,则必须在运行时编译它们。在这种情况下,建议使用基于 JDK 的报告编译器,因为:

  • 它不需要像基于 JDK 的报告那样使用(临时)文件编译器。
  • 它使用上下文类加载器来解析类,而基于JDK报告编译器使用需要设置的文件系统类路径由用户设置。

关于java - 使用预编译的 jasper 文件或在运行时编译 jrxml 模板是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58497257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com