Seam ile Üretilen PDF leri İndirme

Seam ile ürettiğiniz PDF leri aşağıdaki kod ile download edebilirsiniz ? Tabi sadece pdf ile kısıtlı değil. Grafik veya chart gibi çıktıları da aynı kod ile indirebilirsiniz.

     
    import java.io.IOException;
     
    import javax.faces.context.FacesContext;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
     
    import org.jboss.seam.annotations.In;
    import org.jboss.seam.annotations.Name;
    import org.jboss.seam.document.ByteArrayDocumentData;
    import org.jboss.seam.document.DocumentData;
    import org.jboss.seam.document.DocumentStore;
    import org.jboss.seam.faces.Renderer;
     
    @Name("testDownloadPage")
    public class TestDownloadPage {
     
     public void download() {
      try {
       sendFile("demoPDF.xhtml");
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
     
     @In(create = true)
     Renderer renderer;
     
     private byte[] getPage(String pageName) {
      byte[] bytes = null;
      try {
       renderer.render(pageName);
       DocumentStore doc = DocumentStore.instance();
       if (doc != null) {
        DocumentData data = doc.getDocumentData("1");
        ByteArrayDocumentData byteData = (ByteArrayDocumentData) data;
        bytes = byteData.getData();
       }
      } catch (Exception ex) {
       ex.printStackTrace();
      } finally {
      }
      return bytes;
     }
     
     public void sendFile(String pageName) throws IOException {
      FacesContext fc = FacesContext.getCurrentInstance();
      HttpServletResponse servletResponse = (HttpServletResponse) fc.getExternalContext().getResponse();
      servletResponse.setHeader("Content-disposition","attachment; filename="+pageName.replaceAll("xhtml", "pdf"));
      ServletOutputStream os = servletResponse.getOutputStream();
     
      byte[] createPage = getPage(pageName);
      os.write(createPage);
      fc.responseComplete();
     }
    }
Jul 11th, 2011
Tags: ,
  1. Jul 11th, 2011 at 15:15 | #1

    Yazınıza, indirme için HttpServletResponse’nin header’ına attachment ekleyerek, browserın içinde açılması için de inline yazılarak bunun çözülebileceğini ekleseydiniz daha güzel olurdu.

  2. Jul 11th, 2011 at 16:18 | #2

    /demoPDF.seam dediginizde direk aciyor hocam ;)

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>