Вы находитесь на странице: 1из 5

iTextSharp - Introduccin a las Tablas

Tablas probablemente ser uno de los elementos ms 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 introduccin al trabajo con ellos a travs de iTextSharp, y se basa en los artculos anteriores de esta serie iTextSharp: Creacin de archivos PDF en ASP.NET - Conceptos bsicos del iTextSharp iTextSharp - Trabajar con fuentes iTextSharp - Adicin de texto con fragmentos, frases y prrafos con listas iTextSharp iTextSharp - Enlaces y Marcadores Trabajar con tablas utilizando iTextSharp no es tan difcil, sobre todo porque muchos de los nombres de propiedad son tan similares o idnticos a sus contrapartes en CSS y HTML. Hay ms de una clase en iTextSharp que se puede utilizar para crear tablas, as que para evitar dudas, voy a utilizar elPdfPTable clase, que est diseado especficamente para su uso en documentos PDF. En su forma ms simple, la mayora aqu es cmo 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 clulas se pueden agregar en un nmero 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 clula se ocupan todo el ancho de la tabla, exactamente como en HTML. La posicin horizontal del texto dentro de la celda se establece mediante uno de tres valores posibles. Todos los posibles valores se muestran como un comentario. Despus de eso, dos filas de celdas se aaden 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. Tambin muestra algunas otras opciones que pueden ser utilizados para el peinado y la presentacin 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, pasara 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 despus de la tabla asignando a la SpacingBefore y SpacingAfter propiedades. Esto es til si tiene ms de una tabla como continuacin de otros, como el comportamiento por defecto es fijar las tablas subsiguientes a la anterior, como en MS Word, donde un toque rpido de la tecla Enter tiene el efecto mismo espacio. El borde se retira de la primera clula, que es tratado como una cabecera estableciendo la colspan a ser igual al nmero 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 alineacin de la tabla en el

documento. A continuacin, la base de datos se consulta y los datos devueltos en un SqlDataReader. Como es ledo, los datos se consigna a las clulas que se aaden 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 fcil 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 nmero de ocasiones cmo una clula se puede estirar horizontalmente a travs 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 cdigo siguiente crea una tabla de cuatro columnas, con la celda inferior derecha se extiende horizontalmente a travs 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 clula 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 cmo 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 rotacin debe ajustarse a mltiplos de 90, o se produce un error. La clula central est ajustado a -90, pero 270 habra tenido el mismo efecto. La direccin por defecto que el contenido se hace girar es en sentido antihorario. El resultado es el siguiente:

Hay un montn ms para trabajar con tablas en iTextSharp, y voy a cubrir una funcionalidad adicional en futuros artculos. Mientras tanto, Intellisense o el Examinador de objetos en Visual Studio revela una gran cantidad de mtodos y propiedades que vale la pena experimentar con ver a sus resultados.

Вам также может понравиться