Вам нужно вызвать сервлет по нажатию кнопки или изображения из вашего файла JSP.В сервлете скомпилируйте свой jrxml (формат отчета jasper).И тогда вам нужно написать код для загрузки этого сервлета.
Ниже приведен код, используемый для составления отчета о яшме и экспорта в определенную папку:
HashMap<String, Object> response = new HashMap<String, Object>();
String fileName = "C:\\temp\\report.jrxml";
String pdfFile = "C:\\temp\\";
JasperReport mainReport;
JasperDesign mainReportDesign;
try {
mainReportDesign = JRXmlLoader.load(fileName);
mainReport = JasperCompileManager.compileReport(mainReportDesign);
if(reportFormat.equalsIgnoreCase("PDF"))
pdfFile = pdfFile+"report.pdf";
else if(reportFormat.equalsIgnoreCase("CSV"))
pdfFile = pdfFile+"report.csv";
JasperPrint jasperPrint = JasperFillManager.fillReport(mainReport, params, new JREmptyDataSource());
if(reportFormat.equalsIgnoreCase("PDF"))
JasperExportManager.exportReportToPdfFile(jasperPrint, pdfFile);
else if(reportFormat.equalsIgnoreCase("CSV")) {
JRExporter exporter = new JRCsvExporter();
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, pdfFile);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.exportReport();
}
} catch (JRException e) {
e.printStackTrace();
}
Ниже код используется для загрузки этого файла экспорта из этой папки.Это будет в вашем классе сервлетов:
File f = new File("C:\\temp\\report.pdf");
int length = 0;
ServletOutputStream op = resp.getOutputStream();
ServletContext context = getServletConfig().getServletContext();
String mimetype = context.getMimeType(f.getName());
resp.setContentType( (mimetype != null) ? mimetype : "application/octet-stream" );
resp.setContentLength( (int)f.length() );
resp.setHeader( "Content-Disposition", "attachment; filename="+reportName );
byte[] bbuf = new byte[1024];
DataInputStream in = new DataInputStream(new FileInputStream(f));
while ((in != null) && ((length = in.read(bbuf)) != -1))
{
op.write(bbuf,0,length);
}
in.close();
op.flush();
op.close();