【问题标题】:send jasperreport as HTML以 HTML 格式发送 jasperreport
【发布时间】:2013-03-14 09:13:51
【问题描述】:

我正在使用JapserReports 以 Java 显示报告。我可以将PDF 格式的报告发送到网络浏览器。

现在我想以HTML 格式发送报告,以下是我以HTML 格式发送报告的方法。

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    File reportFile = new File(getServletConfig().getServletContext().getRealPath("/rpts/report1.jasper"));
    ServletOutputStream servletOutputStream = response.getOutputStream();
    byte[] bytes = null;
    Map<String,Object> parameter = new HashMap<String,Object>();
    Connection con = DBConnection.getConnection("");
    try
    {
        bytes = JasperRunManager.runReportToHtmlFile(reportFile.getPath(),parameter,con).getBytes();
        response.setContentType("text/html");
        response.setContentLength(bytes.length);
        servletOutputStream.write(bytes, 0, bytes.length);
        servletOutputStream.flush();
        servletOutputStream.close();
    }
    catch (JRException e)
    {
        System.out.println(e);
    }
}

上述方法是打印生成的HTML 文件的path。当我检查路径时,HTML 文件在那里生成了数据。

那么我在代码中遗漏了什么吗?

提前谢谢....

【问题讨论】:

  • @DownVoter down voting 的原因将不胜感激
  • 有什么问题? “当我检查路径时,在那里生成了带有数据的 HTML 文件。”。所以,读取文件发送到浏览器。

标签: java jsp servlets jasper-reports


【解决方案1】:

尝试设置 Content-Disposition 和 html 文件名。

    response.setHeader("Content-Disposition","inline, filename=myReport.html");
    response.setContentType("text/html");
    response.setContentLength(bytes.length);
    servletOutputStream.write(bytes, 0, bytes.length);
    servletOutputStream.flush();
    servletOutputStream.close();

runReportToHtmlFile 方法返回绝对文件路径。在写入输出流之前,需要将生成的 html 文件读入字节数组。

下面的代码可能对你有用。

        String reportPath =JasperRunManager.runReportToHtmlFile(reportFile.getPath(), parameter);
        File reportHtmlFile = new File(reportPath);
        FileInputStream fis = new FileInputStream(reportHtmlFile);
        byte[] bytes =  new byte[(int)reportHtmlFile.length()];
        fis.read(bytes);
        resp.setHeader("Content-Disposition","inline; filename=myReport.html");
        resp.setContentType("text/html");
        resp.setContentLength(bytes.length);
        servletOutputStream.write(bytes, 0, bytes.length);
        servletOutputStream.flush();
        servletOutputStream.close();

【讨论】:

  • 它仍然没有在浏览器中显示 HTML 文件,它只显示文件名,但仍然感谢您的回答(和 +1),我们必须在 @ 之后提供 ; 而不是 , 987654325@
  • @Bhushan runReportToHtmlFile 方法返回绝对文件路径。在写入输出流之前,需要将生成的 html 文件读入字节数组。
【解决方案2】:

试试这个

public class ReportExample {



/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

ArrayList<City> cityList=new ArrayList<City>();

City city=new City();

city.setCityName("Kolkata");

city.setCountry("Country");

cityList.add(city);

InputStream inputStream;

try {

inputStream = new FileInputStream ("report1.jrxml");

DataBeanMaker dataBeanMaker = new DataBeanMaker();

JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(cityList);

Map parameters = new HashMap();



JasperDesign jasperDesign = JRXmlLoader.load(inputStream);

JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, beanColDataSource);

JasperExportManager.exportReportToPdfFile(jasperPrint, "testjasper.pdf"); 

   JasperViewer.viewReport(jasperPrint);

   JasperPrintManager.printReport(jasperPrint, true);

}catch(Exception e)

{e.printStackTrace();

}

}



}

 check the link http://javadispute.com/content/jasper-report-example

【讨论】:

  • 感谢您的回答,但这个例子与how to send JapserReport as HTML 无关,反正我用另一种方式找到了解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多