tablas tabla style setwidthpercentage quitar formato bordes addcell c# .net itextsharp

c# - style - Ocultando el borde de la tabla en iTextSharp



tablas itextsharp c# (6)

¿Cómo puedo ocultar el borde de la tabla usando iTextSharp? Estoy usando el siguiente código para generar un archivo:

var document = new Document(PageSize.A4, 50, 50, 25, 25); // Create a new PdfWriter object, specifying the output stream var output = new MemoryStream(); var writer = PdfWriter.GetInstance(document, output); document.Open(); PdfPTable table = new PdfPTable(3); var bodyFont = FontFactory.GetFont("Arial", 10, Font.NORMAL); 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); Font arial = FontFactory.GetFont("Arial", 6, BaseColor.BLUE); cell = new PdfPCell(new Phrase("Font test is here ", arial)); cell.PaddingLeft = 5f; cell.Colspan = 1; table.AddCell(cell); cell = new PdfPCell(new Phrase("XYX")); cell.Colspan = 2; table.AddCell(cell); cell = new PdfPCell(new Phrase("Hello World")); cell.PaddingLeft = 5f; cell.Colspan = 1; table.AddCell(cell); cell = new PdfPCell(new Phrase("XYX")); cell.Colspan = 2; table.AddCell(cell); table.SpacingBefore = 5f; document.Add(table); document.Close(); Response.ContentType = "application/pdf"; Response.AddHeader("Content-Disposition", "attachment;filename=Receipt-test.pdf"); Response.BinaryWrite(output.ToArray());

¿Debo especificar que no hay bordes para celdas individuales o no puedo especificar ningún límite para la tabla en sí misma?

Gracias


Aunque elevé la respuesta por Martijn, quiero agregar una aclaración.

Solo las celdas tienen bordes en iText; las tablas no tienen un borde La sugerencia de Martijn de establecer el límite de la celda predeterminada en NO_BORDER es correcta:

table.DefaultCell.Border = Rectangle.NO_BORDER;

Pero no funcionará para el fragmento de código proporcionado en la pregunta. Las propiedades de la celda predeterminada solo se usan si iText necesita crear una instancia de PdfPCell implícitamente (por ejemplo: si usa el método addCell() pasando una Phrase como parámetro).

En el fragmento de código proporcionado por @Brown_Dynamite, los objetos PdfPCell se crean explícitamente. Esto significa que debe establecer el borde de cada una de estas celdas en NO_BORDER .

Por lo general, escribo una clase de fábrica para crear celdas. De esa forma, puedo reducir significativamente la cantidad de código en la clase que crea la tabla.


Esto debería funcionar:

table.DefaultCell.Border = Rectangle.NO_BORDER;

o

table.borderwidth= 0;


Primero podemos establecer todos los bordes de las celdas como 0 y luego de asignar todas las celdas a la tabla, podemos usar el siguiente código para solo el borde externo de pdfptable.

PdfPCell cell = new PdfPCell(); cell.AddElement(t); cell.BorderWidthBottom=1f; cell.BorderWidthLeft=1f; cell.BorderWidthTop=1f; cell.BorderWidthRight = 1f; PdfPTable t1 = new PdfPTable(1); t1.AddCell(cell);

Aquí podemos agregar una tabla a una celda y podemos establecer el borde y agregar nuevamente esa celda a otra tabla y podemos usarla según nuestro requisito.


Si su PdfPTable está anidada dentro de otra PdfPTable, la tabla anidada mostrará los bordes de la tabla. La única manera de deshacerse de los bordes de la tabla es poner el PdfPTable anidado en un PdfPCell del PdfPTable principal y establecer el ancho del borde de esa celda en 0.

iTextSharp.text.pdf.PdfPTable table = new iTextSharp.text.pdf.PdfPTable(1); //<-- Main table table.TotalWidth = 540f; table.LockedWidth = true; float[] widths = new float[] { 540f }; table.SetWidths(widths); table.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right table.SpacingAfter = 10; PdfPTable bodyTable = new PdfPTable(1); //<--Nested Table bodyTable.TotalWidth = 540f; bodyTable.LockedWidth = true; float[] bodyWidths = new float[] { 540f }; bodyTable.SetWidths(bodyWidths); bodyTable.HorizontalAlignment = 0; bodyTable.SpacingAfter = 10; bodyTable.DefaultCell.Border = iTextSharp.text.Rectangle.NO_BORDER; var para1 = new Paragraph("This is a long paragraph", blackNormal); para1.SetLeading(3f, 1f); PdfPCell bodyCell1 = new PdfPCell(); bodyCell1.AddElement(para1); bodyCell1.Border = 0; bodyTable.AddCell(bodyCell1); iTextSharp.text.pdf.PdfPCell cellBody = new iTextSharp.text.pdf.PdfPCell(bodyTable); cellBody.BorderWidth = 0; //<--- This is what sets the border for the nested table table.AddCell(cellBody);

Me tomó mucho tiempo resolver esto. Funciona para mi ahora.


prueba este código

yourtable.DefaultCell.Border = 0;


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);

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);

Verifique este enlace por favor