1

I am generating a pdf file with Itextpdf package in jsf managed bean , now I want when user click on p:commandButton , user can see the pdf file in page2.xhtml from p:media .

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

and Page2.xhtml is :

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

and my bean file is :

    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) {        }

    }

}
Farzadmehr
  • 71
  • 1
  • 1
  • 7
  • see http://stackoverflow.com/questions/14232339/how-to-bind-dynamic-pdf-content-using-pmedia – Leo Aug 11 '14 at 17:23
  • Maybe this question will help you http://stackoverflow.com/questions/14484555/unable-to-show-pdf-in-pmedia-generated-from-streamed-content-in-primefaces – faissalb Aug 11 '14 at 18:36

1 Answers1

3

Thanks to Leo & faissalb for response . Detail of this response is :

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

and bean file :

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;
    }
    //=====================================================================

}
Farzadmehr
  • 71
  • 1
  • 1
  • 7