【问题标题】:Show Pdf file in Primefaces page在 Primefaces 页面中显示 Pdf 文件
【发布时间】:2014-08-11 17:02:18
【问题描述】:

我在 jsf 托管 bean 中使用 Itextpdf 包生成 pdf 文件,现在我希望当用户单击 p:commandButton 时,用户可以从 p:media 中看到 page2.xhtml 中的 pdf 文件。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org    /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <p:inputText value="#{bean.text}" />
            <p:commandButton value="Show Pdf File" action="page2" />
        </h:form>

    </h:body>
</html>

Page2.xhtml 是:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Page 2</title>
    </h:head>
    <h:body>
        <p:media value="??????????" width="500px" height="500px" player="pdf" />
    </h:body>
</html>

我的 bean 文件是:

    package pack;

import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;


@ManagedBean
@RequestScoped
public class bean {

    private String text;

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }



    /**
     * Creates a new instance of bean
     */
    public bean() {
        this.create_pdf();
    }

    public void create_pdf(){
        try {
            Document doc = new Document();
            OutputStream file = new FileOutputStream(new File("HelloWorld.pdf"));

            PdfWriter writer = PdfWriter.getInstance(doc, file);

            doc.open();
            doc.add(new Paragraph("A Hello World PDF document."));
            doc.add(new Paragraph(this.text));
            doc.close(); 
            file.close();            
        } catch (Exception e) {        }

    }

}

【问题讨论】:

标签: jsf primefaces itext


【解决方案1】:

感谢 Leo 和 faissalb 的回复。 此响应的详细信息是:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>page 1</title>
    </h:head>
    <h:body>
        <p:media value="#{bean.streamedContent}" width="700px" height="700px" player="pdf" />
    </h:body>
</html>

和 bean 文件:

package pack;

import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

/**
 *
 * @author alfa
 */
@ManagedBean
@RequestScoped
public class bean {

    private static final long serialVersionUID = 1L;

    private StreamedContent streamedContent;


    @PostConstruct     
    public void init() {
        try {
        //----------------------------------
            Document doc = new Document();

            OutputStream out = new ByteArrayOutputStream();
            PdfWriter writer = PdfWriter.getInstance(doc, out);

            doc.open();
            doc.add(new Paragraph("Hello World. ok........"));
            doc.close(); 
            out.close();

            InputStream in =new ByteArrayInputStream(((ByteArrayOutputStream)out).toByteArray());

            streamedContent = new DefaultStreamedContent(in, "application/pdf");
        //-------
        Map<String, Object> session = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
        byte[] b = (byte[]) session.get("reportBytes");
        if (b != null) {
            streamedContent = new DefaultStreamedContent(new ByteArrayInputStream(b), "application/pdf");
        }            
        } catch (Exception e) {
        }

    }
    //==================================================================
    public StreamedContent getStreamedContent() {
        if (FacesContext.getCurrentInstance().getRenderResponse()) {
            return new DefaultStreamedContent();
        } else {
            return streamedContent;
        }
     }
    //==================================================================
    public void setStreamedContent(StreamedContent streamedContent) {
        this.streamedContent = streamedContent;
    }
    //=====================================================================

}

【讨论】:

  • 会话中的reportBytes得到什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 2019-07-06
  • 1970-01-01
相关资源
最近更新 更多