我有一个打印表的报告,生成表的过程是相同的..每次重复打印一个表... 那么,我如何知道当前页面的可用空间?我想知道在我的可用空间中是否适合两行,或者如果不是如何跳到下一页?
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 a 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();
for (int Separador = 0; Separador < 1; Separador++)
{
for (int i = 0; i < 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;
}