rdx Posted November 16, 2006 Share Posted November 16, 2006 Hi. Im new to Jasper and am struggling for a long time to get reports to export into pdf.Code:JasperPrint print = JasperFillManager.fillReport(report, null, jdbcConnection );OutputStream output = new FileOutputStream(new File("myfile.pdf"«»));JasperExportManager.exportReportToPdfStream(print, output);output.close(); I used the above code in my jsp page to generate a pdf file. But, how can the user downlaod the file onec it is created? Is there a way to put the created file in a session and downlaod rather than putting in the local file system? Please advice me on how to do this. Link to comment Share on other sites More sharing options...
arbitary Posted November 16, 2006 Share Posted November 16, 2006 After your report has been generated and saved to the machine, you need to open it for viewing. Code:res.setContentType("application/pdf"«»);BufferedInputStream in;try {in = new BufferedInputStream(new FileInputStream(opReport));OutputStream out = res.getOutputStream();int bt = -1;while((bt = in.read()) != -1) out.write(bt); out.flush(); out.close(); in.close(); File opReportFile = new File(opReport); opReportFile.delete();} In the above code, opReport is the string name of the file(alongwith the path). Once the report is viewed, the PDF viewer will allow the user to save it. I delete the report once it is viewed(since the user has a copy), but you can choose to retain it. Link to comment Share on other sites More sharing options...
rdx Posted November 18, 2006 Author Share Posted November 18, 2006 That was very helpful of yours.When I export as the code above, is the file getting saved to the web server or the clients computer? I am confused because right now I am using the localhost and client and servers machine is the same thing. If it is getting saved in the client, then it is fine. Otherwise, is it possible to save the file in a session instead of the server's local file system and download it? I am asking this because I dont want person B to open the file created by person A. Please tell me how I can achieve this. What I want to do is, when the person clicks the export button, the file gets downloaded to the clients machine. thanksPost edited by: rdx, at: 2006/11/17 18:43 Link to comment Share on other sites More sharing options...
arbitary Posted November 18, 2006 Share Posted November 18, 2006 The file will get saved on the server. However, what you can do is, delete the file from the server after it opens, like I am doing. The person viewing the open file always has a choice to save it locally. Link to comment Share on other sites More sharing options...
rsilverns.sympatico.ca Posted November 20, 2006 Share Posted November 20, 2006 You can also just stream the file directly to the browser. I do something similar with a CSV file, modify as needed for other formats.... Code:private void returnCSVExport(String xmlFile, String compiledFile, String dwnloadFN, Map customParams, HttpServletResponse response, Connection c) throws IOException { ServletContext context = getServletContext(); // Specify a default folder for storing // compiled XML templates System.setProperty("jasper.reports.compile.temp", context .getRealPath("/reports/"«»)); try { JasperCompileManager.compileReportToFile(getServletContext() .getRealPath(xmlFile), getServletContext().getRealPath( compiledFile)); File reportFile = new File(getServletContext().getRealPath( compiledFile)); JasperReport jasperReport = (JasperReport) JRLoader .loadObject(reportFile.getPath()); JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, customParams, c); JRCsvExporter csvExporter = new JRCsvExporter(); csvExporter.setParameter(JRCsvExporterParameter.FIELD_DELIMITER, "|"«»); csvExporter.setParameter(JRCsvExporterParameter.RECORD_DELIMITER, "n"«»); csvExporter.setParameter(JRCsvExporterParameter.JASPER_PRINT, jasperPrint); csvExporter.setParameter(JRCsvExporterParameter.OUTPUT_STREAM, response.getOutputStream()); //This lets the stream be downloaded as a file rather than sent to browser.. change to application/pdf for inline viewing.response.setContentType("application/x-download"«»); //remove this line for inline viewing. response.setHeader("Content-Disposition", "attachment; filename="+ dwnloadFN); csvExporter.exportReport(); } catch (JRException e) { } }Post edited by: rsilver@bfm.bm, at: 2006/11/20 12:21 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now