c# - iTextSharp how to know busy or available space in one page -
i have report prints tables, processes generate table same.. each repetition prints 1 table... then, how can know available space of current page? want know if in free space fits 2 rows or if not how skip next page?
public void imprime() { console.writeline("generando documento..."); document.open(); alto = convert.toint32(document.pagesize.height); //parrafo paragraph unparrafo = generarparrafo(); document.add(unparrafo); //genero y agrego salto de linea document.add(new paragraph(" ")); //imagen //itextsharp.text.image unaimagen = generarimagen(); //document.add(unaimagen); //genero y agrego salto de linea document.add(new paragraph(" ")); //tabla //pdfptable unatabla = muestra_tabla(); //pdfptable unatabla = arma_tabla(document); //document.add(unatabla); arma_tabla(); //cierro documento document.close(); //lo ejecuto process prc = new system.diagnostics.process(); prc.startinfo.filename = filename; prc.start(); } public static void arma_tabla() { //datatable dt_notas = new datatable(); dt_notas = nota_medica(); datarow[] dr_separador = null; datarow[] dr_resultado = null; dr_separador = dt_notas.select("es_separador = 'si'"); console.writeline("detecta: " + dr_separador.count().tostring() + " separadores."); foreach (datarow dr in dr_separador) { dr_resultado = dt_notas.select("separador = '" + dr["separador"].tostring() + "'"); console.write("la sección: " + dr["separador"].tostring() + " tiene " + dr_resultado.count().tostring() + " apartados."); crea_tabla(dr_resultado); } //return unatabla; } public static void crea_tabla(datarow[] dr_por_separador) { int renglones = 0; int columnas = 0; int num_col = 0; int renglones_totales = 0; pdfptable pdf_tabla = null; pdfptable pdf_tabla_respuestas = null; console.writeline("crear tabla de: " + dr_por_separador[0]["pregunta"].tostring()); renglones_totales = dr_por_separador.count(); datatable dt_tabla = new datatable(); dt_tabla = dt_notas.clone(); datarow[] dr_respuestas = null; bool inicia = true; foreach (datarow dr in dr_por_separador) { renglones = renglones + 1; //se van contando los renglones para saber cuando termino de leer antes de salir if(inicia == true) //se inicializa la tabla { num_col = convert.toint32(dr["columnas"].tostring()); pdf_tabla = new pdfptable(num_col); pdf_tabla_respuestas = new pdfptable(num_col); inicia = false; } if (renglones == 1) //pinta separador { pdf_tabla.addcell(crea_celdas(dr, "pregunta")); pdf_tabla.splitlate = false; } else //pinta apartados; preguntas y respuestas { columnas = columnas + 1; pdf_tabla.addcell(crea_celdas(dr, "pregunta")); dt_tabla.importrow(dr); } //si ya termino de leer los renglones if (renglones_totales == renglones) { pdf_tabla.completerow(); //completa el ultimo renglon que corresponde preguntas columnas = num_col; //para que termine de pintar las respuestas } if (columnas == num_col) //se ya termino el renglon de preguntas { dr_respuestas = dt_tabla.select(); foreach (datarow r in dr_respuestas) { pdf_tabla.addcell(crea_celdas(r, "respuesta")); } pdf_tabla.completerow(); dt_tabla.clear(); columnas = 0; if (alto <= convert.toint32(pdf_tabla.totalheight)) { document.newpage(); alto = convert.toint32(document.pagesize.height); } document.add(pdf_tabla); messagebox.show("renglon respuestas --> alto " + alto.tostring() + " alto tabla: " + pdf_tabla.totalheight.tostring() ); alto = alto - convert.toint32(pdf_tabla.totalheight); pdf_tabla = null; inicia = true; } } } public static pdfpcell crea_celdas(datarow dr, string tipo) { itextsharp.text.font letra = null; basecolor fondo = null; int colapsable = 0; if (tipo == "pregunta") { if (dr["es_separador"].tostring() == "si") { letra = new itextsharp.text.font(itextsharp.text.font.normal, 8f, itextsharp.text.font.normal, basecolor.white); fondo = basecolor.gray; colapsable = convert.toint32(dr["columnas"].tostring()); } else { letra = new itextsharp.text.font(itextsharp.text.font.normal, 9f, itextsharp.text.font.bold, basecolor.blue); fondo = basecolor.light_gray; colapsable = 1; } } else { if (dr["es_separador"].tostring() == "no") { letra = new itextsharp.text.font(itextsharp.text.font.normal, 8f, itextsharp.text.font.normal, basecolor.black); fondo = basecolor.white; colapsable = 1; } } console.writeline("pinta " + dr[tipo == "pregunta" ? "pregunta" : "respuesta"].tostring()); pdfpcell pdf_celda = new pdfpcell(new phrase(dr[tipo == "pregunta" ? "pregunta" : "respuesta"].tostring(), letra)); pdf_celda.backgroundcolor = fondo; pdf_celda.colspan = colapsable; messagebox.show(pdf_celda.getmaxheight().tostring()); return pdf_celda; } public static datatable nota_medica() { datatable dt = new datatable(); dt.columns.add("separador", typeof(string)); dt.columns.add("es_separador", typeof(string)); dt.columns.add("columnas", typeof(string)); dt.columns.add("pregunta", typeof(string)); dt.columns.add("respuesta", typeof(string)); datarow dr = dt.newrow(); (int separador = 0; separador < 1; separador++) { (int = 0; < 1; i++) { dr = dt.newrow(); dr["separador"] = "separador num." + separador.tostring(); dr["es_separador"] = (i == 0 ? "si" : "no"); dr["columnas"] = (separador + 1).tostring(); dr["pregunta"] = (i == 0 ? "separador num." + (separador + 1).tostring() : "pregunta num." + i.tostring()); dr["respuesta"] = "respuesta num." + i.tostring() + (i == 5 ? " el estado de salud del paciente es delicado y de observancia" : ""); dt.rows.add(dr); } } console.writeline("carga: " + dt.rows.count.tostring() + " notas."); return dt; }
Comments
Post a Comment