我有一个要求,我必须生成一个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文件。相反,我调用命令的界面显示在那里。
任何帮助都会非常感激。 感谢
答案 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
给出的建议