Flying Saucer を使用して xhtml ページから PDF を生成しようとしています。私の関連コードは以下のとおりです。
pdf.xhtml 自体は正常に動作します。
ただし、CreatePDF バッキング Bean メソッドを使用して PDF を作成しようとすると、バッキング Bean の sirketadi プロパティの入力値ではなく、生成された PDF に EL 式 #{basvuruBean.sirketAdi} が含まれます。バッキング Bean はセッションスコープです。
コードの何が問題になっていますか?
よろしくお願いします。
バッキング Bean を使用して jsf ページから pdf を生成するための別のライブラリの推奨事項は?
生成された pdf のベースとなる xhtml ページ: pdf.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
</h:head>
<body>Sirket Adı: #{basvuruBean.sirketAdi}
</body>
</html>
basvuruBean バッキング Bean で PDF メソッドを作成する
public void createPDF() {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
String servername = externalContext.getRequestServerName();
String port = String.valueOf(externalContext.getRequestServerPort());
String appname = externalContext.getRequestContextPath();
String protocol = externalContext.getRequestScheme();
HttpSession session = (HttpSession) externalContext.getSession(true);
this.url = protocol + "://" + servername + ":" + port + appname + "/"+PDF_PAGE+";JSESSIONID=" + session.getId();
try {
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(new URL(this.url).toString());
renderer.layout();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
response.reset();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=\"" + PDF_FILE_NAME + "\"");
OutputStream browserStream = response.getOutputStream();
renderer.createPDF(browserStream);
} catch (Exception ex) {
Logger.getLogger(BasvuruBean.class.getName()).log(Level.SEVERE, null, ex);
}
facesContext.responseComplete();