以HTML格式导出JasperReports [英] Export JasperReports in HTML format

查看:100
本文介绍了以HTML格式导出JasperReports的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下代码获得 byte [] 结果,适用于PDF和XLSX。对于HTML,会引发异常。

  JasperPrint jasperPrint = JasperFillManager.fillReport(report,
params,dataSource!= null?new JRMapArrayDataSource(
dataSource):new JREmptyDataSource());

ByteArrayOutputStream out = new ByteArrayOutputStream();
@SuppressWarnings(rawtypes)
出口商出口商;
开关(格式){
案例PDF:
exporter = new JRPdfExporter();
休息;
case XLSX:
exporter = new JRXlsxExporter();
休息;
case HTML:
exporter = new HtmlExporter();
休息;
默认值:
抛出新的ReportException(未知的导出格式);
}
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.exportReport();
返回out.toByteArray();

HTML的例外是 exporter.exportReport(); 行表示

  java.lang.ClassCastException:

net.sf.jasperreports .export.SimpleOutputStreamExporterOutput无法转换为net.sf.jasperreports.export.HtmlExporterOutput
at net.sf.jasperreports.engine.export.HtmlExporter.exportReport(HtmlExporter.java:232)

v6.0和v5.6的错误相同。这曾经在v5.0中工作(某些类在v5.6中已弃用)。



如何以各种格式导出报告,包括HTML?<对于HTML和其他格式:

  import net.sf.jasperreports.engine.JRDataSource; 
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.HtmlExporter;
import net.sf.jasperreports.engine.export.JRCsvExporter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRXmlExporter;
import net.sf.jasperreports.export.Exporter;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleHtmlExporterOutput;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;

public byte [] export(最终JasperPrint print)抛出JRException {
final Exporter exporter;
final ByteArrayOutputStream out = new ByteArrayOutputStream();
boolean html = false;

switch(getReportFormat()){
case HTML:
exporter = new HtmlExporter();
exporter.setExporterOutput(new SimpleHtmlExporterOutput(out));
html = true;
休息;

case CSV:
exporter = new JRCsvExporter();
休息;

case XML:
exporter = new JRXmlExporter();
休息;

案例XLSX:
exporter = new JRXlsxExporter();
休息;

案例PDF:
exporter = new JRPdfExporter();
休息;

默认值:
抛出新的JRException(未知报告格式:+ getReportFormat()。toString());
}

if(!html){
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));
}

exporter.setExporterInput(new SimpleExporterInput(print));
exporter.exportReport();

返回out.toByteArray();
}

使用以下方式调用:

  JasperPrint print = JasperFillManager.fillReport(report,parameters,dataSource); 
byte report [] = export(print);


The code below gets a byte[] result, which works for PDF and XLSX. For HTML, an exception is raised.

    JasperPrint jasperPrint = JasperFillManager.fillReport(report,
            params, dataSource != null ? new JRMapArrayDataSource(
                    dataSource) : new JREmptyDataSource());

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    @SuppressWarnings("rawtypes")
    Exporter exporter;
    switch (format) {
    case PDF:
        exporter = new JRPdfExporter();
        break;
    case XLSX:
        exporter = new JRXlsxExporter();
        break;
    case HTML:
        exporter = new HtmlExporter();
        break;
    default:
        throw new ReportException("Unknown export format");
    }
    exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));
    exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
    exporter.exportReport();
    return out.toByteArray();

The exception for HTML is at exporter.exportReport(); line which says

java.lang.ClassCastException: 

net.sf.jasperreports.export.SimpleOutputStreamExporterOutput cannot be cast to net.sf.jasperreports.export.HtmlExporterOutput
at net.sf.jasperreports.engine.export.HtmlExporter.exportReport(HtmlExporter.java:232)

The error is the same for v6.0 and v5.6. This used to work in v5.0 (some of the classes were deprecated in v5.6).

How do you export a report in various formats, including HTML?

解决方案

For HTML and other formats:

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.HtmlExporter;
import net.sf.jasperreports.engine.export.JRCsvExporter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRXmlExporter;
import net.sf.jasperreports.export.Exporter;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleHtmlExporterOutput;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;

public byte[] export(final JasperPrint print) throws JRException {
    final Exporter exporter;
    final ByteArrayOutputStream out = new ByteArrayOutputStream();
    boolean html = false;

    switch (getReportFormat()) {
        case HTML:
            exporter = new HtmlExporter();
            exporter.setExporterOutput(new SimpleHtmlExporterOutput(out));
            html = true;
            break;

        case CSV:
            exporter = new JRCsvExporter();
            break;

        case XML:
            exporter = new JRXmlExporter();
            break;

        case XLSX:
            exporter = new JRXlsxExporter();
            break;

        case PDF:
            exporter = new JRPdfExporter();
            break;

        default:
            throw new JRException("Unknown report format: " + getReportFormat().toString());
    }

    if (!html) {
        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(out));
    }

    exporter.setExporterInput(new SimpleExporterInput(print));
    exporter.exportReport();

    return out.toByteArray();
}

Call it using:

JasperPrint print = JasperFillManager.fillReport(report, parameters, dataSource);
byte report[] = export(print);

这篇关于以HTML格式导出JasperReports的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