cómo establecer el ancho para PdfPCell en ItextSharp

Quiero establecer el ancho para PdfpCell en la tabla, quiero diseñar esto

introduzca la descripción de la imagen aquí
Yo escribo este código

PdfPCell cell; PdfGrid tableHeader; PdfGrid tmpTable; PdfGrid table = new PdfGrid(numColumns: 1) { WidthPercentage = 100, RunDirection = PdfWriter.RUN_DIRECTION_LTR, ExtendLastRow = false }; string imagepath2 = HttpRuntime.AppDomainAppPath + "Header.JPG"; cell = new PdfPCell() { Border = 0, RunDirection = PdfWriter.RUN_DIRECTION_RTL }; cell.Image = iTextSharp.text.Image.GetInstance(imagepath2); table.AddCell(cell); tableHeader = new PdfGrid(numColumns: 10); tableHeader.RunDirection = PdfWriter.RUN_DIRECTION_LTR; tmpTable = new PdfGrid(numColumns: 1); tmpTable.TotalWidth = 10f; tmpTable.LockedWidth = true; cell = new PdfPCell() {Rotation =-90,VerticalAlignment =Element.ALIGN_MIDDLE, HorizontalAlignment =Element.ALIGN_CENTER, BorderWidth = 1}; cell.Phrase = fontSelector.Process("SER. No"); tmpTable.AddCell(cell); cell = new PdfPCell(tmpTable) { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; tableHeader.AddCell(cell); //////////////////////////////////////////////////////////// tmpTable = new PdfGrid(numColumns: 1); cell = new PdfPCell() { Border = 0, BorderWidthBottom = 1,VerticalAlignment =Element.ALIGN_MIDDLE, HorizontalAlignment =Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("TYPE OF SHIPPING"); // tmpTable.AddCell(cell); cell = new PdfPCell() { Border = 0, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("AWB / BL NO."); tmpTable.AddCell(cell); cell = new PdfPCell(tmpTable) { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; tableHeader.AddCell(cell); /////////////////////////////////////////////////////////////// tmpTable = new PdfGrid(numColumns: 1); cell = new PdfPCell() { Border = 0, BorderWidthBottom = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("ORDER NO."); tmpTable.AddCell(cell); cell = new PdfPCell() { Border = 0, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("COMPLEX NAME"); tmpTable.AddCell(cell); cell = new PdfPCell(tmpTable) { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; tableHeader.AddCell(cell); /////////////////////////////////////////////////////////////// tmpTable = new PdfGrid(numColumns: 1); cell = new PdfPCell() { Border = 0, BorderWidthBottom = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("QTY."); tmpTable.AddCell(cell); cell = new PdfPCell() { Border = 0, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("GW Kgs."); tmpTable.AddCell(cell); cell = new PdfPCell(tmpTable) { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; tableHeader.AddCell(cell); /////////////////////////////////////////////////////////////// tmpTable = new PdfGrid(numColumns: 1); cell = new PdfPCell() { Border = 0, BorderWidthBottom = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("DISCHARGE PPORT"); tmpTable.AddCell(cell); cell = new PdfPCell() { Border = 0, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("DESTINATON"); tmpTable.AddCell(cell); cell = new PdfPCell(tmpTable) { BorderWidth = 1 }; tableHeader.AddCell(cell); /////////////////////////////////////////////////////////////// cell = new PdfPCell() { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("DESCRIPTION OF GOODS"); tableHeader.AddCell(cell); ///////////////////////////////////////////////////////////// tmpTable = new PdfGrid(numColumns: 1); cell = new PdfPCell() { Border = 0, BorderWidthBottom = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("LINE DOC. RECI. DATE"); tmpTable.AddCell(cell); cell = new PdfPCell(new Phrase("")) { Border = 0, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("OWNER DOC. RECI. DATE"); tmpTable.AddCell(cell); cell = new PdfPCell(tmpTable) { BorderWidth = 1 }; tableHeader.AddCell(cell); /////////////////////////////////////////////////////////////// cell = new PdfPCell() { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("CLEARANCE DATE"); tableHeader.AddCell(cell); /////////////////////////////////////////////////////////// cell = new PdfPCell() { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("CUSTOM PERMIT NO."); tableHeader.AddCell(cell); /////////////////////////////////////////////////////////// cell = new PdfPCell() { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; cell.Phrase = fontSelector.Process("DISPATCH DATE"); tableHeader.AddCell(cell); /////////////////////////////////////////////////////////// cell = new PdfPCell(tableHeader) { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; table.AddCell(cell); doc.Add(table); /////////////////////////////////////////////////////////// doc.Close(); 

pero este código crea esta tabla introduzca la descripción de la imagen aquí

Quiero cambiar el ancho de la columna SerNo ancho, pero

Pero no sé cómo cambiar el tamaño del ancho de la celda, por favor, ayúdame.

¿Por qué no usar un objeto PdfPTable para esto? Cree una tabla de ancho fijo y use una matriz flotante para establecer los anchos de las columnas

 PdfPTable table = new PdfPTable(10); table.HorizontalAlignment = 0; table.TotalWidth = 500f; table.LockedWidth = true; float[] widths = new float[] { 20f, 60f, 60f, 30f, 50f, 80f, 50f, 50f, 50f, 50f }; table.SetWidths(widths); addCell(table, "SER.\nNO.", 2); addCell(table, "TYPE OF SHIPPING", 1); addCell(table, "ORDER NO.", 1); addCell(table, "QTY.", 1); addCell(table, "DISCHARGE PPORT", 1); addCell(table, "DESCRIPTION OF GOODS", 2); addCell(table, "LINE DOC. RECL DATE", 1); addCell(table, "CLEARANCE DATE", 2); addCell(table, "CUSTOM PERMIT NO.", 2); addCell(table, "DISPATCH DATE", 2); addCell(table, "AWB/BL NO.", 1); addCell(table, "COMPLEX NAME", 1); addCell(table, "GW Kgs.", 1); addCell(table, "DESTINATION", 1); addCell(table, "OWNER DOC. RECL DATE", 1); .... private static void addCell(PdfPTable table, string text, int rowspan) { BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false); iTextSharp.text.Font times = new iTextSharp.text.Font(bfTimes, 6, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.BLACK); PdfPCell cell = new PdfPCell(new Phrase(text, times)); cell.Rowspan = rowspan; cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER; cell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE; table.AddCell(cell); } 

