我首次使用iText +飞碟使用JSF 2.0使用xhtml页面进行简单的注册表格,使用常规输入字段,如firstName,lastName,电话号码等。一旦用户输入所有数据并点击“ NEXT “按钮我必须将这个带有用户数据的XHTML页面转换成pdf.How我可以准确地获取该页面的源HTML,其中包含页面中包含的所有样式并将其转换为pdf.Currently我就像此
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获取我的页面的正确方法。当点击NEXT按钮时,该URL获取我的页面用户数据并将其转换为pdf或我尝试使用错误的代码。请帮助我。举例赞赏。
答案 0 :(得分:1)
此异常听起来更像是您网站的(x)html中的问题。你的HTML中有<!-- some -- comments -->
之类的内容吗?
Flying Saucer抛出此异常,因为注释块中某处有--
。检查一下,如果可能的话,在--
和<!--
之间不用-->
进行试用。
但是,由于FS会在(X)HTML / XML中的每一个小错误中失败(如自述文件中所述),因此在处理网站之前使用HTML Cleaner通常是一个好主意。
以下是两个例子:
答案 1 :(得分:0)
如果您对HTML有部分控制并且只需要转义某些项目,那么您可以执行的另一件事是遵循java.net article中的示例,通过在ContentCaptureServletResponse
中替换它们来替换不需要的元素:
public String getContent(){
writer.flush();
String xhtmlContent = new String(contentBuffer.toByteArray());
xhtmlContent = xhtmlContent.replaceAll("<thead>|</thead>","");
return xhtmlContent;
}