【问题标题】:What replaces FileResolver in the JasperReports API?JasperReports API 中的 FileResolver 由什么替代?
【发布时间】:2018-06-06 22:08:44
【问题描述】:

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

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

【问题讨论】:

    标签: java jasper-reports


    【解决方案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(如FileRepositoryPersistenceServiceFactory)。

    如果您需要做的是关于相对于报告的资源路径,您还可以查看带有JasperReportSource 参数的JRFiller methods。传递这样一个对象意味着自动将报表资源引用解析为相对于报表的引用(前提是存储库服务实现了基于RepositoryContext 的资源查找)。

    【讨论】:

    • 我必须在“/path/to/repository”中设置完整路径。相对路径或规范名称不起作用。
    猜你喜欢
    • 2012-08-15
    • 2017-03-18
    • 1970-01-01
    • 2011-02-27
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多