生成的PDF不会在浏览器中发送

时间:2017-06-08 12:42:42

标签: spring jsf

我使用iText库构建PDF文档,我想通过单击webapp中的链接来获取此文档。 但是,它发生了......没有。没有错误信息,没有例外,真的没什么。 我真的不掌握IO Streaming,所以我认为我在这一点上犯了一个错误,但经过几个小时的研究,我不知道,我需要一些帮助。

我有两种方法。第一个是创建pdf文档的人。

public void exporterPDF(SomeObjectIWillUse o) {
    Document documentPDF = new Document(PageSize.A4);
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfWriter writer = PdfWriter.getInstance(documentPDF, baos);

        documentPDF.open();
        documentPDF.addTitle("Test ! ");
        Paragraph par = new Paragraph("Liste des participants");

        documentPDF.add(par)
        documentPDF.close();

        telechargerPdfViaVue(FacesContext.getCurrentInstance(), baos, "filename.pdf");

    } catch (Exception e) {
        // TODO Auto-generated catch block
        JsfUtils.addMessageByCode(FacesMessage.SEVERITY_FATAL, "drc.export.generation.pdf.erreur");
    }

}

第二个用于发送文件。

public static final void telechargerPdfViaVue(FacesContext context, ByteArrayOutputStream baos, String fileName) throws IOException, DocumentException {
    ExternalContext externalContext = context.getExternalContext();
    externalContext.setResponseContentType("application/pdf");
    externalContext.setResponseHeader("Expires", "0");
    externalContext.setResponseHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
    externalContext.setResponseHeader("Pragma", "public");
    externalContext.setResponseHeader("Content-disposition", "attachment;filename=" + fileName);
    externalContext.setResponseContentLength(baos.size());
    OutputStream out = externalContext.getResponseOutputStream();
    baos.writeTo(out);
    externalContext.responseFlushBuffer();
    context.responseComplete();
}

并通过简单的commandeLink

在我的网页上调用它
<p:commandLink id="exportPdf" action="#{myBean.exporterPDF(o)}">

从字面上看,在调试模式下,一切都已完成,但没有任何事情发生...... 谢谢你的帮助!

更多信息,我使用: - JSF 2.2.7 - 春季4.0.6

0 个答案:

没有答案