Вопрос заключается в том, как экспортировать отчет, составленный jasperreport и скомпилированный на странице jsp, экспортированный также в определенный раздел страницы jsp - PullRequest
0 голосов
/ 10 октября 2010

когда я компилирую файл jrxml, созданный с помощью ireport, и экспортирую его, как экспортировать эту страницу в определенный раздел страницы jsp, я много искал в google, я не получаю никаких решений, связанных с моими требованиями

если я что-то пишу на странице 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 Ответ

2 голосов
/ 10 октября 2010

Создайте другой 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. Скорее делайте это в классе сервлетов. Это всего лишь вопрос перемещения всего кода в метод doGet(), сопоставления класса Servlet в web.xml и вызова его вместо JSP.

<iframe src="reportServlet?filename=foo&reporttype=pdf"></iframe>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...