texto pdfpcell horizontalalignment alinear c# itext cell vertical-alignment

c# - horizontalalignment - pdfpcell alignment



iTextsharp, PdfPCell.VerticalAlignment y PdfPCell.HorizontalAlignment (4)

Estoy tratando de averiguar cómo hacer que mi texto dentro de un PdfPCell se muestre en el medio. He probado muchas opciones diferentes, como:

myCell.VerticalAlignment = Element.ALIGN_MIDDLE; myCell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE; myCell.VerticalAlignment = Rectangle.ALIGN_MIDDLE;

Nada de eso funciona para mí. VerticalAlignment toma un int, así que traté de hacer un bucle, para ver si podía encontrar el número correcto, pero todo se alinea a la izquierda abajo ..

Document myDocument = new Document(PageSize.A4); PdfWriter myPdfWriter = PdfWriter.GetInstance(myDocument, new FileStream(strPDFFilePath, FileMode.Create)); myDocument.Open(); myDocument.NewPage(); PdfContentByte myPdfContentByte = myPdfWriter.DirectContent; PdfPCell myCell; Paragraph myParagraph; PdfPTable myTable = new PdfPTable(4); myTable.WidthPercentage = 100; myTable.SetWidths(new int[4] { 25, 25, 25, 25 }); myTable.DefaultCell.BorderWidth = 1; myTable.DefaultCell.BorderColor = BaseColor.RED; for (int i = -100; i < 100; i++) { myParagraph = new Paragraph(String.Format("Alignment: {0}", i)); myParagraph.Font.SetFamily("Verdana"); myParagraph.Font.SetColor(72, 72, 72); myParagraph.Font.Size = 11; myCell = new PdfPCell(); myCell.AddElement(myParagraph); myCell.HorizontalAlignment = i; myCell.VerticalAlignment = i; myTable.AddCell(myCell); } myDocument.Add(myTable); myDocument.Add(new Chunk(String.Empty)); myDocument.Close();


Creo que el problema básico que tiene es que está agregando texto a los objetos de Paragraph iTextSharp y luego intenta establecer la alineación de este texto utilizando el objeto PdfPCell que lo contiene. No estoy seguro de si la propiedad PdfPCell.VerticalAlignment es solo para un texto de PdfPCell , o si la alineación del objeto Paragraph dentro de PdfPCell no tiene ningún efecto que pueda ver en su prueba.

También está configurando myCell.HorizontalAlignment y myCell.VerticalAlignment al valor de índice en su bucle for . Creo que querías usar 1 hebra de i .

De todos modos, configurar las propiedades HorizontalAlignment y VerticalAlignment un PdfPCell funciona bien. A continuación se muestra un pequeño método que demuestra esto. Lo escribí muy libremente en base a lo que intentabas hacer; Si está lo suficientemente cerca de lo que estás tratando de hacer, quizás puedas usar esto como un punto de partida en tu proyecto.

private void TestTableCreation() { using (FileStream fs = new FileStream("TableTest.pdf", FileMode.Create)) { Document doc = new Document(PageSize.A4); PdfWriter.GetInstance(doc, fs); doc.Open(); PdfPTable table = new PdfPTable(4); for (int i = -100; i < 100; i++) { PdfPCell cell = new PdfPCell(new Phrase(String.Format("Alignment: {0}", i))); // Give our rows some height so we can see test vertical alignment. cell.FixedHeight = 30.0f; // ** Try it ** //cell.HorizontalAlignment = Element.ALIGN_LEFT; //cell.HorizontalAlignment = Element.ALIGN_CENTER; cell.HorizontalAlignment = Element.ALIGN_RIGHT; cell.VerticalAlignment = Element.ALIGN_TOP; //cell.VerticalAlignment = Element.ALIGN_MIDDLE; //cell.VerticalAlignment = Element.ALIGN_BOTTOM; table.AddCell(cell); } doc.Add(table); doc.Close(); } }



Traté de dar enteros directos y otras soluciones mencionadas aquí. Pero nada me funcionó. Una combinación de esto funcionó para mí en el método de composición.

void gettable() { using (FileStream fs = new FileStream(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Vedic-Chart-Life-Report.pdf"), FileMode.Create, FileAccess.Write, FileShare.Read)) { Document doc = new Document(PageSize.LETTER); PdfWriter writer = PdfWriter.GetInstance(doc, fs); doc.Open(); doc.NewPage(); BaseFont bf = BaseFont.CreateFont("C:/WINDOWS/Fonts/krdv010.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); Font f = new Font(bf, 16, Font.BOLD); PdfContentByte cb = writer.DirectContent; cb.MoveTo(0, doc.PageSize.Height - 20); cb.LineTo(doc.PageSize.Width, doc.PageSize.Height - 20); cb.Stroke(); cb.ClosePathStroke(); PdfPTable table = new PdfPTable(1); PdfPCell cell = new PdfPCell(new Phrase("eaxynks''k foospu", f)); // Give our rows some height so we can see test vertical alignment. cell.FixedHeight = 15f; cell.HorizontalAlignment = 1; cell.VerticalAlignment = Element.ALIGN_TOP; table.AddCell(cell); doc.Add(table); //cb.RoundRectangle(10f, 550f, 592f, 200f, 20f); //cb.Stroke(); //doc.Add(new Phrase("eaxynks''k foospu", f)); doc.Close(); } }


Utilice el código dado, espero que sea de gran ayuda para aquellos que quieran imprimir un texto en una celda en alineación media y superior con vacío Page_Load (objeto remitente, EventArgs e) {gettable (); }

cell.HorizontalAlignment = Element.ALIGN_CENTER; cell.VerticalAlignment = Element.ALIGN_MIDDLE;