Ran*_*dom 12 java jasper-reports
我有一个网络应用程序,客户端已要求查看一些报告.方法是使用iReport并在屏幕上显示报告.
我已经问了这样的事情.但今天我发现报告文件(jrxml)的路径是绝对的.所以我必须更改程序,以便它接受相对路径.我一直在尝试这样做,但似乎jrxml或编译(.jasper)文件都不接受既不编译也不填充报告的相对路径.
这是我迄今为止所得到的:
//path is generated as request.getContextPath() + "/jrxmlFiles/"
public void generateReport(HttpServletResponse res, ConexionAdmin con, String path) throws Exception{
ServletOutputStream out = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
JasperDesign jasperDesign = JRXmlLoader.load(path);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, pars, con.initConexion());
res.setContentType("application/pdf");
res.setContentLength(bytes.length);
out = res.getOutputStream();
out.write(bytes, 0, bytes.length);
res.setHeader("Cache-Control", "cache");
res.setHeader("Content-Disposition", "attachment; filename=report.pdf");
res.setHeader("Pragma", "cache");
res.setContentLength(bos.size());
out.write(bos.toByteArray());
out.flush();
bos.close();
out.close();
res.flushBuffer();
}
Run Code Online (Sandbox Code Playgroud)
这似乎适用于绝对路径,但抛出我:
Exception Message
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException
Run Code Online (Sandbox Code Playgroud)
当改为相对路径时.我在网上搜索没有成功如何改变我的适合度.
我有jasper API的javaDoc,但如果我能帮助它,我宁愿不读它.
Dav*_*vis 19
.jrxml文件时将.jasper文件编译为文件.jrxml.通常,您只需加载.jasper文件并完全跳过编译.它要快得多..jasper和存储.jrxml文件.
ROOT_DIR = "/full/path/to/reports/"
IMAGE_DIR = $P{ROOT_DIR} + "images/"
STYLES_DIR = $P{ROOT_DIR} + "styles/"
SUBREPORT_DIR = $P{ROOT_DIR} + "subreports/"
COMMON_DIR = $P{ROOT_DIR} + "common/"$P{ROOT_DIR}(例如,根据$P{IMAGE_DIR}其定义$P{ROOT_DIR}).$P{ROOT_DIR}从您的环境中传递in 的值.然后在必要时使用表达式.例如,引用子报告如下:
<subreportExpression>
<![CDATA[$P{SUBREPORT_DIR} + "subreport.jasper"]]>
</subreportExpression>
Run Code Online (Sandbox Code Playgroud)
这将允许子报表目录在不同环境之间变化.
| 归档时间: |
|
| 查看次数: |
27392 次 |
| 最近记录: |