【问题标题】:Export custom HTML template导出自定义 HTML 模板
【发布时间】:2014-07-07 14:26:59
【问题描述】:

背景

导出到 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%">&nbsp;</td>
                    <td align="center">
                        <!-- The report -->
                    </td>
                    <td width="50%">&nbsp;</td>
                </tr>
            </tbody>
        </table>
    </body>
</html>

问题

报告在页面上居中,但应该是左对齐的。

以前的解决方案

使用 JRHtmlExporter 的 HTML_HEADER 参数看起来很有希望,但类已经是deprecated。这是解决方案:

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%">&nbsp;</td><td align="center">");
exporter.exportReport();

现在我必须以这种方式使用net.sf.jasperreports.export.HtmlExporternet.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

【问题讨论】:

    标签: html jasper-reports export


    【解决方案1】:

    JRHtmlExporterParameter 的HTML_HEADER 参数被替换为:

    HtmlExporterConfiguration.getHtmlHeader()

    例如:

    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 内容使用外部资源(例如数据库、文件或网页)而不是硬编码字符串会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      相关资源
      最近更新 更多