0

我第一次使用 iText+flying saucer 与使用 JSF 2.0 的 xhtml 页面进行简单的注册表单,其中包含常规输入字段,如名字、姓氏、电话号码等。一旦用户输入所有数据并单击“下一步”按钮,我必须将此带有用户数据的 XHTML 页面转换为 pdf。如何准确获取该页面的源 HTML 以及页面中包含的所有样式并将其转换为 pdf。目前我正在这样绑定。

public void createPDF() {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();
    HttpSession session = (HttpSession) externalContext.getSession(true);
    String url = "http://localhost:8080/MyPROJECT/faces/page1.xhtml;JSESSIONID=" + session.getId();
    try {
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(url);
    renderer.layout();
    HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
    response.reset();
    response.setContentType("application/pdf");
    response.setHeader("Content-Disposition","C://user//first.pdf");
    OutputStream browserStream = response.getOutputStream();
    renderer.createPDF(browserStream);
    browserStream.close();
    session.invalidate();
    } catch (Exception ex) {
       ex.printStackTrace();
    }
    facesContext.responseComplete();
}

但它给我抛出了这个例外。

ERROR:  'The string "--" is not permitted within comments.'
org.xhtmlrenderer.util.XRRuntimeException: Can't load the XML resource (using TRaX transformer). org.xml.sax.SAXParseException: The string "--" is not permitted within comments.

这是使用上面的 URL 获取我的页面的正确方法吗?该 URL 是否在单击 NEXT 按钮时获取我的页面与用户数据并将其转换为 pdf 或者我是否尝试使用错误的代码。请帮助我。例子赞赏。

4

2 回答 2

1

这种异常听起来更像是您网站的 (x)html 中的问题。<!-- some -- comments -->你的html中有类似的东西吗?

Flying Saucer 会抛出这个异常,因为--注释块中有一个地方。检查一下,如果可能的话,试试不带--between <!--and -->

然而,由于 FS 在 (X)HTML / XML 中的每一个小错误都会失败(如自述文件中所述),因此在处理网站之前使用 HTML Cleaner 通常是个好主意。

这里有两个例子:

于 2012-10-15T06:06:31.133 回答
0

如果您对 HTML 有部分控制权并且只需要转义某些项目,您可以做的另一件事是按照java.net 文章中的示例通过替换它们来交换不需要的元素ContentCaptureServletResponse

public String getContent(){
    writer.flush();
    String xhtmlContent = new String(contentBuffer.toByteArray());
    xhtmlContent = xhtmlContent.replaceAll("<thead>|</thead>","");
    return xhtmlContent; 
}
于 2013-01-18T15:51:50.693 回答