2014-02-07 32 views
2

我正在從Richfaces遷移到Primefaces。在我現有的應用程序中,我有一個打印用例,其中當用戶單擊打印按鈕時,打印機bean將pdf(連同打印Javascript)內容寫入輸出流,並在客戶端打印對話框中包含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

看看這個代碼示例:

<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。

+0

本示例下載PDF,如何才能將輸出流寫入特殊標題下載? – user3027786

+0

僅當您的瀏覽器不支持pdf顯示時,樣本纔會下載。我已經在Chrome中進行了測試,pdf在按鈕後面顯示爲頁面的一部分。無論如何,我已經更新了答案,以減少混淆。 –

+0

現在,如果您包含帶''標籤的按鈕,我可以刪除我的答案。此外,請查看[showcase示例](http://www.primefaces.org/showcase/ui/media.jsf),以便在找不到pdf播放器時顯示替代文本。 – mabi