Código
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); int height = 520; int width = 300; //int height = Integer.parseInt(heightStr.indexOf(".") == -1 ? heightStr : heightStr.substring(0, heightStr.indexOf("."))); // int width = Integer.parseInt(widthStr.indexOf(".") == -1 ? widthStr : widthStr.substring(0, widthStr.indexOf("."))); try { for (int i = 0; i < height; i++) { current_row = request.getParameter("r" + i) == null ? "" : request.getParameter("r" + i); System.out.println("Estoy dentro del ciclo y esta es la info : " + request.getParameter("r" + i) == null ? "" : request.getParameter("r" + i)); int current_width = 1; for (int m = 0; m < current_col.length; m++) { if (pixel.length > 1) { g.setColor(this.charColor(pixel[0])); } else if (pixel.length == 1) { g.setColor(this.charColor(pixel[0])); g.drawLine(current_width, i, current_width + 1, i); current_width++; } } } e.printStackTrace(); } g.create(); PdfWriter docWriter = null; PdfWriter dos = null; try { docWriter = PdfWriter.getInstance(doc, baosPDF); doc.open(); Table table = new Table(1, 1); table.setWidth(100); table.setTableFitsPage(true); table.setAlignment(Table.ALIGN_LEFT); table.setBorder(Table.NO_BORDER); Cell cell = new Cell(); cell.setBorder(Cell.NO_BORDER); cell.setVerticalAlignment(Cell.ALIGN_TOP); cell.add(docImage); table.addCell(cell); doc.add(table); doc.close(); } catch (DocumentException e) { e.printStackTrace(); } try { FacesContext facesContext = FacesContext.getCurrentInstance(); HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse(); // response.resetBuffer(); response.setContentType("application/pdf"); response.setContentLength(baosPDF.size()); // System.out.println("RespuestA ? : " + response.getOutputStream().toString()); // ServletOutputStream out = response.getOutputStream(); ServletOutputStream out = response.getOutputStream(); baosPDF.writeTo(out); out.write(baosPDF.toByteArray()); out.flush(); out.close(); // baosPDF.flush(); // baosPDF.close(); facesContext.responseComplete(); e.printStackTrace(); } }
El error que me sale es el siguiente "INFO: Error : PWC3990: getWriter() has already been called for this response" He buscado multiples opciones, alternativas, y ninguna me ha servido, por eso acudo a ustedes, espero que me puedan ayudar o darme ideas al respecto, gracias!
PD: Coloque el mime type a word para ver lo que escribe y solo escribe html y body xD , si necesitan mas datos me avisan
PD2: El error esta exactamente acá ServletOutputStream out = response.getOutputStream();
Después de varios dias de intento, la solución era bastante ridicula y simple xD
en el xhtml que llama el método lo tenia asi :
Código
Y la solución es así.
La cosa es que al generar la pagina llamaba automaticamente al evento y generaba una excepcion en el response, pero si hacia que yo generara un evento y de ahí lo llamará automaticamente, entonces si funcionaba bien.
Me di cuenta porque si colocaba un boton que llamara al metodo me pintaba en negro el pdf, y no me tomaba los datos, entonces debí automatizar eso, y aqui la respuesta.
Código
<?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://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:body> <h:form> <f:event listener="#{pdfMB.doPost()}" type="preRenderView" /> <!-- <h:commandButton action="{pdfMB.doPost()}" />--> </h:form> </h:body> </html>