Jasper Reports 5.0.1中的文件解析器

使用5.0.1不推荐使用REPORT_FILE_RESOLVER和示例实现: http : //jasperreports.sourceforge.net/sample.reference/tableofcontents/index.html#fileresolver

声明强烈建议切换到JasperReportsContext。

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

我问,怎么做呢?

浏览完资源后,我找到了解决方案。

JRXML imageExpression标记:

     

Java代码段:

 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。

使用扩展是另一种方式。

  1. 注册表a jesperreports_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中完整引用