#html #jasper-reports #export
#HTML #jasper-отчеты #экспорт
Вопрос:
Справочная информация
Экспорт в HTML генерирует следующее:
<html>
<head>
<title></title>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<style type="text/css">
a {text-decoration: none}
</style>
</head>
<body vlink="#000000" text="#000000" link="#000000" alink="#000000">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="50%">amp;nbsp;</td>
<td align="center">
<!-- The report -->
</td>
<td width="50%">amp;nbsp;</td>
</tr>
</tbody>
</table>
</body>
</html>
Проблема
Отчет располагается по центру страницы, но должен быть выровнен по левому краю.
Прежнее решение
Использование параметра HTML_HEADER от JRHtmlExporter выглядело многообещающе, но классы были устаревшими. Это было решением:
JRHtmlExporter exporter = new JRHtmlExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER,
"<html>"
"<head>"
" <title></title>"
" <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>"
" <link rel="stylesheet" type="text/css" href="css/jasper.css" />"
" <style type="text/css">"
" a {text-decoration: none}"
" </style>"
"</head>"
"<body text="#000000" link="#000000" alink="#000000" vlink="#000000">"
"<table width="100%" cellpadding="0" cellspacing="0" border="0">"
"<tr><td width="50%">amp;nbsp;</td><td align="center">");
exporter.exportReport();
Теперь я должен использовать классы net.sf.jasperreports.export.HtmlExporter
и net.sf.jasperreports.export.SimpleHtmlReportConfiguration
таким образом:
HtmlExporter exporterHTML = new HtmlExporter();
SimpleExporterInput exporterInput = new SimpleExporterInput(report.getJasperPrint());
exporterHTML.setExporterInput(exporterInput);
HtmlExporterOutput exporterOutput = new SimpleHtmlExporterOutput(out);
exporterHTML.setExporterOutput(exporterOutput );
SimpleHtmlReportConfiguration reportExportConfiguration = new SimpleHtmlReportConfiguration();
reportExportConfiguration.setWhitePageBackground(false);
reportExportConfiguration.setRemoveEmptySpaceBetweenRows(true);
exporterHTML.setConfiguration(reportExportConfiguration);
exporterHTML.exportReport();
Как бы вы это исправили?
Окружающая среда
- JasperReports v5.5.2
- Java v1.6.0_38
Ответ №1:
HTML_HEADER
Параметр JRHtmlExporterParameter был заменен на:
Например:
public byte[] exportHtml(final JasperPrint print) {
final Exporter exporter = new HtmlExporter();
final ByteArrayOutputStream out = new ByteArrayOutputStream();
exporter.setConfiguration(createHtmlConfiguration());
exporter.setExporterOutput(new SimpleHtmlExporterOutput(out));
exporter.setExporterInput(new SimpleExporterInput(print));
exporter.exportReport();
return out.toByteArray();
}
private HtmlExporterConfiguration createHtmlConfiguration()
throws IOException {
SimpleHtmlExporterConfiguration shec
= new SimpleHtmlExporterConfiguration();
shec.setHtmlHeader(getHtmlHeader());
shec.setHtmlFooter(getHtmlFooter());
return shec;
}
private String getHtmlHeader() {
StringBuffer sb = new StringBuffer();
sb.append("<html>");
sb.append("<head>");
sb.append(" <title></title>");
sb.append(" <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>");
sb.append(" <style type="text/css">");
sb.append(" a {text-decoration: none}");
sb.append(" </style>");
sb.append("</head>");
sb.append("<body text="#000000" link="#000000" alink="#000000" vlink="#000000">");
sb.append("<table width="100%" cellpadding="0" cellspacing="0" border="0">");
sb.append("<tr><td align="left">");
return sb.toString();
}
private String getHtmlFooter() {
// Close the opening tags from getHtmlHeader()...
}
Еще лучше было бы использовать внешние ресурсы (такие как база данных, файл или веб-страница) для содержимого HTML, а не жестко закодированные строки.