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。
使用扩展是另一种方式。
-
注册表a jesperreports_extension.properties上的自定义ExtensionsRegistryFactory net.sf.jasperreports.extension.registry.factory.repository.th.resource.file.resolve = th.motive.jasper.report.extension.factory .ResourceFileResolveRepositoryExtensionsRegistryFactory
-
创建一个ExtensionRegistry调用ResourceFileResolveRepositoryExtensionRegistry
-
在ResourceFileResolveRepositoryExtensionRegistry上,您可以注册您的服务以处理文件解析程序
(*)它不仅是文件解析器,您还可以执行StreamRepositoryService所做的任何事情
你从我的样本https://bitbucket.org/idplugin/th.motive.jasperreport.extend中完整引用