Primefaces iText中的html解析异常

Primefaces iText中的html解析异常,primefaces,itext,Primefaces,Itext,我在primefaces中有一个p:editor,用户在其中粘贴word文档,其中包含一些电子邮件模板,并将其保存在DB中 现在我需要将此内容转换为pdf。但我从DB中得到的是该word文档的HTML转换 在用iText解析这个HTML内容时,我遇到了很多错误,原因是xhtml无效,如下所示 <span style="font-family: Arial, Verdana; font-size: 13.3333px;"><img src="9#credit_cards_logo

我在primefaces中有一个p:editor,用户在其中粘贴word文档,其中包含一些电子邮件模板,并将其保存在DB中

现在我需要将此内容转换为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>
有解决办法吗

编辑____________

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

的答案

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


是:不,没有

这对我有用:html2pdfrocket


他们有一个可用的免费层。

您正在将ye olde iText 5与XMLWorker一起使用。XMLWorker要求100%有效的HTML,所以在将HTML提交给XMLWorker之前,您需要清理HTML。您可以使用JSoup或JTidy之类的东西。另一种选择是iText 7+pdfHTML,它可以更好地处理无效HTML。我会查一查。在我对你的问题的评论中,我已经建议切换到iText 7+pdfHTML。这要看情况而定。您自己的软件在AGPL许可下是开源的吗?那么您已经获得了使用iText的许可。您的软件是否在与AGPL不兼容的许可证下分发(例如商业许可证)?然后您需要购买iText的商业许可证。
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;
    }