【问题标题】:problem while generating pdf files using iText 5使用 iText 5 生成 pdf 文件时出现问题
【发布时间】:2011-11-17 10:40:36
【问题描述】:

我正在尝试使用 iText 生成 pdf 文件,我希望这些文件可以直接在我的 chrome 浏览器上打开,所以这是我的打印方法的代码:

 public void printFicheProjet()
    {
        Integer id=Integer.valueOf((String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id_projet_print"));
        Projets projet=projetsService.getProjets(id);
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            HttpServletResponse hsr = (HttpServletResponse) context.getExternalContext().getResponse();
            hsr.setContentType("application/pdf");
            hsr.setHeader("Content-disposition", "inline; filename=\"enseignants.pdf\"");
            Document pdf = new Document(PageSize.A4, 5, 5, 5, 5);
            pdf.setPageSize(PageSize.A4);
            pdf.addHeader("Banque Centrale Populaire", "Fiche Projet");
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            PdfWriter.getInstance(pdf, os);
            pdf.open();            
            Font font = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.NORMAL);
            Paragraph p = new Paragraph("", font);
            p = new Paragraph("Informations genereaux du projet", font);
            Font gras = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD);
            p.setIndentationLeft(30);
            pdf.add(p);
            pdf.close();
            byte[] data = os.toByteArray();
            hsr.getOutputStream().write(data);
            context.responseComplete();
        } catch (Exception e) {}
    }

问题是当我执行此方法时没有任何反应,没有错误浏览器上没有文件没有下载窗口......完全没有。那里可能缺少什么?

【问题讨论】:

    标签: java jakarta-ee pdf-generation itext


    【解决方案1】:

    尝试替换

      catch (Exception e) {}
    

        catch (Exception e) {
    e.printStackTrace()
    }
    

    应该将抛出的异常打印到控制台。

    【讨论】:

    • 我调试了该方法,它一直执行到最后一行没有问题...我添加了 printStackTrace 但仍然没有,所以该方法不会导致任何异常
    • 我将导航器从 chrome 更改为 firefox,所以当我点击打印 IDM(Internet 下载管理器)时会弹出窗口下载文件,但是当我点击下载时,它无法开始下载,当我禁用了IDM,情况像以前一样返回,当我点击打印时没有任何反应......
    【解决方案2】:

    问题是commandbutton 应该具有ajax="false" 属性并且它应该可以正常工作。 而不是:

    <p:commandButton value="Imprimer Fiche Projet" actionListener="#{projet.printFicheProjet}">
        <f:param name="id_projet_print" value="#{projet.currentChangerStatus.projets.codeProjet}" />
    </p:commandButton>
    

    放:

    <p:commandButton value="Imprimer Fiche Projet" actionListener="#{projet.printFicheProjet}" ajax="false">
        <f:param name="id_projet_print" value="#{projet.currentChangerStatus.projets.codeProjet}" />
    </p:commandButton>
    

    【讨论】:

    • 为我工作!任何人都可以解释为什么这不适用于ajax吗? @cascadox
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多