Primefaces iText中的html解析异常
我在primefaces中有一个p:editor,用户在其中粘贴word文档,其中包含一些电子邮件模板,并将其保存在DB中 现在我需要将此内容转换为pdf。但我从DB中得到的是该word文档的HTML转换 在用iText解析这个HTML内容时,我遇到了很多错误,原因是xhtml无效,如下所示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
<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;
}