2012-10-15 5 views
0

firstName, lastName, 전화 번호와 같은 일반 입력 필드가있는 간단한 등록 양식의 경우 JSF 2.0을 사용하는 xhtml 페이지에서 iText + flying saucer를 처음 사용하고 있습니다. 사용자가 모든 데이터를 입력하고 "NEXT"버튼을 클릭하면 사용자 데이터가있는이 XHTML 페이지를 pdf로 변환해야합니다.이 페이지의 소스 HTML을 페이지에 포함 된 모든 스타일로 정확하게 가져올 수 있습니까? pdf로 변환하십시오. 현재 나는 이와 같이 묶고 있습니다.동적으로 HTML을 사용하여 xhtml 페이지에서 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은 NEXT 버튼의 클릭에 사용자 데이터 내 페이지를 얻을 수 및 PDF를 변환하거나 내가 도와 잘못 code.Please으로 노력하고 URL.Does 이상 사용하여 내 페이지를 얻을 수있는 올바른 방법입니다. 예가 감사합니다.

답변

1

이 예외는 웹 사이트의 (x) html에있는 문제와 유사합니다. html로 <!-- some -- comments -->과 같은 것이 있습니까?

Flying Saucer는 댓글 블록 어딘가에 --이 (가) 있으므로이 예외가 발생합니다. 이것을 확인하고 가능한 경우 --없이 <!----> 사이에 시도해보십시오.

그러나 (X) HTML/XML (readme에 명시된 바와 같이)에서 약간의 실수가있을 때마다 FS가 실패하므로 웹 사이트를 처리하기 전에 HTML 클리너를 사용하는 것이 좋습니다.

+0

위와 같은 URL을 사용하면 빠른 답변을 주셔서 감사합니다.하지만 사용자 데이터가 포함 된 XHTML 페이지를 받게 되나요? PDF로 입력되는 HTMl 문서를 어떻게 인쇄 할 수 있습니까? 내 접근법이 정확하다고 생각하니? – mdp

+0

여기 혼란 스럽네요. 위에서 언급 한 API 두 개가 flyingSaucer의 대안이거나 iText + FS와 함께 사용해야합니까? 그렇다면 Jsoup를 통합하는 방법에 대한 정보를 제공해 주시겠습니까?/iText + FS가있는 HTMLCleaner – mdp

+0

나는 FS : ** HTML ** -> ** JSoup 또는 HtmlCleaner ** -> ** FlyingSaucer ** -> ** PDF **와 함께 사용합니다. Jsoup 또는 HtmlCleaner는 입력 HTML에서 많은 실수를 수정합니다. 그렇지 않으면 FS를 죽일 것입니다. 둘 다 HTML 엔티티를 벗어날 수 있습니다. 아마도 주석에서''--''로 문제를 해결할 수 있습니다. – ollo

0

당신이 HTML을 통해 어떤 부분 제어 할 수 및 특정 항목을 탈출해야 할 경우 당신이 할 수있는 다른 것은 다음과 같습니다

는 다음 두 가지 예 java.net article에서 바람직하지 않은 요소를 바꿔 교체하는 예 ContentCaptureServletResponse :

public String getContent(){ 
    writer.flush(); 
    String xhtmlContent = new String(contentBuffer.toByteArray()); 
    xhtmlContent = xhtmlContent.replaceAll("<thead>|</thead>",""); 
    return xhtmlContent; 
}