【问题标题】:RuntimeWorkerException: Invalid nested tag head found, expected closing tag metaRuntimeWorkerException:找到无效的嵌套标记头,预期结束标记元
【发布时间】:2014-10-18 22:14:01
【问题描述】:

我正在使用 iText 将 html 转换为 pdf,但我不断收到在 parseXHtml 处引发的 RuntimeWorkerException。这是我的代码:

Document tempDoc = new Document();
PdfWriter pdfWriter = PdfWriter.getInstance(tempDoc, out);
tempDoc.open();
XMLWorkerHelper.getInstance().parseXHtml(pdfWriter, tempDoc, new ByteArrayInputStream(html.getBytes()));
tempDoc.close();

我对 HTML 和 XHTML 之间的区别不太熟悉,所以对于如何处理这个问题我有点茫然。 Here's the html source if it helps.

【问题讨论】:

  • 这听起来像一个 iText 问题......要么是因为没有处理新的 html 标签,要么只是一个错误。不幸的是,可能没有办法解决它,但也许可以向管理 iText 的人报告?
  • 错误信息很清楚,你在标题中有一个<meta> 标记没有关闭,它在HTML 中有效,但在XHTML 中无效,这就是你将其解析为.你需要关闭那些,<meta ... />

标签: java html pdf itext html-to-pdf


【解决方案1】:

错误消息非常清楚,您在标头中有一个<meta> 标记未关闭,它在HTML 中有效,但在XHTML 中无效,您正在解析它。你需要关闭那些,<meta ... />

【讨论】:

  • 我最终使用 JTidy 转换为 xhtml,效果很好。
【解决方案2】:

如果您使用 XMLWorkerHelper,请确保您正确结束图像、断点标记,如 />。

【讨论】:

    【解决方案3】:

    对于类似的错误信息 -

    invalid nested tag body found, expected closing tag meta

    原来我正在解析的 XHTML 在底部有一个 <script> 部分,其中包含 JS 代码,类似于:

    <script>
      function my_func(var) {
        ...
      }     
    </script>
    

    删除该代码后(通过简单的字符串操作),我能够让.parseXHtml 正常工作。

    【讨论】:

      【解决方案4】:

      你必须关闭每一个标签。 示例 - 在 HTML 中

      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      

      有效。

      但在 xhtml 中你必须使用

      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
      

      因此关闭 html 中的每个标签(例如 meta 标签、col 标签、img 标签等)。

      【讨论】:

      • 您也可以使用 Chris 在他的回答中提出的&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&gt;
      【解决方案5】:

      记得关闭所有元标记

      <meta ... />
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      相关资源
      最近更新 更多