【问题标题】:html parsing exceptions in iTextiText中的html解析异常
【发布时间】:2018-10-15 08:05:52
【问题描述】:

我在 primefaces 中有一个 p:editor,用户在其中粘贴具有一些电子邮件模板的 word 文档并将其保存在数据库中。

现在我需要将此内容转换为 pdf。但我从 DB 返回的是该 word 文档的 HTML 转换。

在使用 iText 解析此 HTML 内容时,由于如下所示的无效 xhtml,我遇到了很多错误

<span style="font-family: Arial, Verdana; font-size: 13.3333px;"><img src="9#credit_cards_logos#9"></span>

使用上面的 sn-p,我收到错误 invalid span 标签。预期结束 img 标签。当我删除 img 周围的 span 标签时,它工作正常。

现在这样的错误到处都是。而且不可能手动修复所有这些,因为它是一个巨大的模板(有 100 多个模板。)

这是我用来解析它的函数。

public StreamedContent getFile() throws IOException, DocumentException{
        final PortletResponse portletResponse = (PortletResponse) FacesContext.getCurrentInstance().getExternalContext()
                .getResponse();
        final HttpServletResponse res = PortalUtil.getHttpServletResponse(portletResponse);
        res.setContentType("application/pdf");
        res.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        res.setHeader("Content-Disposition", "attachment; filename=" + subject + ".pdf");
        res.setHeader("Refresh", "1");
        res.flushBuffer();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        OutputStream out = res.getOutputStream();
        Document document = new Document(PageSize.LETTER);
        PdfWriter pdfWriter =PdfWriter.getInstance(document, baos);
        document.open();
        document.addCreationDate();
        XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
        //htmlWorker.parse(new StringReader(getMessage()));
        worker.parseXHtml(pdfWriter, document, new StringReader(getMessage()));
        document.close();
        baos.writeTo(out);
        out.flush();
        out.close();
        return null;
    }

有解决办法吗?

编辑____________

primefaces 中是否有类似 p:dataExporter(only for datatables) 的东西,可以将内容转换为 pdf 而无需解析 HTML。

【问题讨论】:

  • 您正在使用带有 XMLWorker 的旧 iText 5。 XMLWorker 需要 100% 有效的 HTML,因此您需要在将 HTML 提供给 XMLWorker 之前清理它。您可以使用 JSoup 或 JTidy 之类的东西。替代方案是 iText 7 + pdfHTML,它可以更好地处理无效 HTML。
  • 同一个问题你问了两次:stackoverflow.com/questions/52809656/…
  • 非常感谢阿梅迪。我会检查一下。
  • 在我对您的问题stackoverflow.com/questions/52773998/… 的评论中,我已经建议切换到 iText 7 + pdfHTML。
  • 视情况而定。您自己的软件是否在 AGPL 许可下开源?那么您已经获得使用 iText 的许可。您的软件是否根据与 AGPL 不兼容的许可(例如商业许可)分发?然后你需要购买 iText 的商业许可。

标签: primefaces itext


【解决方案1】:

答案

primefaces 中是否有类似 p:dataExporter(仅适用于数据表)的东西,它可以将内容转换为 pdf 而无需解析 HTML。

是:不,没有

【讨论】:

    【解决方案2】:

    这对我有用:html2pdfrocket

    https://www.html2pdfrocket.com/convert-java-html-to-pdf

    他们有可用的免费套餐。

    【讨论】:

      猜你喜欢
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2017-10-30
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 2016-10-12
      相关资源
      最近更新 更多