发新话题
移动帖子 加入精华 加入置顶 加入收藏 关注此帖

jasper 输出报表的方法



jasper 输出报表的方法

不推荐用jsp, 用servlet 比较好,我这里有流程性的,你自己看着用吧
public class ReportType {

  public static int HTML = 1;

  public static int EXCEL = 2;

  public static final int PDF = 3;

  public static void export(HttpServletResponse response, JasperPrint jp, int type, String filename) throws Exception {
    JRExporter exporter = null;
    if (type == HTML) {
      exporter = new JRHtmlExporter();
      exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, false);
      exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "");
      // exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
    } else if (type == EXCEL) {
      exporter = new JRXlsExporter();
      response.setContentType("application/vnd.ms-excel");
      response.addHeader("Content-Disposition", new String(("attachment; filename=" + filename + ".xls").getBytes("GBK"), "ISO-8859-1"));
      exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
      // exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
    } else if (type == PDF) {
      exporter = new JRPdfExporter();
      response.setContentType("application/pdf");
      response.addHeader("Content-Disposition", new String(("attachment; filename=" + filename + ".pdf").getBytes("GBK"), "ISO-8859-1"));
    } else {
      return;
    }
    exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GBK");
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
    exporter.exportReport();
  }
}
使用方法
String jasper = "jasper/saler/salerMonthSummary.jasper"; // 你的jasper文件地址
String filename = "营销中心业务员" + from + "-" + to + "销售汇总"; // 对于excel等需要下载的文件名

// 各种参数设置好
Map map = new HashMap();
map.put("YearFrom", from.getYear());
map.put("MonthFrom", from.getMonth());
map.put("YearTo", to.getYear());
map.put("MonthTo", to.getMonth());


// 读取jasper
JasperReport jr = (JasperReport) JRLoader.loadObjectFromLocation(jasper);

// 填充数据
JasperPrint jp = JasperFillManager.fillReport(jr, map, null);

// 判断是否正常
List<JRPrintPage> pages = jp.getPages();
if (pages.size() == 0) {
  // 没有数据
  return;
}

ReportType.export(response, jp, ReportType.EXCEL, filename);
JAVA世纪网
愿意为喜欢JAVA的朋友提供一点帮助
编辑 回复 快速回复 TOP

续一下WORD

WORD格式也是经常要用到的
if (type == WORD) {
exporter = new JRXlsExporter();
response.setContentType("application/msword");
response.addHeader("Content-Disposition", new String(("attachment; filename=" + filename + ".doc").getBytes("GBK"), "ISO-8859-1"));
java技术空间:hi.baidu.com/xhz12345 
编辑 回复 快速回复 TOP

Re:jasper 输出报表的方法

大哥帮我看下我的代码,,用java application运行可以生成PDF文档, 但是用JSP和SERVLET就会出现下面问题:
javax.servlet.ServletException: Servlet 运行时发生异常
起 因
java.lang.InternalError: java.io.IOException: Stream closed
java.text.BreakIterator.createBreakInstance(BreakIterator.java:551)
java.text.BreakIterator.getBreakInstance(BreakIterator.java:496)
java.text.BreakIterator.getLineInstance(BreakIterator.java:423)
java.text.BreakIterator.getLineInstance(BreakIterator.java:410)
java.awt.font.LineBreakMeasurer.<init>(LineBreakMeasurer.java:259)
net.sf.jasperreports.engine.fill.TextMeasurer.renderParagraph(TextMeasurer.java:330)
net.sf.jasperreports.engine.fill.TextMeasurer.measure(TextMeasurer.java:291)
net.sf.jasperreports.engine.fill.JRFillTextElement.chopTextElement(JRFillTextElement.java:949)
net.sf.jasperreports.engine.fill.JRFillTextField.prepare(JRFillTextField.java:545)
net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:344)
net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:346)
net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:305)
net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:1382)
net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:692)
net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:255)
net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:113)
net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:891)
net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:814)
net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89)
net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601)
net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:582)
net.sf.jasperreports.engine.JasperRunManager.runReportToPdfStream(JasperRunManager.java:368)
net.ensode.jasperbook.FirstReportSendToBrowserServlet.doGet(FirstReportSendToBrowserServlet.java:31)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

代码是这样的:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
ServletOutputStream servletOutputStream = response.getOutputStream();
InputStream reportStream = getServletConfig().getServletContext()
.getResourceAsStream("/simple.jasper");
servletOutputStream.println("");
try
{
JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream,
new HashMap(), new JREmptyDataSource());

response.setContentType("application/pdf");
servletOutputStream.flush();
servletOutputStream.close();
}
catch (JRException e)
{
// display stack trace in the browser
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e.printStackTrace(printWriter);
response.setContentType("text/plain");
response.getOutputStream().print(stringWriter.toString());
}
}

帮我看看, 谢谢了,呵呵,
编辑 回复 快速回复 TOP
发新话题