pie pdfpcell pagina pagesize headerfooter example encabezado align pdf itextsharp textfield

pagina - ITextSharp-campo de texto en PdfPCell



itextsharp pdfpcell align center (3)

Estoy usando iTextSharp para crear un PDF, ¿cómo puedo agregar un textField en PdfPCell?


Dale una oportunidad. Esto funciona para mi.

Document doc = new Document(PageSize.LETTER, 18f, 18f, 18f, 18f); MemoryStream ms = new MemoryStream(); PdfWriter writer = PdfWriter.GetInstance(doc, ms); doc.Open(); // Create your PDFPTable here.... TextField tf = new TextField(writer, new iTextSharp.text.Rectangle(67, 585, 140, 800), "cellTextBox"); PdfPCell tbCell = new PdfPCell(); iTextSharp.text.pdf.events.FieldPositioningEvents events = new iTextSharp.text.pdf.events.FieldPositioningEvents(writer, tf.GetTextField()); tbCell.CellEvent = events; myTable.AddCell(tbCell); // More code...

Adapte este código de esta publicación.

Editar:

Aquí hay una aplicación de consola que funciona y que coloca un TextBox en una celda de tabla. Traté de mantener el código al mínimo.

using System; using System.IO; using iTextSharp.text; using iTextSharp.text.pdf; namespace iTextSharpTextBoxInTableCell { class Program { static void Main(string[] args) { // Create a PDF with a TextBox in a table cell BaseFont bfHelvetica = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, false); Font helvetica12 = new Font(bfHelvetica, 12, Font.NORMAL, Color.BLACK); Document doc = new Document(PageSize.LETTER, 18f, 18f, 18f, 18f); FileStream fs = new FileStream("TextBoxInTableCell.pdf", FileMode.Create); PdfWriter writer = PdfWriter.GetInstance(doc, fs); doc.Open(); PdfPTable myTable = new PdfPTable(1); myTable.TotalWidth = 568f; myTable.LockedWidth = true; myTable.HorizontalAlignment = 0; TextField tf = new TextField(writer, new iTextSharp.text.Rectangle(67, 585, 140, 800), "cellTextBox"); PdfPCell tbCell = new PdfPCell(new Phrase(" ", helvetica12)); iTextSharp.text.pdf.events.FieldPositioningEvents events = new iTextSharp.text.pdf.events.FieldPositioningEvents(writer, tf.GetTextField()); tbCell.CellEvent = events; myTable.AddCell(tbCell); doc.Add(myTable); doc.Close(); fs.Close(); Console.WriteLine("End Of Program Execution"); Console.ReadLine(); } } }

Bon oportunidad



La respuesta de DaveB funciona, pero el problema es que debes saber las coordenadas para ubicar el campo de texto, el (67, 585, 140, 800). El método más normal de hacer esto es crear la celda de la tabla y agregar un evento personalizado a la celda. Cuando la generación de la tabla llama al evento celllayout, le pasa las dimensiones y coordenadas de la celda que puede usar para colocar y dimensionar el campo de texto.

Primero crea esta llamada, que es el evento personalizado

public class CustomCellLayout : IPdfPCellEvent { private string fieldname; public CustomCellLayout(string name) { fieldname = name; } public void CellLayout(PdfPCell cell, Rectangle rectangle, PdfContentByte[] canvases) { PdfWriter writer = canvases[0].PdfWriter; // rectangle holds the dimensions and coordinates of the cell that was created // which you can then use to place the textfield in the correct location // and optionally fit the textfield to the size of the cell float textboxheight = 12f; // modify the rectangle so the textfield isn''t the full height of the cell // in case the cell ends up being tall due to the table layout Rectangle rect = rectangle; rect.Bottom = rect.Top - textboxheight; TextField text = new TextField(writer, rect, fieldname); // set and options, font etc here PdfFormField field = text.GetTextField(); writer.AddAnnotation(field); } }

Luego, en su código donde crea la tabla, usará el evento de esta manera:

PdfPCell cell = new PdfPCell() { CellEvent = new CustomCellLayout(fieldname) // set borders, or other cell options here };

Si desea diferentes tipos de campos de texto puede hacer eventos personalizados adicionales, o puede agregar propiedades adicionales a la clase CustomCellLayout como "fontsize" o "multiline" que establecería con el constructor de la clase, y luego buscar en el Código de CellLayout para ajustar las propiedades del campo de texto.