以HTML格式导出JasperReports [英] Export JasperReports in HTML format
本文介绍了以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屋!
查看全文