Primefaces生成pdf并在点击按钮时显示

时间:2013-04-30 06:51:44

标签: pdf primefaces commandlink

我有一个要求,我必须生成一个pdf然后点击“SHOW PDF”按钮,我必须在另一个窗口上显示。 我已经能够使用IText生成pdf并存储在我的机器中。我得到一个java.io.File对象作为我的后端库的返回值,需要在屏幕上显示。有人可以指导我怎么做吗?

我的xhtml文件包含以下代码段:

<h:commandLink  action="PdfDisplayRedirect.xhtml" target="_blank">show PDF</h:commandLink>

我的PdfDisplayRedirect.xhtml包含以下代码:

<p:media value="#{pdfGenerationAction.fileName}" width="100%" height="300px">  
Your browser can't display pdf, <h:outputLink value="InitialExamination33.pdf">click</h:outputLink> to download pdf instead.  

我的支持bean有以下代码:

private File initialExaminationFile;
private generateFile(){
     this.initialExaminationFile = backendService.generateFile();
}

点击后,我打开了一个新窗口但是没有显示pdf文件。相反,我调用命令的界面显示在那里。

任何帮助都会非常感激。 感谢

1 个答案:

答案 0 :(得分:2)

感谢您的回复,没有回应。 我自己找到了一个解决方案,我想发布,以便寻找解决方案的人可以使用它。

我的xhtml文件包含一个commandlink

  <p:commandLink actionListener="#{pdfGenerationAction.generatePDF(initialExaminationEMRAction.patientID)}" oncomplete="window.open('PdfDisplayRedirect.xhtml')">broadcast Msg</p:commandLink>

我的pdfGenerationAction bean文件包含以下代码行:

FileInputStream fis = new FileInputStream(this.initialExaminationFile);
    //System.out.println(file.exists() + "!!");
    //InputStream in = resource.openStream();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buf = new byte[1024];
    try {
        for (int readNum; (readNum = fis.read(buf)) != -1;) {
            bos.write(buf, 0, readNum); //no doubt here is 0
            //Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
            System.out.println("read " + readNum + " bytes,");
        }
        this.reportBytes = buf;
    }

我将文件转换为bytearraystream,并在我的会话中使用。然后我按照BalusC在Unable to show PDF in p:media generated from streamed content in Primefaces

给出的建议