【问题标题】:File resolver in Jasper Reports 5.0.1Jasper Reports 5.0.1 中的文件解析器
【发布时间】:2013-02-06 21:34:25
【问题描述】:

在 5.0.1 中,REPORT_FILE_RESOLVER 已被弃用,示例实现: http://jasperreports.sourceforge.net/sample.reference/tableofcontents/index.html#fileresolver

声明强烈建议切换到 JasperReportsContext。

我找不到 JasperReportsContext 使用的任何示例。据我所知,我应该寻找具有 FileResolver getter 和 setter 的 LocalJasperReportsContext。

我在问,它必须如何完成?

【问题讨论】:

    标签: java jasper-reports websphere deprecated resolver


    【解决方案1】:

    在浏览了源代码后,我找到了解决方案。

    JRXML imageExpression 标签:

    <band height="79" splitType="Stretch">
    <image scaleImage="FillFrame" isLazy="true" onErrorType="Blank">
        <reportElement uuid="3340bf0f-8471-45e9-8ea4-bdf44a7c0e68" x="0" y="0" width="150" height="69"/>
        <imageExpression class="java.io.File"><![CDATA["image.jpg"]]></imageExpression>
    </image>
    

    Java 代码 sn-p:

    FileResolver resolver = new FileResolver() {
    @Override
    public File resolveFile(String filename) {
        return new File("/some/path");
    }
    };
    
    
    InputStream jasperfile = getClass().getClassLoader().getResourceAsStream("file.jasper");
    
    LocalJasperReportsContext ctx = new LocalJasperReportsContext(DefaultJasperReportsContext.getInstance());
    ctx.setClassLoader(getClass().getClassLoader());
    ctx.setFileResolver(resolver);
    JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperfile);
    
    JasperFillManager fillmgr = JasperFillManager.getInstance(ctx);
    JasperExportManager exmgr = JasperExportManager.getInstance(ctx);
    
    JasperPrint jasperPrint = fillmgr.fill(jasperReport, parameters, beanColDataSource);
    ByteArrayOutputStream pdfBytes = new ByteArrayOutputStream();
    exmgr.exportToPdfStream(jasperPrint, pdfBytes);
    

    您必须创建一个新上下文并将其传递给 JasperFillManager 和 JasperExportManager。

    【讨论】:

      【解决方案2】:

      使用扩展是其他方式。

      1. 在 jasperreports_extension.properties 上注册一个自定义 ExtensionsRegistryFactory net.sf.jasperreports.extension.registry.factory.repository.th.resource.file.resolve=th.motive.jasper.report.extension.factory.ResourceFileResolveRepositoryExtensionsRegistryFactory

      2. 创建一个 ExtensionRegistry 调用 ResourceFileResolveRepositoryExtensionRegistry

      3. 在 ResourceFileResolveRepositoryExtensionRegistry 你可以注册你的服务来处理文件解析器

      (*) 它不仅仅是文件解析器,你可以做任何 StreamRepositoryService 做的事情

      你参考了我的样本https://bitbucket.org/idplugin/th.motive.jasperreport.extend

      【讨论】:

        猜你喜欢
        • 2016-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-27
        • 2019-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多