0

PDFを生成し、「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 ファイルは表示されません。代わりに、コマンドを呼び出した画面がそこに表示されます。

どんな助けでも本当にありがたいです。ありがとう

4

1 に答える 1

2

返信ありがとうございます。解決策を探している人が使用できるように、投稿したい解決策を自分で見つけました。

私のxhtmlファイルにはコマンドが含まれていましたlink

  <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の提案に従いました

于 2013-04-30T16:21:13.000 に答える