Echa un vistazo a este tutorial también …

Prueba algo como esto

 PdfPCell cell; PdfPTable tableHeader; PdfPTable tmpTable; PdfPTable table = new PdfPTable(10) { WidthPercentage = 100, RunDirection = PdfWriter.RUN_DIRECTION_LTR, ExtendLastRow = false }; // row 1 / cell 1 (merge) PdfPCell _c = new PdfPCell(new Phrase("SER. No")) { Rotation = -90, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER, BorderWidth = 1 }; _c.Rowspan = 2; table.AddCell(_c); // row 1 / cell 2 _c = new PdfPCell(new Phrase("TYPE OF SHIPPING")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; table.AddCell(_c); // row 1 / cell 3 _c = new PdfPCell(new Phrase("ORDER NO.")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; table.AddCell(_c); // row 1 / cell 4 _c = new PdfPCell(new Phrase("QTY.")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; table.AddCell(_c); // row 1 / cell 5 _c = new PdfPCell(new Phrase("DISCHARGE PPORT")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; table.AddCell(_c); // row 1 / cell 6 (merge) _c = new PdfPCell(new Phrase("DESCRIPTION OF GOODS")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; _c.Rowspan = 2; table.AddCell(_c); // row 1 / cell 7 _c = new PdfPCell(new Phrase("LINE DOC. RECI. DATE")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; table.AddCell(_c); // row 1 / cell 8 (merge) _c = new PdfPCell(new Phrase("OWNER DOC. RECI. DATE")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; _c.Rowspan = 2; table.AddCell(_c); // row 1 / cell 9 (merge) _c = new PdfPCell(new Phrase("CLEARANCE DATE")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; _c.Rowspan = 2; table.AddCell(_c); // row 1 / cell 10 (merge) _c = new PdfPCell(new Phrase("CUSTOM PERMIT NO.")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; _c.Rowspan = 2; table.AddCell(_c); // row 2 / cell 2 _c = new PdfPCell(new Phrase("AWB / BL NO.")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; table.AddCell(_c); // row 2 / cell 3 _c = new PdfPCell(new Phrase("COMPLEX NAME")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; table.AddCell(_c); // row 2 / cell 4 _c = new PdfPCell(new Phrase("GW Kgs.")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; table.AddCell(_c); // row 2 / cell 5 _c = new PdfPCell(new Phrase("DESTINATON")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; table.AddCell(_c); // row 2 / cell 7 _c = new PdfPCell(new Phrase("OWNER DOC. RECI. DATE")) { VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER }; table.AddCell(_c); _doc.Add(table); /////////////////////////////////////////////////////////// _doc.Close(); 

Es posible que deba volver a ajustar un poco los anchos y bordes, pero eso es algo que debe hacer.

Prueba este código creo que es más óptimo.

HeaderRow se usa para repetir el encabezado de la tabla para cada nueva página automáticamente

  BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false); iTextSharp.text.Font times = new iTextSharp.text.Font(bfTimes, 6, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.BLACK); PdfPTable table = new PdfPTable(10) { HorizontalAlignment = Element.ALIGN_CENTER, WidthPercentage = 100, HeaderRows = 2 }; table.SetWidths(new float[] { 2f, 6f, 6f, 3f, 5f, 8f, 5f, 5f, 5f, 5f }); table.AddCell(new PdfPCell(new Phrase("SER.\nNO.", times)) { Rowspan = 2, GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("TYPE OF SHIPPING", times)) { GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("ORDER NO.", times)) { GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("QTY.", times)) { GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("DISCHARGE PPORT", times)) { GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("DESCRIPTION OF GOODS", times)) { Rowspan = 2, GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("LINE DOC. RECL DATE", times)) { GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("CLEARANCE DATE", times)) { Rowspan = 2, GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("CUSTOM PERMIT NO.", times)) { Rowspan = 2, GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("DISPATCH DATE", times)) { Rowspan = 2, GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("AWB/BL NO.", times)) { GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("COMPLEX NAME", times)) { GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("GW Kgs.", times)) { GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("DESTINATION", times)) { GrayFill = 0.95f }); table.AddCell(new PdfPCell(new Phrase("OWNER DOC. RECL DATE", times)) { GrayFill = 0.95f }); 

aca definis los anchos

  float[] anchoDeColumnas= new float[] {10f, 20f, 30f, 10f}; 

aca se inserta a la tabla que tiene las columnas

 table.setWidths(anchoDeColumnas);