我有一個web應用程序,客戶端請求查看一些報告。該方法一直使用iReport並在屏幕上向他們顯示報告。使用JasperReports和相對路徑
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
時更改爲相對路徑。我已經在網絡上搜索瞭如何改變我的身材並沒有取得成功。
我有javaDoc的jasper API,但我寧願不讀它通過,如果我可以幫助它。
似乎我忘了添加pars的聲明,它只是一個新的HasMap()(因爲我想要的報告沒有變量)。對不起,錯了! – Random 2011-03-21 11:10:26