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

Popular posts from this blog

javascript - how to protect a flash video from refresh? -

android - Associate same looper with different threads -

visual studio 2010 - Connect to informix database windows form application -