Un poco
lejos desde mi último post. Les traigo la otra parte de cómo crear un reporte
con ItextSharp pero ahora con uso de tablas de ItextSharp.
Útiles
cuando se necesita crear un documento con texto en columnas o texto a
diferentes sangrías sin estar colocándolo con coordenadas.
Los
pasos para utilizar la herramienta de ITextsharp son los mismos que en el Post anterior, solo que
ahora la construcción es diferente para lo cual utilizaremos la propiedad PdfPTable. Y utilizaremos
el objeto doc.
Document doc = new Document(iTextSharp.text.PageSize.LETTER);
Empezamos declarando nuestro objeto tabla (Les pongo el código solo para
copiar y pegar en su VS)
iTextSharp.text.Rectangle
page = doc.PageSize; //Obtenemos el tamaño total de
la pagina
PdfPTable
table = new PdfPTable(8); //Declaramos
el objeto PdfPTable y especificamos el ancho de las columas a utilizar
table.WidthPercentage
= 80;//Le damos un tamaño a la tabla, esta tomara en porcierto el ancho que
ucupara
table.TotalWidth
= page.Width - 90; //Le damos el tamaño de la
tabla
table.LockedWidth
= true;//Decimos que se bloque el tamaño de la tabla, esto para que no creesca
dependiendo de la información
float[]
widths = new float[] { .8f, .8f, .8f, .8f, .8f, .8f, .8f, .8f }; //Declaramos
un array con los tamaños de nuestras columnas deben de coincidir con el tamaño
de columnas
table.SetWidths(widths); //Agregamos los anchos a
nuestra tabla
Con estos pasos ya tenemos la construcción de nuestra tabla, ahora viene
lo bueno, en el post anterior vimos cómo ir insertando texto en cada renglón,
en este caso el proceso es igual de laborioso ya que iremos insertando celda
por celda con ayuda de AddCell.
//Agregamos
una valor a nuestra celda de nuestra tabla
table.AddCell(new PdfPCell(new Paragraph("Texto Celda 1")));
Aquí agregamos a nuestra tabla en la
celda 1 un nuevo objeto de tipo PdfPCell lo cual dentro recibe un objeto de
tipo Paragraph en cual vimos que se utiliza para agregar texto a
nuestro formulario y en este caso a nuestra celda.
Ahora bien como recordaran declaramos
nuestra tabla con 8 columnas, para ir agregando texto a cada celda, no hay que
especificar en qué celda queremos insertar texto. Solo basta con ir escribiendo
como se muestra a continuación:
table.AddCell(new PdfPCell(new Paragraph("Texto Celda 1")));
table.AddCell(new PdfPCell(new Paragraph("Texto Celda 2")));
table.AddCell(new PdfPCell(new Paragraph("Texto Celda 3")));
table.AddCell(new PdfPCell(new Paragraph("Texto Celda 4")));
table.AddCell(new PdfPCell(new Paragraph("Texto Celda 5")));
table.AddCell(new PdfPCell(new Paragraph("Texto Celda 6")));
table.AddCell(new PdfPCell(new Paragraph("Texto Celda 7")));
table.AddCell(new PdfPCell(new Paragraph("Texto Celda 8")));
Esto nos creara nuestra primera fila
(row de la tabla). Para continuar en la siguiente fila solo basta con volver a
crear otra instrucción con el nuevo texto, ItextSharp nos ira acomodando los
textos en su respectivo lugar
Cabe mencionar que si queremos dejar un
espacio vacío entre la celda 1 y 3 es decir en la celda 2, dentro de nuestro Paragraph le podemos poner (""), de igual forma si
queremos un texto dentro de la misma celda con un salto de carro solo ponemos ("\n").
Ahora van las ventajas de uso de tablas
para construir el reporte dentro de ItextSahrp. En mi caso particular me fue útil
en muchos aspecto, a nuestro objeto de tipo PdfPCell le podemos especificar que queremos la
celda con borde, la alineación vertical y horizontal, el color de la celda, etc.
Para lo cual yo construí un método de
tipo PdfPCell
que me recibe los parámetros de configuración de mi celda, y este me
regresara un objeto del mismo tipo. Les comparto mi código para facilitar su
aprendizaje y les comentos cada uno de los atributos que tiene.
public PdfPCell celda(string Texto, int collspan, int rowspan, float tamaño, int alignment, int borde, BaseColor colorTexto, string colorCelda)
{
//Creamos
un Objeto de tipo PdfPCell en el cual agregamos directo nuestro texto como vera
utilizo Paragraph con un tipo de letra en mi caso fijo pero si lo desean pueden enviarlo como parametro, un tamaño y un color de letra que se
envian como parametro
PdfPCell CeldaPDF = new PdfPCell(new Paragraph(Texto, FontFactory.GetFont("Calibri", tamaño, colorTexto)));
//Este
codigo es referente a los border, como podran ver tengo varias combinancaciones
para poner el borde deseado
#region "borde"
if (borde == 0)
{
CeldaPDF.Border = 0;
}
else
{
if (borde == 1)
{
CeldaPDF.Border =
iTextSharp.text.Rectangle.BOTTOM_BORDER;
}
else
{
if (borde == 2)
{
CeldaPDF.Border =
iTextSharp.text.Rectangle.TOP_BORDER;
}
else
{
if (borde == 3)
{
CeldaPDF.Border =
iTextSharp.text.Rectangle.LEFT_BORDER;
}
else
{
if (borde == 4)
{
CeldaPDF.Border =
iTextSharp.text.Rectangle.RIGHT_BORDER;
}
else
{
if (borde == 5)
{
CeldaPDF.Border =
iTextSharp.text.Rectangle.BOTTOM_BORDER | iTextSharp.text.Rectangle.TOP_BORDER |
iTextSharp.text.Rectangle.LEFT_BORDER | iTextSharp.text.Rectangle.RIGHT_BORDER;
}
else
{
if (borde == 6)
{
CeldaPDF.Border = iTextSharp.text.Rectangle.BOTTOM_BORDER | iTextSharp.text.Rectangle.LEFT_BORDER;
}
else
{
if (borde == 7)
{
CeldaPDF.Border = iTextSharp.text.Rectangle.BOTTOM_BORDER | iTextSharp.text.Rectangle.RIGHT_BORDER;
}
else
{
if (borde == 8)
{
CeldaPDF.Border = iTextSharp.text.Rectangle.TOP_BORDER | iTextSharp.text.Rectangle.LEFT_BORDER;
}
else
{
if (borde == 9)
{
CeldaPDF.Border = iTextSharp.text.Rectangle.TOP_BORDER | iTextSharp.text.Rectangle.RIGHT_BORDER;
}
}
}
}
}
}
}
}
}
}
#endregion
//Indicamos
que queremos un color de fondo, el parametro enviado es un strign donde vendra
nuestro color por default si no lo indican es blanco
CeldaPDF.BackgroundColor = new BaseColor(System.Drawing.ColorTranslator.FromHtml(colorCelda));
//En
caso de querer poner un collspan indicamos el numero de columnas que abarcara
CeldaPDF.Colspan = collspan;
//Lo
mismo si es un rowspan, indicaremos el numero de filar que abarcara
CeldaPDF.Rowspan = rowspan;
//Indicamos
la alineacion horizontal
CeldaPDF.HorizontalAlignment =
alignment;
//Indicamos
la alineacion vertical
CeldaPDF.VerticalAlignment =
alignment;
//Regresamos
nuestra celda ya formateada
return CeldaPDF;
}
Ahora con este método solo basta con
especificar lo siguiente:
table.AddCell(tp.
celda ("Celda 1", 1, 1, 14, Element.ALIGN_CENTER, 0, BaseColor.BLACK, "White"));
Esto igual por cada celda a utilizar, y ya por último solo basta con agregar
nuestra tabla a nuestro documento para que lo incruste y salga en nuestro
impreso final:
doc.Add(table);
Es un proceso laborioso pero muy útil,
ya que nos da control total sobre nuestro documento.
Eh estado un poco retirado por
cuestiones laborales, espero les sea útil y ya saben si tiene duda con este información,
no duden en comentarme.
Saludos cordiales.
No hay comentarios:
Publicar un comentario