Créer des documents à partir de zéro avec iTextSharp peut prendre beaucoup de temps. Vous pouvez également créer (ou réutiliser) des documents PDF "modèle" en leur ajoutant des champs de formulaire (si nécessaire). La méthode la plus simple consiste à utiliser une version complète d'Adobe Acrobat, mais vous pouvez également ajouter des champs de formulaire remplissables en utilisant uniquement iTextSharp. Par exemple, pour un prix ou un diplôme, vous trouvez, créez ou modifiez un PDF contenant tout le texte, les graphiques, les bordures de fantaisie et les polices du document, puis ajoutez un champ de formulaire pour le nom du destinataire. Vous pouvez ajouter d'autres champs pour les dates, les lignes de signature, le type de récompense, etc.
Ensuite, il est très facile d'utiliser iTextSharp depuis votre application Web pour remplir le formulaire, l'aplatir et le retransmettre à l'utilisateur.
À la fin de ce post est un exemple complet de code de gestionnaire ASHX.
Rappelez-vous également que iTextSharp (ou simplement iText) est également utile pour combiner des documents PDF ou des pages provenant de différents documents.Ainsi, pour un rapport annuel qui a un design fixe pour une page de couverture ou d'explication mais du contenu généré dynamiquement, vous pouvez ouvrir la page de couverture, ouvrir une page de modèle pour le rapport, générer le contenu dynamique sur une zone vide du modèle, ouvrir la page arrière "passe-partout", puis les combiner tous en un seul document pour revenir à l'utilisateur.
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;
}
}
}
}
Merci pour l'entrée! Etre capable d'utiliser iTextSharp pour "compléter" un modèle pdf où toute la mise en page délicate a été faite dans une application appropriée semble parfait. Si vous avez un exemple de code ou un lien vers une ressource qui couvre cette approche, je l'apprécierais beaucoup. – Console