You are on page 1of 5

iTextSharp - Introducción a las

Tablas
Tablas probablemente será uno de los elementos más utilizados en PDFs generados
desde aplicaciones ASP.NET para proporcionar la estructura para documentos tales
como pedidos y facturas. Este resumen no es un examen exhaustivo de las tablas,
sino que proporciona una introducción al trabajo con ellos a través de iTextSharp, y
se basa en los artículos anteriores de esta serie iTextSharp:

Creación de archivos PDF en ASP.NET - Conceptos básicos del iTextSharp


iTextSharp - Trabajar con fuentes
iTextSharp - Adición de texto con fragmentos, frases y párrafos
con listas iTextSharp
iTextSharp - Enlaces y Marcadores
Trabajar con tablas utilizando iTextSharp no es tan difícil, sobre todo porque muchos de los
nombres de propiedad son tan similares o idénticos a sus contrapartes en CSS y HTML. Hay más
de una clase en iTextSharp que se puede utilizar para crear tablas, así que para evitar dudas, voy
a utilizar elPdfPTable clase, que está diseñado específicamente para su uso en documentos
PDF. En su forma más simple, la mayoría aquí es cómo crear una tabla y agregarlo a un
documento:

PdfPTable table = new PdfPTable(3);


PdfPCell cell = new PdfPCell(new Phrase("Header spanning 3 columns"));
cell.Colspan = 3;
cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
table.AddCell(cell);
table.AddCell("Col 1 Row 1");
table.AddCell("Col 2 Row 1");
table.AddCell("Col 3 Row 1");
table.AddCell("Col 1 Row 2");
table.AddCell("Col 2 Row 2");
table.AddCell("Col 3 Row 2");
doc.Add(table);

El objeto PdfPTable se crea una instancia como una tabla de tres columnas - el 3 entero que se
pasa al constructor. Las células se pueden agregar en un número de maneras. La primera celda
se establece como un objeto PdfPCell, que puede tomar un objeto frase en uno de sus 7
constructores. El colspan se establece en 3, lo que significa que la célula se ocupan todo el
ancho de la tabla, exactamente como en HTML. La posición horizontal del texto dentro de la
celda se establece mediante uno de tres valores posibles. Todos los posibles valores se
muestran como un comentario. Después de eso, dos filas de celdas se añaden utilizando el
AddCell () y la tabla está finalmente comprometidos con el documento abierto actualmente.
El esfuerzo siguiente, se consulta una base de datos y presenta los datos resultantes en una
tabla. También muestra algunas otras opciones que pueden ser utilizados para el peinado y la
presentación de la tabla:

PdfPTable table = new PdfPTable(2);


//actual width of table in points
table.TotalWidth = 216f;
//fix the absolute width of the table
table.LockedWidth = true;

//relative col widths in proportions - 1/3 and 2/3


float[] widths = new float[] { 1f, 2f };
table.SetWidths(widths);
table.HorizontalAlignment = 0;
//leave a gap before and after the table
table.SpacingBefore = 20f;
table.SpacingAfter = 30f;

PdfPCell cell = new PdfPCell(new Phrase("Products"));


cell.Colspan = 2;
cell.Border = 0;
cell.HorizontalAlignment = 1;
table.AddCell(cell);
string connect
= "Server=.\\SQLEXPRESS;Database=Northwind;Trusted_Connection=True;";
using (SqlConnection conn = new SqlConnection(connect))
{
string query = "SELECT ProductID, ProductName FROM Products";
SqlCommand cmd = new SqlCommand(query, conn);
try
{
conn.Open();
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
table.AddCell(rdr[0].ToString());
table.AddCell(rdr[1].ToString());
}
}
}
catch(Exception ex)
{
Response.Write(ex.Message);
}
doc.Add(table);
}

La tabla se empezó a desarrollar usando creado con 2 columnas. Entonces, el ancho de la tabla
se define en puntos, y se fija. La anchura de las columnas se configuran a sí mismos
relativamente a un tercio y dos tercios de la anchura total de la tabla. Para configurar un quinto
y quintos 4, pasaría a 1f y 4f respectivamente. Puede slo establecer los anchos absolutos al pasar
de valores que conjuntamente suponen el ancho de la tabla, por ejemplo:

float[] widths = new float[] { 100f, 116f };

Una brecha se crea antes y después de la tabla asignando a


