Crie um arquivo PDF na memória

Como criar um arquivo PDF usando o iText na memória e, em seguida, mostrar em um objeto as primefaces da caixa de diálogo, o usuário pode fazer o download do relatório, se desejado. Este é o meu código:

private StreamedContent file;

public StreamedContent getFile() {
    return file;
}

public void setFile(StreamedContent file) {
    this.file = file;
}



public void memoryReport() throws DocumentException {
    try {
        Document document = new Document(PageSize.LETTER);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfWriter writer;
        writer = PdfWriter.getInstance(document, baos);
        document.addTitle("This is a title.");
        document.open();
        document.add(new Paragraph("This document was created successful"));
        document.close();
        writer.close();
        //String fileName = "Andy";
        InputStream stream = new ByteArrayInputStream(baos.toByteArray());
        //file = new DefaultStreamedContent(stream, "application/pdf", fileName);
        file=new DefaultStreamedContent(stream, "application/pdf");
    } catch (Exception ex) {
        ex.getMessage();
    }
}

XHTML:

<f:facet name="footer">
    <p:commandButton  value="valor" icon="ui-icon-check" oncomplete="reportModal.show()" action="#{reportMemory.memoryReport}" update="reportViewer"/>
</f:facet>
</h:panelGrid>
</div>
<p:dialog  resizable="false" closeOnEscape="true" appendTo="@(body)" modal="true" id="reportViewer" widgetVar="reportModal" width="1000px" height="630px">
<p:media cache="false" value="#{reportMemory.file}" width="100%"  height="600px" player="pdf"/>
</p:dialog> 

questionAnswers(2)

yourAnswerToTheQuestion