Travailler avec des formulaires XFA

La classe Form fournit la capacité de traiter des AcroForms statiques 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(..). Au lieu de cela, utilisez 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 des champs dans un formulaire XFA.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void FillXFAFields()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Forms();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "FillXFAFields.pdf"))
    {
        // Get names of XFA form fields
        var names = document.Form.XFA.FieldNames;

        // Set field values
        if (names.Length > 0)
        {
            document.Form.XFA[names[0]] = "Field 0";
        }
        if (names.Length > 1)
        {
            document.Form.XFA[names[1]] = "Field 1";
        }

        // Save PDF document
        document.Save(dataDir + "FilledXfa_out.pdf");
    }
}

Convertir XFA en Acroform

Les formulaires dynamiques sont basés sur une spécification XML connue sous le nom de XFA, l’« Architecture des formulaires XML ». Les informations concernant le formulaire (en ce qui concerne un PDF) sont très vagues – elles spécifient que des champs existent, avec des propriétés et des événements JavaScript, mais ne spécifient aucun rendu.

Actuellement, le 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.
  • Formulaires d’Architecture XML d’Adobe (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 seulement référencée.)

Nous ne pouvons pas extraire ou 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 essayant d’afficher ou de rendre le formulaire XFA. Aspose.PDF dispose d’une fonctionnalité qui permet aux développeurs de convertir des formulaires XFA en AcroForms standard.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertDynamicXFAToAcroForm()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Forms();

    // Load dynamic XFA form
    using (var document = new Aspose.Pdf.Document(dataDir + "DynamicXFAToAcroForm.pdf"))
    {
        // Set the form fields type as standard AcroForm
        document.Form.Type = Aspose.Pdf.Forms.FormType.Standard;

        // Save PDF document
        document.Save(dataDir + "StandardAcroForm_out.pdf");
    }
}

Obtenir les propriétés des champs XFA

Pour accéder aux propriétés des champs, utilisez d’abord Document.Form.XFA.Template pour accéder au modèle de champ. Le code suivant montre les étapes pour obtenir les coordonnées X et Y d’un champ de formulaire XFA.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void GetXFAProperties()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Forms();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "GetXFAProperties.pdf"))
    {
        // Get names of XFA form fields
        var names = document.Form.XFA.FieldNames;

        // Set field values
        if (names.Length > 0)
        {
            document.Form.XFA[names[0]] = "Field 0";
        }
        if (names.Length > 1)
        {
            document.Form.XFA[names[1]] = "Field 1";
        }

        // Get field position
        if (names.Length > 0)
        {
            Console.WriteLine(document.Form.XFA.GetFieldTemplate(names[0]).Attributes["x"].Value);
            Console.WriteLine(document.Form.XFA.GetFieldTemplate(names[0]).Attributes["y"].Value);
        }

        // Save PDF document
        document.Save(dataDir + "FilledXfa_out.pdf");
    }
}