Foros del Web » Programación para mayores de 30 ;) » Java »

Pasar Codigo HTML a iText

Estas en el tema de Pasar Codigo HTML a iText en el foro de Java en Foros del Web. Hola a todos, estoy haciendo una aplicación Web que construye un PDF con información de una Base de Datos, la BD es en MySQL, IDE ...
  #1 (permalink)  
Antiguo 22/05/2013, 19:58
 
Fecha de Ingreso: abril-2009
Mensajes: 78
Antigüedad: 15 años, 6 meses
Puntos: 0
Pasar Codigo HTML a iText

Hola a todos, estoy haciendo una aplicación Web que construye un PDF con información de una Base de Datos, la BD es en MySQL, IDE NetBeans, librería iText para el PDF

Ya construyo todo el PDF, pero le tengo que dar al usuario una opción para crear un mensaje y que pueda usar Negritas, Centrado, tamaño diferente de letras, etc, tengo un Editor de Texto que me guarda en mi BD el mensaje en formato HTML con todo lo que puso el usuario con el editor de texto.

Ahora, lo que tiene que hacer la aplicación es que debajo de la celda que puso el usuario inserte otra celda con el mensaje pero ya con el formato dado por el Editor de Texto.

Estoy usando HTMLWorker para convertir el texto HTML al lenguaje de iText y si funciona, pero lo imprime en cualquier parte del documento ya que no he sabido como asignarlo a una celda, alguien podría ayudarme con este problema? Les coloco el código donde convierto la cadena de la Base de Datos que viene en HTML a lo que debe escribir iText en mi PDF:

Código:
//Aqui convierto el HTML 
HTMLWorker htmlWorker = new HTMLWorker(documento);
String str = "<html><head></head><body>" + men.getMensaje() + "</body></html>";
htmlWorker.parse(new StringReader(str));
Código:
//Al final de cada linea de celdas que inserto tengo que colocar esto para que lo inserte en la tabla creada
tablec.addCell(cellcomp);
Pero de ahi no se como insertarlo en la celda correspondiente para despues asignarla a la tabla y de ahi al documento cuando termino el ciclo

Tambien vi que existe la libreria XMLWorker de iText pero ese se me ha hecho mas complicado manejarlo, vi que se podia meter lo del XMLWorker a una Lista de Elementos, pero caigo en lo mismo del como los agrego a una sola celda con el formato que se convirtio de HTML

Agradezco mucho cualquier ayuda, cuento con el libro de iText, pero en esta parte se me ha hecho algo complicado

Saludos a todos
  #2 (permalink)  
Antiguo 23/05/2013, 04:16
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 8 meses
Puntos: 78
Respuesta: Pasar Codigo HTML a iText

Estás mezclando dos cosas en tu código:

1.- HTML
2.- La creación de celdas sin HTML

Lo que tienes que hacer es escribir en HTML la estructura de la tabla (con sus celdas y demás) y lo parseas luego con "htmlWorker.parse(StringConLaTabla)"

El addCell solo deberias usarlo si crearas un PDF integramente en Java, pero lo que tu necesitas/quieres es hacerlo con HTML.

Todo el documento debes añadirlo a Strings e irlo metiendo en el parse() del htmWorker.

Saludos.
  #3 (permalink)  
Antiguo 28/05/2013, 21:07
 
Fecha de Ingreso: abril-2009
Mensajes: 78
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Pasar Codigo HTML a iText

Hola, muchas gracias por responder, pero lo que quiero es precisamente crear un PDF integramente en Java, verás, la aplicación construye un PDF con información que viene de una Base de Datos, y crea una tabla en el documento, cada una de sus líneas las crea con varios ciclos, ahora, dentro del ciclo si encuentra que la línea tiene un mensaje, entonces toma el mensaje HTML guardado en la Base y lo debe insertar en una de las celdas, es necesario que sea en la celda, para que tome el mismo formato.

Pondré solo parte de mi codigo porque está muy largo y a ver si así me hago entender un poco mejor:

