JasperReports API 中的 FileResolver 被什么替代?

2024-02-07

我们的一个软件实用程序使用一个类来实现net.sf.jasperreports.engine.util.FileResolver加载驻留在与报表相关的路径或要通过专有文件服务器协议加载的报表元素(例如图像)。从最新版本 6.6.0 开始,我看到计划是完全删除 FileResolver 类。然而,在 Javadocs 中,它只指出该类将被删除。没有指定有关更换的详细信息。

我并不期望能够将 FileResolver 与另一个类进行 1:1 替换,但我真的很想知道报告填充器现在使用什么来定位外部报告元素。


FileResolver已被弃用,有利于net.sf.jasperreports.repo.RepositoryService实施。

有一个名为的内置实现net.sf.jasperreports.repo.FileRepositoryService这大致相当于已弃用的net.sf.jasperreports.engine.util.SimpleFileResolver.

存储库服务注册为JasperReportsContext扩展。

这可以在 jasperreports_extension.properties 文件中完成,如下所示:

net.sf.jasperreports.extension.registry.factory.file.repository=net.sf.jasperreports.repo.FileRepositoryServiceExtensionsRegistryFactory
net.sf.jasperreports.extension.file.repository.root=/path/to/repository
net.sf.jasperreports.extension.registry.factory.persistence=net.sf.jasperreports.repo.FileRepositoryExtensionsRegistryFactory

注册扩展也可以通过以编程方式创建JasperReportsContext对象,然后使用它来填充报告:

    SimpleJasperReportsContext context = new SimpleJasperReportsContext();
    FileRepositoryService fileRepository = new FileRepositoryService(context, "/path/to/repository", false);
    context.setExtensions(RepositoryService.class, Collections.singletonList(fileRepository));
    context.setExtensions(PersistenceServiceFactory.class, Collections.singletonList(FileRepositoryPersistenceServiceFactory.getInstance()));

    JasperPrint jasperPrint = JasperFillManager.getInstance(context).fill(jasperReport, params);

如果您需要实现自定义存储库服务,您可以采取FileRepositoryService作为参考。你可能想要实施StreamRepositoryService并注册PersistenceServices(如文件存储库持久化服务工厂 https://github.com/TIBCOSoftware/jasperreports/blob/master/jasperreports/src/net/sf/jasperreports/repo/FileRepositoryPersistenceServiceFactory.java).

如果您需要做的是相对于报告的资源路径,您还可以查看JRFiller 方法 http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/fill/JRFiller.html#fill-net.sf.jasperreports.engine.JasperReportsContext-net.sf.jasperreports.engine.fill.JasperReportSource-java.util.Map-需要一个JasperReportSource争论。传递这样的对象意味着自动解析相对于报表的报表资源引用(假设存储库服务基于以下方式实现资源查找):RepositoryContext).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JasperReports API 中的 FileResolver 被什么替代? 的相关文章

随机推荐