JasperReports:如何在jsp页面中调用报表
我使用 iReport 3.7.4 版本制作了一份 jasper 报告,现在我必须使用它或在我使用 servlet、jsp 和 struts 框架、apache tomcat 作为服务器的 java 应用程序中调用该报告。
我想要有关如何通过一些示例调用 jasper 报告的步骤。
I made one jasper report using iReport 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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(6)
6年后@Bozho 答案现在(v5和v6)包含已弃用代码第5点
JRExporterParameter.OUTPUT_STREAM< /a>,但我会尽力改进其他方面
加载报告
已编译版本
.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, 连接);
导出报告
JRPdfExporter 导出器 = new JRPdfExporter() exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream)); SimplePdfExporterConfiguration 配置 = new SimplePdfExporterConfiguration(); 配置.setMetadataAuthor(“彼得”); //设置你的pdf配置, 导出器.setConfiguration(配置); 导出器.exportReport();
如果您想将报告直接流式传输到网页,这就是
contentType
和Content-disposition
设置以及如何检索outputStream
response.setContentType("application/x-pdf"); response.setHeader("Content-disposition", "inline; filename=myReport.pdf"); OutputStream 输出流=response.getOutputStream();
这段代码应该可以让您了解如何执行此操作
JasperReport jr=JasperCompileManager.compileReport("yourJRXMLFilePath");
JasperPrint jrPrint = JasperFillManager.fillReport(jr,mapWithParameters,aJRDataSource);
JasperExportManager.chooseYourFavoriteMethod(jrPrint,"destinationFile");
,否则,请检查 api
如果您已经使用 iReport 编译了该文件,则可以省略第一行。在这种情况下,请检查 JasperFillManager 上的 api 方法是否正确。
最佳解决方案(也为了更好的性能)将调用编译报告。
你可以看下面的例子
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");
}
}
这是做同样事情的不同方式。
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){
}
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
使用
加载它
dataSource
是您拥有的DataSource
实例 - 例如BeanCollectionDataSource
导出它
上面的
outputStream
可以是response.getOutputStream()
或FileOutputStream()
>,取决于您是要将其发送给客户端还是要将其存储为文件。如果您想将其发送到客户端,则必须发送Content-Disposition
标头以及更多内容,但这取决于您要保存的格式。如果您想在客户端打印,这是一个完全不同的问题 - 您需要一些客户端代码,例如小程序。load it with
Fill it with data.
dataSource
is theDataSource
instance you have - for example aBeanCollectionDataSource
Export it
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.