Identification des noms des champs de formulaire

Aspose.PDF for .NET fournit la capacité de créer, modifier et remplir des formulaires PDF déjà créés. Le namespace Aspose.Pdf.Facades contient la classe Form, qui contient la fonction nommée FillField et qui prend deux arguments, à savoir le nom du champ et la valeur du champ. Donc, pour remplir les champs du formulaire, vous devez connaître le nom exact du champ de formulaire.

Détails de mise en œuvre

Nous rencontrons souvent un scénario où nous devons remplir un formulaire créé dans un outil, c’est-à-dire Adobe Designer, et nous ne sommes pas sûrs des noms des champs de formulaire. Donc, pour remplir les champs du formulaire, nous devons d’abord lire les noms de tous les champs de formulaire PDF. La classe Form fournit la propriété nommée FieldNames qui retourne tous les noms des champs et retourne null si le PDF ne contient aucun champ. Cependant, en utilisant cette propriété, nous obtenons les noms de tous les champs dans le formulaire PDF et nous ne pouvons pas être certains de quel nom correspond à quel champ sur le formulaire.

Comme solution à ce problème, nous allons utiliser les attributs d’apparence de chaque champ. La classe Form a une fonction nommée GetFieldFacade qui retourne des attributs, y compris la localisation, la couleur, le style de bordure, la police, les éléments de liste, etc. Pour enregistrer ces valeurs, nous devons utiliser la classe FormFieldFacade, qui est utilisée pour enregistrer les attributs visuels des champs. Une fois que nous avons ces attributs, nous pouvons ajouter un champ de texte sous chaque champ qui afficherait le nom du champ.

Dans le namespace Aspose.Pdf.Facades, nous avons une classe nommée FormEditor qui fournit la capacité de manipuler des formulaires PDF. Ouvrez un formulaire PDF ; ajoutez un champ de texte sous chaque champ de formulaire existant et enregistrez le formulaire PDF avec un nouveau nom.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void IdentifyFormFieldsNames()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdfFacades_TechnicalArticles();
    // First a input pdf file should be assigned
    var form = new Aspose.Pdf.Facades.Form(dataDir + "FilledForm.pdf");
    // Get all field names
    var allfields = form.FieldNames;
    // Create an array which will hold the location coordinates of Form fields
    var box = new System.Drawing.Rectangle[allfields.Length];
    for (int i = 0; i < allfields.Length; i++)
    {
        // Get the appearance attributes of each field, consequtively
        var facade = form.GetFieldFacade(allfields[i]);
        // Box in FormFieldFacade class holds field's location
        box[i] = facade.Box;
    }
    // Save PDF document
    form.Save(dataDir + "IdentifyFormFields_1_out.pdf");

    // Create PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "FilledForm - 2.pdf"))
    {
        // Now we need to add a textfield just upon the original one
        using (var editor = new Aspose.Pdf.Facades.FormEditor(document))
        {
            for (int i = 0; i < allfields.Length; i++)
            {
                // Add text field beneath every existing form field
                editor.AddField(Aspose.Pdf.Facades.FieldType.Text, 
                "TextField" + i, allfields[i], 1, 
                box[i].Left, box[i].Top, box[i].Left + 50, box[i].Top + 10);
            }
            // Save PDF document
            editor.Save(dataDir + "IdentifyFormFields_out.pdf");
        }
    }
}