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();
}
}
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.
/demoPDF.seam dediginizde direk aciyor hocam ;)