You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.
Here is my sample code, first for rendering pdf and persisting to database as byte array, and secondly serving file to browser.
/** * Create the pdf by rendering pdf template and returning as byte array * @return */ private byte[] createPDF() { byte[] bytes = null; try { renderer.render("/generalInquiryPdf.xhtml"); DocumentStore doc = DocumentStore.instance(); if (doc != null) { DocumentData data = doc.getDocumentData("1"); ByteArrayDocumentData byteData = null; if (data instanceof ByteArrayDocumentData) { byteData = (ByteArrayDocumentData) data; } else { throw new Exception("Couldnt get the bytes from the pdf document, unknown class " + data.getClass().getName()); } bytes = byteData.getData(); } } catch (Exception ex) { log.error("Error when trying to get the content of the pdf in bytes with the message #0", ex.getMessage()); ex.printStackTrace(); } finally { } return bytes; }
/** * Serve file to the browser */ public void sendFile(byte[] file, String contentType, String filename) throws IOException { if (file == null) { return; } FacesContext fc = FacesContext.getCurrentInstance(); HttpServletResponse servletResponse = (HttpServletResponse) fc.getExternalContext().getResponse(); if (filename != null) { servletResponse.setHeader("Content-disposition", "attachment; filename=" + filename); } if (contentType != null) { servletResponse.setContentType(contentType); } ServletOutputStream os = servletResponse.getOutputStream(); os.write(file); fc.responseComplete(); } <h:commandLink id="view" value="View" action="#{<ComponentName>.sendFile}" />