当前位置: 首页 > 知识库问答 >
问题:

导出自定义超文本标记语言模板

訾渝
2023-03-14

导出为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\u HEADER参数看起来很有希望,但这些类已被弃用。这就是解决方案:

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();

现在我必须使用网络。旧金山。jasperreports。出口HtmlExporter和net。旧金山。jasperreports。出口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

共有1个答案

袁鸿畴
2023-03-14

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内容,而不是硬编码字符串。

 类似资料:
  • 定义和使用自定义标记可以吗?(这不会与将来的html标记冲突)-通过更改outerHTML替换/呈现这些标记?? 我在下面创建了一个演示,看起来效果不错 问题的最新情况: 让我进一步解释一下。请假设浏览器上启用了JavaScript-也就是说,应用程序不应该在没有javascript的情况下运行。 我见过使用自定义属性在指定标记中定义自定义行为的库。例如,角度。js大量使用自定义属性。(它还有关于

  • 我正在想办法完全自动化詹金斯的硒测试。 我的全部想法是:我想用Selenium IDE记录一个测试。然后将测试另存为HTML代码。将HTML文件放在test1中。和詹金斯一起在服务器上测试。Jenkins应该根据HTML文件的信息进行测试。 最后一句话现在是问题所在。我找不到一种简单的方法将HTML文件转换成可能的JUnit测试并运行它。 我找到了selenese4j,这个想法很好,但它只返回测试

  • 布局/模板文件在中定义: 然后在中产生: 两个文件都存在于同一个目录中,并且web.php中定义了的路由: 然而,导航到时唯一显示的是未定义的“error”,我将它作为帮助程序的第二个参数传递给它。在浏览器中检查显示未加载该节。 由于模板继承在没有错误的情况下悄无声息地失败,而且因为Laravel显然甚至没有打印警告的直观方式,这样一个基本的用例对我来说似乎不可能调试。 这里发生了什么,或者,我将

  • 我正在Laravel中构建一个小型CMS,我试图显示内容(存储在数据库中)。它显示超文本标记语言标记,而不是执行它们。就像所有打印数据都有自动html_entity_decode。 我试着用大括号打印内容。 和三个卷曲的大括号。 它们给出了相同的结果。我需要执行那些HTML标记,而不是转义它们。

  • 我试图在HTML的pre标签中包装文本,但它不起作用。我使用下面的CSS作为我的标签。 我从如何在pre标记中换行文本? 我已添加

  • 我有使用ckeditor生成的html文本,在我的文本中有一些非html标记,它们没有被显示,因为它们被认为是html标记。 我想将所有非HTML标记替换为HTML实体。我用str_replace做了大多数标记,但现在我有大约100个不同的标记,像