Travailler avec les formulaires XFA
La classe Form fournit la capacité de traiter avec l’AcroForm statique et vous pouvez obtenir une instance de champ particulière en utilisant la méthode GetFieldFacade(..) de la classe Form. Cependant, les champs XFA ne peuvent pas être accessibles via la méthode Form.GetFieldFacade(..). Utilisez plutôt Document.Form.XFA pour obtenir/définir les valeurs des champs et manipuler le modèle de champ XFA (définir les propriétés des champs).
Le code suivant fonctionne également avec la bibliothèque Aspose.PDF.Drawing.
Remplir les champs XFA
Le code suivant vous montre comment remplir les champs dans un formulaire XFA. Le code suivant montre comment remplir les champs dans un formulaire XFA.
// Pour des exemples complets et des fichiers de données, veuillez visiter https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Le chemin vers le répertoire des documents.
string dataDir = RunExamples.GetDataDir_AsposePdf_Forms();
// Charger le formulaire XFA
Document doc = new Document(dataDir + "FillXFAFields.pdf");
// Obtenir les noms des champs du formulaire XFA
string[] names = doc.Form.XFA.FieldNames;
// Définir les valeurs des champs
doc.Form.XFA[names[0]] = "Champ 0";
doc.Form.XFA[names[1]] = "Champ 1";
dataDir = dataDir + "Filled_XFA_out.pdf";
// Sauvegarder le document mis à jour
doc.Save(dataDir);
Convertir XFA en Acroform
Les formulaires dynamiques sont basés sur une spécification XML connue sous le nom de XFA, l’“Architecture de formulaires XML”. Les formulaires dynamiques sont basés sur une spécification XML connue sous le nom de XFA, l’« Architecture de formulaires XML ».
Actuellement, PDF prend en charge deux méthodes différentes pour intégrer des données et des formulaires PDF :
- AcroForms (également connus sous le nom de formulaires Acrobat), introduits et inclus dans la spécification du format PDF 1.2.
- Les formulaires Adobe XML Forms Architecture (XFA), introduits dans la spécification du format PDF 1.5 comme une fonctionnalité optionnelle (La spécification XFA n’est pas incluse dans la spécification PDF, elle est uniquement référencée.)
Nous ne pouvons ni extraire ni manipuler les pages des formulaires XFA, car le contenu du formulaire est généré à l’exécution (lors de la visualisation du formulaire XFA) au sein de l’application tentant d’afficher ou de rendre le formulaire XFA. Aspose.PDF dispose d’une fonctionnalité qui permet aux développeurs de convertir les formulaires XFA en AcroForms standards.
// Pour des exemples complets et des fichiers de données, veuillez aller sur https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Le chemin vers le répertoire des documents.
string dataDir = RunExamples.GetDataDir_AsposePdf_Forms();
// Charger le formulaire XFA dynamique
Document document = new Document(dataDir + "DynamicXFAToAcroForm.pdf");
// Définir le type des champs de formulaire comme AcroForm standard
document.Form.Type = FormType.Standard;
dataDir = dataDir + "Standard_AcroForm_out.pdf";
// Sauvegarder le PDF résultant
document.Save(dataDir);
Obtenir les propriétés des champs XFA
Pour accéder aux propriétés des champs, utilisez d’abord Document.Form.XFA.Teamplate pour accéder au modèle de champ. Le fragment de code suivant montre les étapes pour obtenir les coordonnées X et Y d’un champ de formulaire XFA.
// Pour des exemples complets et des fichiers de données, veuillez visiter https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Le chemin vers le répertoire des documents.
string dataDir = RunExamples.GetDataDir_AsposePdf_Forms();
// Charger le formulaire XFA
Document doc = new Document(dataDir + "GetXFAProperties.pdf");
string[] names = doc.Form.XFA.FieldNames;
// Définir les valeurs des champs
doc.Form.XFA[names[0]] = "Champ 0";
doc.Form.XFA[names[1]] = "Champ 1";
// Obtenir la position du champ
Console.WriteLine(doc.Form.XFA.GetFieldTemplate(names[0]).Attributes["x"].Value);
// Obtenir la position du champ
Console.WriteLine(doc.Form.XFA.GetFieldTemplate(names[0]).Attributes["y"].Value);
dataDir = dataDir + "Filled_XFA_out.pdf";
// Sauvegarder le document mis à jour
doc.Save(dataDir);