Estoy usando iTextSharp para crear un PDF, ¿cómo puedo agregar un textField en PdfPCell?ITextSharp - campo de texto en PdfPCell
Respuesta
No agregaría realmente un 'campo de texto' a un PdfPCell, crearía un PdfPCell y agregaría texto (u otras cosas) a eso.
mikesdotnetting.com podría tener el clearest example y siempre está el iTextSharp tutorial.
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...
adapté el código de this post.
Editar:
Aquí es una aplicación de consola de trabajo completo que pone un cuadro de texto en una celda de la 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
Nada ... después de esta construcción myTable.AddCell (tbCell); comprobé con la depuración mi objeto tbCell, pero veo que el tamaño del rectángulo es 0x0 .. ¿es normal? – gigiot
He actualizado mi respuesta. – DaveB
Gracias Dave, ¡¡¡me has enamorado !!! Probé tu código y funciona perfectamente. Ahora intento fusionar 3 archivos PDF, pero después de fusionar todos los TextField desaparecen ... ¿hay una propiedad del documento que debo planear para evitar esto? – gigiot
obras respuesta de DaveB, pero el problema es que usted tiene que saber las coordenadas para colocar en 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.
En primer lugar crear 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 el código donde se crea la tabla que va a utilizar el evento como este:
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.
¡Oh, sí! Esto es genialidad personificada, err ... codificada. –
¿Qué sucede si quiere crear casillas de verificación? ¿Cómo debe modificarse el código anterior para ese evento (sin juego de palabras)? –
@ B.ClayShannon agregaría un RadioCheckField en lugar de un TextField.El rectángulo que se pasa al constructor de RadioCheckField se debe hacer usando el rectángulo pasado al CellLayout ajustado con el desplazamiento y las dimensiones de la casilla de verificación que desee. –
- 1. HorizontalAlignment en la imagen no funciona en PdfPCell en itextsharp
- 2. Redimensionamiento automático de la imagen en PdfPCell con iTextSharp
- 3. extracción de texto Itextsharp
- 4. PdfPTable como encabezado en iTextSharp
- 5. iTextsharp, PdfPCell.VerticalAlignment y PdfPCell.HorizontalAlignment
- 6. iTextsharp landscape document
- 7. ITextSharp insertar texto en un pdf existente
- 8. iTextSharp para imprimir un gridview
- 9. ¿Cómo justifica el texto con iTextSharp?
- 10. iTextSharp: SplitLate/SplitRows?
- 11. ¿Cómo doblo las esquinas de un borde de tabla iTextSharp?
- 12. Encabezado, pie de página y tablas grandes con iTextSharp
- 13. iTextSharp: Imagen de mosaico en la celda de tabla
- 14. ITextSharp: Establecer color de borde de celda de tabla
- 15. Como para subrayar un texto usando PdfContentByte en iTextSharp
- 16. Código de barras con texto debajo de usar ItextSharp
- 17. Cómo centrar Alinear elemento de plantilla en PdfPCell
- 18. texto claro onclick - campo de texto
- 19. Establecer diferentes partes de un campo de formulario para tener diferentes tipos de letra utilizando iTextSharp
- 20. Establecer metadatos en iTextSharp
- 21. Cómo borrar campo de texto en el foco del campo de texto
- 22. Implementar texto de búsqueda Campo en jTable
- 23. texto predeterminado en el campo de entrada
- 24. Validar campo de texto numérico en jQuery
- 25. Establecer texto para un campo de texto en UIWebView
- 26. Cambiar el color del texto en el campo de texto
- 27. Unidades iTextSharp
- 28. Cómo hacer que la tabla no la rotura usando iTextSharp
- 29. campo de cadena Apache Solr o campo de texto?
- 30. ejemplos de uso iTextSharp PdfCopy
Conozco este enlace, pero ¿está seguro de que no puedo agregar un TextField en PdfPCell? Estoy mirando este enlace http://old.nabble.com/PdfPTable-TextField-in-PdfPCell:-questions-td17984107.html, pero no entiendo si debo hacer. Necesito agregar un TextField en PdfPCell, porque después de la creación del pdf necesito insertar una información en este campo. – gigiot