Crear documentos desde cero con iTextSharp puede llevar mucho tiempo. Como alternativa, puede crear (o reutilizar) documentos de "plantilla" de PDF añadiéndoles campos de formulario (si es necesario). La forma más sencilla de hacerlo es con una versión completa de Adobe Acrobat, pero también puede agregar campos de formulario rellenables usando nada más que iTextSharp.
Por ejemplo, para un premio o diploma, puede encontrar, crear o modificar un PDF que contenga todo el texto, gráficos, bordes elegantes y fuentes para el documento, luego agregue un campo de formulario para el nombre del destinatario. Puede agregar otros campos para fechas, líneas de firma, tipo de premio, etc.
Luego es muy fácil usar iTextSharp desde su aplicación web para completar el formulario, aplanarlo y transmitirlo de nuevo al usuario.
Al final de esta publicación se encuentra un ejemplo del código del controlador ASHX completo.
Recuerde también que iTextSharp (o simplemente iText) también es útil para combinar documentos PDF o páginas de diferentes documentos.Entonces, para un informe anual que tenga un diseño fijo para una página de portada o explicación pero contenido generado dinámicamente, puede abrir la portada, abrir una página de plantilla para el informe, generar el contenido dinámico en un área en blanco de la plantilla, abrir la "página repetitiva" de la página posterior, luego combínelos todos en un solo documento para devolver al usuario.
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Text;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace iTextFormFillerDemo
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class DemoForm : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/pdf";
//This line will force the user to either open or save the
//file instead of it appearing on its own page - if you remove it,
//the page will appear in the browser in the same window.
context.Response.AddHeader("Content-Disposition",
"attachment; filename=DemoForm_Filled.pdf");
FillForm(context.Response.OutputStream);
context.Response.End();
}
// Fills the form and pushes it out the output stream.
private void FillForm(System.IO.Stream outputStream)
{
//Need to get the proper directory (dynamic path) for this file.
//This is a filesystem reference, not a web/URL reference...
//The PDF reader reads in the fillable form
PdfReader reader = new PdfReader("C:/DemoForm_Fillable.pdf");
//The PDF stamper creates an editable working copy of the form from the reader
//and associates it with the response output stream
PdfStamper stamper = new PdfStamper(reader, outputStream);
//The PDF has a single "form" consisting of AcroFields
//Note that this is shorthand for writing out
//stamper.AcroFields.SetField(...) for each set
AcroFields form = stamper.AcroFields;
//Set each of the text fields this way: SetField(name, value)
form.SetField("txtFieldName", "Field Value");
form.SetField("txtAnotherFieldName", "AnotherField Value");
//Set the radio button fields using the names and string values:
form.SetField("rbRadioButtons", "Yes"); //or "No"
//Form flattening makes the form non-editable and saveable with the
//form data filled in
stamper.FormFlattening = true;
//Closing the stamper flushes it out the output stream
stamper.Close();
//We're done reading the file
reader.Close();
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
Gracias por la entrada! Ser capaz de usar iTextSharp para "completar" una plantilla en pdf donde todo el diseño complicado se ha hecho en una aplicación adecuada suena perfecto. Si tiene algún código de muestra o un enlace a un recurso que cubra este enfoque, lo agradecería mucho. – Console