Rellenar un formulario creado con Adobe con iTextSharp desde ASP.NET
Otra vez de vuelta con iTextsharp y es que esta libería no deja de sorprenderme. Esta vez necesitaba rellenar un formulario creado con Adobe Acrobat con los datos de un formulario ASP.NET y me puse manos a la obra para crear algo que automatizase esta tarea. Para automatizar esta tarea tenemos que tener en cuenta lo siguiente:
Los campos Textfield del formulario Adobe y los campos TextBox del formulario ASP.NET deben llamarse de igual manera
Es decir, si en Adobe el campo se llama txtValor en ASP.NET será txtValor.
Una vez dicho esto os presento a la función que realiza este proceso:
private void FillPDF(string formName, string pathPDF)
{
MemoryStream _MemoryStream = new MemoryStream();
PdfReader reader = new PdfReader(pathPDF);
PdfStamper stamper = new PdfStamper(reader, _MemoryStream);
foreach (Control c in this.FindControl(formName).Controls)
{
if ((c is TextBox))
{
TextBox txt = (TextBox)c;
foreach (string name in stamper.AcroFields.Fields.Keys)
{
if (name.EndsWith(c.ID + "[0]"))
{
stamper.AcroFields.SetField(name, txt.Text);
}
}
}
}
stamper.FormFlattening = true;
stamper.Close();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;filename=recibo.pdf");
HttpContext.Current.Response.BinaryWrite(_MemoryStream.ToArray());
HttpContext.Current.Response.End();
}
La función basicamento lo que hace es recorrer los controles del formulario ASP.NET y sólo se queda con los TextBox, busca su equivalente en el formulario PDF y cuando lo encuentra establece el valor.
Salu2 y espero que os resulte útil.