la SpacingBefore y SpacingAfter propiedades. Esto es útil si tiene más de una tabla como
continuación de otros, como el comportamiento por defecto es fijar las tablas subsiguientes a la
anterior, como en MS Word, donde un toque rápido de la tecla Enter tiene el efecto mismo
espacio. El borde se retira de la primera célula, que es tratado como una cabecera estableciendo
la colspan a ser igual al número de columnas de la tabla, y el texto en la celda es alineada en el
centro, utilizando el mismo valor que el utilizado para la alineación de la tabla en el
documento. A continuación, la base de datos se consulta y los datos devueltos en un
SqlDataReader. Como es leído, los datos se consigna a las células que se añaden a la tabla:

El siguiente fragmento ilustra algunas de las opciones de formato de celdas. Como se verá, los
creadores de iTextSharp han seguido los nombres de las propiedades CSS tanto como sea
posible para que pueda trabajar con la sintaxis de estilo tan fácil como sea posible (si usted sabe
que su CSS, por supuesto ...)

PdfPTable table = new PdfPTable(3);


table.AddCell("Cell 1");
PdfPCell cell = new PdfPCell(new Phrase("Cell 2", new Font(Font.HELVETICA,
8f, Font.NORMAL, Color.YELLOW)));
cell.BackgroundColor = new Color(0, 150, 0);
cell.BorderColor = new Color(255,242,0);
cell.Border = Rectangle.BOTTOM_BORDER | Rectangle.TOP_BORDER;
cell.BorderWidthBottom = 3f;
cell.BorderWidthTop = 3f;
cell.PaddingBottom = 10f;
cell.PaddingLeft = 20f;
cell.PaddingTop = 4f;
table.AddCell(cell);
table.AddCell("Cell 3");
doc.Add(table);
Hemos visto en un número de ocasiones cómo una célula se puede estirar horizontalmente a
través del uso de la propiedad colspan. Pero ¿qué pasa verticalmente? En HTML debe utilizar la
propiedad rowspan, pero no existe un equivalente en iTextSharp. Así que la respuesta es tablas
anidadas. El código siguiente crea una tabla de cuatro columnas, con la celda inferior derecha se
extiende horizontalmente a través de tres columnas, y verticalmente en tres filas.Bueno, ese es el
aspecto final, pero lo que en realidad sucede es que una sola columna, tres fila de la tabla se
anida dentro de la celda inferior izquierda. La célula de la tabla que está anidado dentro de su
acolchado ha eliminado de manera que la tabla ocupa todo el espacio disponible dentro de ella.

PdfPTable table = new PdfPTable(4);


table.TotalWidth = 400f;
table.LockedWidth = true;
PdfPCell header = new PdfPCell(new Phrase("Header"));
header.Colspan = 4;
table.AddCell(header);
table.AddCell("Cell 1");
table.AddCell("Cell 2");
table.AddCell("Cell 3");
table.AddCell("Cell 4");
PdfPTable nested = new PdfPTable(1);
nested.AddCell("Nested Row 1");
nested.AddCell("Nested Row 2");
nested.AddCell("Nested Row 3");
PdfPCell nesthousing = new PdfPCell(nested);
nesthousing.Padding = 0f;
table.AddCell(nesthousing);
PdfPCell bottom = new PdfPCell(new Phrase("bottom"));
bottom.Colspan = 3;
table.AddCell(bottom);
doc.Add(table);

Finalmente, en este aspecto en las mesas, vemos cómo el contenido de texto de un celular
puede ser rotado (lo cual es bastante elegante).

PdfPTable table = new PdfPTable(3);


table.TotalWidth = 144f;
table.LockedWidth = true;
table.HorizontalAlignment = 0;
PdfPCell left = new PdfPCell(new Paragraph("Rotated"));
left.Rotation = 90;
table.AddCell(left);
PdfPCell middle = new PdfPCell(new Paragraph("Rotated"));
middle.Rotation = -90;
table.AddCell(middle);
table.AddCell("Not Rotated");
doc.Add(table);

La propiedad de rotación debe ajustarse a múltiplos de 90, o se produce un error. La célula


central está ajustado a -90, pero 270 habría tenido el mismo efecto. La dirección por defecto
que el contenido se hace girar es en sentido antihorario. El resultado es el siguiente:
Hay un montón más para trabajar con tablas en iTextSharp, y voy a cubrir una funcionalidad
adicional en futuros artículos. Mientras tanto, Intellisense o el Examinador de objetos en Visual
Studio revela una gran cantidad de métodos y propiedades que vale la pena experimentar con
ver a sus resultados.

You might also like