我使用iReport 3.7.4 version
制作了一个jasper报告,现在我必须使用它或在我的java应用程序中调用该报告,其中我使用servlet,jsp和struts框架,apache tomcat作为服务器。
我想要一些关于如何使用一些例子来调用jasper报告的步骤。
答案 0 :(得分:8)
加载
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream);
用数据填充。 dataSource
是您拥有的DataSource
个实例 - 例如BeanCollectionDataSource
JasperPrint jasperPrint =
JasperFillManager.fillReport(jasperReport, params, dataSource);
导出
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
exporter.exportReport();
上面的outputStream
可能是response.getOutputStream()
或FileOutputStream()
,具体取决于您是要将其发送到客户端还是要将其存储为文件。如果要将其发送到客户端,则必须发送Content-Disposition
标题以及其他标题,但这取决于要保存的格式。如果您想在客户端上打印,这是一个完全不同的问题 - 例如,您需要一些客户端代码,一个小程序。
答案 1 :(得分:4)
6年后@Bozho answer现在(v5和v6)包含第5点的已弃用代码 JRExporterParameter.OUTPUT_STREAM,但我会尝试改进其他要点,而我会在
加载报告
已编译版本.jasper
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(inputStream);
或非编译版本.jrxml
(因为需要编译但可行性较慢)
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/myReport.jrxml");
填写报告
无(报告内部生成的数据源或仅静态文本)
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params);
数据源:
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);
数据库连接(可能是最常见的,在报告中执行的sql)
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, connection);
导出报告
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();
如果您希望直接将报告流式传输到网页,请设置contentType
和Content-disposition
的方式以及检索outputStream
的方式
response.setContentType("application/x-pdf");
response.setHeader("Content-disposition", "inline; filename=myReport.pdf");
OutputStream outputStream = response.getOutputStream();
答案 2 :(得分:1)
这段代码应该让你知道如何做到这一点
JasperReport jr=JasperCompileManager.compileReport("yourJRXMLFilePath");
JasperPrint jrPrint = JasperFillManager.fillReport(jr,mapWithParameters,aJRDataSource);
JasperExportManager.chooseYourFavoriteMethod(jrPrint,"destinationFile");
否则,请检查api 如果您已使用iReport编译了文件,则可以省略第一行。在这种情况下,请检查api以获取JasperFillManager上的正确方法。
答案 3 :(得分:1)
在第一个答案中,第5点: 之后
JRPdfExporter exporter= new JRPdfExporter();
添加
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
答案 4 :(得分:1)
最佳解决方案(为了获得更好的性能),将调用已编译的报告。
你可以看到下面的例子
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");
}
}
答案 5 :(得分:0)
这是一种不同的做法。
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){
}