0

私は初めてiText+フライングソーサーを使用し、JSF 2.0を使用したxhtmlページで、firstName、lastName、phone numberなどの通常の入力フィールドを使用した簡単な登録フォームを使用しています。ユーザーがすべてのデータを入力し、[へ]ボタンをクリックすると、ユーザーデータを含むこの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は、[次へ]ボタンをクリックしてユーザーデータを含むページを取得してPDFに変換しますか、それとも間違ったコードを試していますか。助けてください。例をいただければ幸いです。

4

2 に答える 2

1

この例外は、Webサイトの(x)htmlの問題のように聞こえます。<!-- some -- comments -->あなたのhtmlに何かのようなものはありますか?

--コメントブロックのどこかにあるため、FlyingSaucerはこの例外をスローします。これを確認し、可能であればとの間なしで試して--ください。<!---->

ただし、FSは(X)HTML / XMLの小さな間違いごとに失敗するため(readmeに記載されているように)、Webサイトを処理する前にHTMLクリーナーを使用することをお勧めします。

次に2つの例を示します。

于 2012-10-15T06:06:31.133 に答える
0

HTMLを部分的に制御でき、特定の項目をエスケープするだけでよい場合に実行できるもう1つの方法は、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 に答える