问题是如何导出jasperreport生成的报告并在jsp页面中编译导出以及jsp页面的特定部分

时间:2010-10-10 11:28:28

标签: jsp jasper-reports

当我编译使用ireport创建的jrxml文件并导出它时如何在jsp页面的特定部分中导出此页面       我在谷歌搜索了很多,我没有得到任何与我的要求相关的解决方案

如果我在jsp页面中写一些内容,则没有显示只有报告可见

我在jsp页面中的代码是: -

<%@ page language="java" import="net.sf.jasperreports.engine.*" %>
<%@ page language="java" import="net.sf.jasperreports.engine.export.*" %>
<%@ page import="java.sql.*,java.io.*" %>

<%
String filename = request.getParameter("filename");
String reporttype = request.getParameter("reporttype");
System.out.println(filename);
System.out.println(reporttype);
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/kms","root", "root");
System.out.println("Connection Established");

String path = application.getRealPath("/");
System.out.println(path);
JasperPrint jasperPrint = JasperFillManager.fillReport(path + "/reports/" + filename, null, con);


System.out.println("Report Created...");

OutputStream ouputStream = response.getOutputStream();
JRExporter exporter = null;

if( "pdf".equalsIgnoreCase(reporttype) )
{
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=\"file.pdf\"");

exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
}

try
{
exporter.exportReport();
}
catch (JRException e)
{
throw new ServletException(e);
}
finally
{
if (ouputStream != null)
{
try
{
ouputStream.close();
}
catch (IOException ex)
{
    System.out.println("exception thrown");
}
}
}
%>

1 个答案:

答案 0 :(得分:2)

创建另一个JSP,其中包含<iframe><object>,其src指向报告的URL,然后在浏览器中打开该JSP。

<iframe src="report.jsp?filename=foo&reporttype=pdf"></iframe>

这样您就可以围绕<iframe>编写另一个模板文本。

<!DOCTYPE html>
<html lang="en">
    <head><title>Report</title></head>
    <body>
        <h1>Here is your report</h1>
        <iframe src="report.jsp?filename=foo&reporttype=pdf"></iframe>
        <p>Was it nice, huh?</p>
    </body>
</html>

请注意,以这种方式通过JSP发送二进制文件可能会因JSP生成的模板文本(空白,换行符)而破坏二进制内容。而是在Servlet类中进行。只需将所有代码移动到doGet()方法中,在web.xml中映射Servlet类并调用它而不是JSP。

<iframe src="reportServlet?filename=foo&reporttype=pdf"></iframe>