Código:
if(lpr.getPreciosugerido().equals("0") || lpr.getPreciosugerido().equals("null")){
                                    lpr.setPreciosugerido("N/A");
                                }
                                cellcomp = new PdfPCell(new Phrase(lpr.getPreciosugerido(), FontFactory.getFont("Calibri",8,Font.BOLD, BaseColor.BLACK)));
                                cellcomp.setHorizontalAlignment(Element.ALIGN_CENTER);
                                cellcomp.setVerticalAlignment(Element.ALIGN_MIDDLE);
                                cellcomp.setBackgroundColor(BaseColor.LIGHT_GRAY);
                                cellcomp.setBorderWidth(1f);
                                cellcomp.setColspan(1);
                                cellcomp.setRowspan(1);
                                tablec.addCell(cellcomp);
                                
                                for (int c = 0; c < listacomp.size(); c++){
                                    
                                    Componentes com = (Componentes)listacomp.get(c);
                                    cellcomp = new PdfPCell(new Phrase(com.getHijo() + "  " + com.getCantidad() + "  " + com.getDescripcion(), FontFactory.getFont("Calibri",8,Font.BOLD, BaseColor.BLACK)));
                                    cellcomp.setHorizontalAlignment(Element.ALIGN_LEFT);
                                    cellcomp.setVerticalAlignment(Element.ALIGN_MIDDLE);
                                    cellcomp.setBackgroundColor(BaseColor.WHITE);
                                    //cellcomp.setBorderWidth(0f);
                                    cellcomp.setBorderWidthRight(1f);
                                    cellcomp.setColspan(5);
                                    cellcomp.setRowspan(1);
                                    tablec.addCell(cellcomp);
                                
                                }
                                
                                if (lpr.getMensaje().equals("Y")){
                                
                                    men.setIdmensajes(lpr.getIdmensaje());
                                    MensajesDAO menDAO = new MensajesDAO();
                                    menDAO.TraerMensaje(men);
                                    cellcomp = new PdfPCell();
                                    
//                                    try {
                                        
                                        HTMLWorker htmlWorker = new HTMLWorker(documento);
                                        String str = "<html><head></head><body>" + men.getMensaje() + "</body></html>";
//                                        htmlWorker.createCell(str).createPdfPCell(str, null);
                                        htmlWorker.parse(new StringReader(str));
 }
Es por eso que lo necesito en una celda, para que el mismo ciclo lo inserte jalando el mensaje guardado de la Base de Datos, si ayuda poner todo el codigo de mi servlet o mi proyecto, me podrian comentar de que forma puedo hacerlo? Ya llevo casi un mes atorado en este tema

Gracias y saludos
  #4 (permalink)  
Antiguo 31/05/2013, 15:20
 
Fecha de Ingreso: abril-2009
Mensajes: 78
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Pasar Codigo HTML a iText

Hola, no se si no me expliqué bien con lo que necesito, alguien conocerá algo de como realizarlo?

Saludos
  #5 (permalink)  
Antiguo 13/06/2013, 08:48
 
Fecha de Ingreso: abril-2009
Mensajes: 78
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Pasar Codigo HTML a iText

Creo que me di una idea con lo que me comentaste ElAthlit, en donde invoque el mensaje, lo puedo invocar envuelto en una tabla nueva e incrustarlo, eso fue lo que entendi, lo intentaré, solo una pregunta, las medidas de tablas de HTML son las mismas que en Itext?

Saludos
  #6 (permalink)  
Antiguo 13/06/2013, 09:21
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 8 meses
Puntos: 78
Respuesta: Pasar Codigo HTML a iText

Exacto, dentro de una clase de java vas creando Strings con HTML, por ejemplo:

String strCabecera = "<b>Esto es la cabecera</b>";

Del mismo modo, puedes poner tablas y casi cualquier cosa en HTML.

Una vez lo tienes todo, lo vas metiendo en el parse() del htmWorker. Generas el PDF y lo tendrás creado a base de código HTML. Es mas sencillo hacerlo de esta forma si no quieres hacer cosas muy elaboradas.

Las medidas de las tablas las puedes hacer en porcentaje o pixeles, igual que en HTML. Por ejemplo:

String strListado = "<table border='1' width='50%'><tr><td>Patapam</td></tr></table>";

Te creará en el PDF una tabla que ocupa el 50% del PDF. Añadiendo más HTML dentro de los Strings, puedes centrar y hacer lo que quieras.

Saludos

Etiquetas: html, itext, netbeans, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:10.