I made one jasper report using iRe开发者_StackOverflow中文版port 3.7.4 version
, now i have to use that or call that report in my java application where i am using servlets, jsp and struts framework, apache tomcat as server.
I want steps regarding how to call the jasper report with some example.
- Compile the report in iReport
- Place the compiled report on the classpath
load it with
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream);
Fill it with data.
dataSource
is theDataSource
instance you have - for example aBeanCollectionDataSource
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);
Export it
JRPdfExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream); exporter.exportReport();
The
outputStream
above may be either aresponse.getOutputStream()
or aFileOutputStream()
, depending on whether you want to send it to a client or you want to store it as a file. If you want to send it to the client, you'd have to send theContent-Disposition
header, and some more, but that depends on the format you want to save to. In case you want to print on the client, it's quite a different question - you'd need some client-side code, an applet, for example.
After 6 years @Bozho answer now (v5 and v6) contains deprecated code on point 5 JRExporterParameter.OUTPUT_STREAM, but I will try to improve the other points while I'm at it
Load the report
compiled version.jasper
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream);
or the non compiled version
.jrxml
(slower since need to compile but feasible)JasperReport jasperReport = JasperCompileManager.compileReport("path/to/myReport.jrxml");
Fill the report
with nothing (datasource generated inside report or just static text)JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params);
with datasource:
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);
with database connection (may the most common, sql executed inside report)
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, connection);
Export report
JRPdfExporter exporter = new JRPdfExporter() exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream)); SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration(); configuration.setMetadataAuthor("Petter"); //Set your pdf configurations, exporter.setConfiguration(configuration); exporter.exportReport();
If you like to stream the report directly to web page this is how
contentType
andContent-disposition
is set and how you retrieve theoutputStream
response.setContentType("application/x-pdf"); response.setHeader("Content-disposition", "inline; filename=myReport.pdf"); OutputStream outputStream = response.getOutputStream();
This piece of code should give you some idea on how to do it
JasperReport jr=JasperCompileManager.compileReport("yourJRXMLFilePath");
JasperPrint jrPrint = JasperFillManager.fillReport(jr,mapWithParameters,aJRDataSource);
JasperExportManager.chooseYourFavoriteMethod(jrPrint,"destinationFile");
Otherwise, check the api The first line can be ommited if you had already compiled the file with iReport. Check the api for the correct method on JasperFillManager in this case.
in the first answer, point 5: After
JRPdfExporter exporter= new JRPdfExporter();
add
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
Best solution (For better performance as well), will be calling a compiled report.
you can see the example below
import java.io.IOException;
import java.util.HashMap;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
public class PdfFromJasperFile {
public static void main(String[] args) throws JRException, IOException {
JasperPrint jasperPrint = JasperFillManager.fillReport("report.jasper", new HashMap<String, Object>(),
new JREmptyDataSource());
JasperExportManager.exportReportToPdfFile(jasperPrint, "sample.pdf");
}
}
This is a different way of doing the same.
JasperReport jasperReport;
JasperPrint jasperPrint;
Map<String, Object> param = new HashMap<String, Object>();
try{
String sourceFileName = ".jrxml";
jasperReport = JasperCompileManager.compileReport(sourceFileName);
jasperPrint = JasperFillManager.fillReport(jasperReport,param,new JRBeanCollectionDataSource(getDetails()));
JasperExportManager.exportReportToPdfFile(jasperPrint, ".pdf");
}
catch(Exception e){
}
精彩评论