我正在从Richfaces迁移到Primefaces。在我现有的应用程序中,我有一个打印用例,当用户单击打印按钮时,Printer bean将pdf(以及print Javascript)内容写入outputstream,并在客户端打印包含pdf内容的对话框自动打开。使用Richfaces,我使用了以下代码段:
<a4j:mediaOutput element="object" type="application/pdf" mimeType="application/pdf"
createContent="#{printerBean.generatePrintOutput}" value="#{dataBean.printObject}"
style="width: 0px; height: 0px;" cacheable="false"
classid="CLSID:CA8A9780-280D-11CF-A24D-444553540000"/>
上面的方法与richfaces一起工作得很好,我希望用primefaces实现相同,但找不到确切的替代方案。上面的 createContent 属性可以实现神奇的.i.e。将outputstream和printObject传递给我的printerBean.generatePrintOutput方法。请帮助我如何用primefaces实现这一点。
答案 0 :(得分:0)
查看此代码示例:
视图
<h:form id="mainForm">
<p:commandButton value="Generate" action="#{mediaBean.generatePrintOutput}" update="read" />
<p:outputPanel id="read">
<p:media value="#{mediaBean.media}" width="100%" height="590"
player="pdf" rendered="#{not empty mediaBean.media}" />
</p:outputPanel>
</h:form>
<强> MediaBean 强>
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.apache.commons.io.FileUtils;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
@ManagedBean
@SessionScoped
public class MediaBean {
private byte[] data;
public void generatePrintOutput() throws IOException {
//simulates the genration of the pdf
data = FileUtils.readFileToByteArray(new File("D:/cars.pdf"));
}
public StreamedContent getMedia() throws IOException {
if (data == null) {
return null;
}
InputStream stream = new ByteArrayInputStream(data);
StreamedContent pdf = new DefaultStreamedContent(stream, "application/pdf");
return pdf;
}
}
不要忘记更新 D:/cars.pdf 以在您自己的文件系统中定位pdf。