JasperReports与servlet结合后图片无法显示

发布于 2021-11-25 20:10:44 字数 4486 浏览 838 评论 2

代码如下:

package com.xbstar.application.patrol.reportServlet;

import java.io.IOException;
import java.io.PrintWriter;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.jdbc.ConnectionFactory;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;

public class firstServlet extends HttpServlet {

 
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("utf-8");
  // 接收查询参数,将来这个参数就是我们在报表中定义的parDname
  String STAT_MONTH = request.getParameter("STAT_MONTH");
  String LU_XIAN_BIAO_SHI = request.getParameter("LU_XIAN_BIAO_SHI");
        System.out.println("LU_XIAN_BIAO_SHI:"+LU_XIAN_BIAO_SHI);
       
  
  // 报表文件路径,我们用ireport做的jasper文件路径
  // JasperReport需要jasper文件的真实路径
  String reportPath = request.getSession().getServletContext()
    .getRealPath("ireport/report11.jasper");
  // 报表参数,jasper文件可能不只一个参数
        // 在程序里,用一个Map对象,向jasper文件传递他需要的参数
  Map reportParameters = new HashMap();
  reportParameters.put("STAT_MONTH", STAT_MONTH);
  reportParameters.put("LU_XIAN_BIAO_SHI", LU_XIAN_BIAO_SHI);
  // 报表连数据库所用的数据连接
  Connection con = null;
  // 清空响应流
  response.reset();
  
  try {
   con = ConnectionFactory.getConnection("localoracle");
  } catch (GenericEntityException e) {
   e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
  }
 
  //being
  try {
   JasperPrint   jasperPrint   =   JasperFillManager.fillReport(reportPath, reportParameters, con);
   request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,   jasperPrint);
  } catch (JRException e1) {
   e1.printStackTrace();
  }
     JRHtmlExporter   exporter   =   new   JRHtmlExporter();
  exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "/servlets/image?image=");
  //end
  
  
  // 设置输出格式
  response.setContentType("application/html");
  
  // JasperReport提供的类,用于生成一个HTML文件
  try {
   JasperRunManager.runReportToHtmlFile(reportPath, reportParameters, con);
  } catch (JRException e) {
   e.printStackTrace();
  }
 
  try {
   con.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  
 
   response.sendRedirect(request.getContextPath()+ "/ireport/report11.html");
 
 }
 
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
            doGet(request, response);
     
 }

 

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

离不开的别离 2021-11-28 20:44:31

建议用用看FineReport,这款软件基本不存在你说的问题

官方网址:http://www.finereport.com/

下载地址:http://www.finereport.com/products/trial

别再吹冷风 2021-11-28 19:56:35

如果生成的报表时html的话,那么jasperreport在该html同等目录创建一个文件夹,该文件夹包含一个px文件,有时候这个文件创建会有问题,所以手动创建一个px文件就开源解决html页面中图片不显示的问题。

顺便说一句,最好不要直接把 connection传给JasperReport,而是传一个JRDataSource,把一个集合作为JRDataSource的构造器参数创建给它,负责的报表不能让jasperreport链表什么的查询,而且这样也会用不到缓存的,如果有。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文