ここで少し問題があります。基本的な前提は、ボタンを押してHTMLを生成し、PDFを作成し、ダウンロードのために出力ストリームにスローする必要があるということです。
<ice:commandButton title="Download"
image="/images/dl.png"
value="Download"
action="#{bean.downloadPDF}">
</ice:commandButton>
public void downloadPDF() throws IOException {
PD4ML pdf = new PD4ML();
pdf.setPageSize(PD4Constants.LETTER);
pdf.setPageInsets(new Insets(0, 0, 0, 0));
pdf.setHtmlWidth(1000);
pdf.enableImgSplit(false);
pdf.generateOutlines(false);
File pdfFile = new File("tmp.pdf");
FileOutputStream fos = new FileOutputStream(pdfFile);
StringReader sr = new StringReader("<p>Testing Download</p>");
pdf.render(sr, fos);
FacesContext facesContext = FacesContext.getCurrentInstance();
PortletResponse portletResponse= (PortletResponse)facesContext.getExternalContext().getResponse();
ResourceResponse portletResourceResponse = (ResourceResponse) portletResponse;
portletResourceResponse.setContentType("application/pdf");
OutputStream out = portletResourceResponse.getPortletOutputStream();
out.flush();
facesContext.responseComplete();
}
私が抱えている問題は、現在のコンテキストと:pdf.render()
への変換に基づいて応答を生成しようとした後です。ResourceResponse
java.lang.ClassCastException: com.liferay.portlet.RenderResponseImpl cannot be cast to javax.portlet.ResourceResponse
そのファイルを取得してLiferay/ポートレットに出力する適切な方法は何ですか?