【发布时间】:2011-07-19 14:28:25
【问题描述】:
我有一个网络应用程序,客户要求查看一些报告。方法是使用 iReport 并将报告显示在屏幕上。
I have already asked something like this。但是今天我发现报告文件(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();
}
这似乎适用于绝对路径,但抛出了我:
Exception Message
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException
当更改为相对路径时。我已经在网上搜索了如何改变我的适应症没有成功。
我有 jasper API 的 javaDoc,但如果我能提供帮助,我宁愿不通读它。
【问题讨论】:
-
似乎我忘记添加 pars 的声明,它只是一个新的 HasMap() (因为我正在尝试的报告没有变量)。对不起,放错地方了!
标签: java jasper-reports