我有一个网络应用程序,客户要求查看一些报告。方法是使用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();}这似乎适用于绝对路径,但会抛出我:Exception Messagenet.sf.jasperreports.engine.JRException: java.io.FileNotFoundException更改为相对路径时。我搜索过网络,但没有成功改变自己的健康状况。我有用于jasper API的javaDoc,但是如果可以帮助的话,我宁愿不通读它。
3 回答

慕沐林林
TA贡献2016条经验 获得超9个赞
我遇到了同样的问题,并且找到了解决方案。首先,将报表中使用的每个对象(子报表,图像等)和所有扩展名(.jasper,.jrxml)放在一个文件夹中,然后将该文件夹放在C://磁盘中。现在可能将其放置在“我的文档”中或单词之间有空格的任何路径中,然后iReport将其视为“ My%20Documents”,并将其混淆。
因此,将文件夹放在C://,将与报表相关的所有内容都放在同一个文件夹中,并为所有内容提供相对路径。这应该工作。希望我能帮助任何人。
添加回答
举报
0/150
提交
取消