【问题标题】:File resolver in Jasper Reports 5.0.1Jasper Reports 5.0.1 中的文件解析器
【发布时间】:2013-02-06 21:34:25
【问题描述】:
【问题讨论】:
标签:
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】:
使用扩展是其他方式。
在 jasperreports_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