Identificación de nombres de campos de formulario

Aspose.PDF for .NET proporciona la capacidad de crear, editar y llenar formularios PDF ya creados. El espacio de nombres Aspose.Pdf.Facades contiene la clase Form, que contiene la función llamada FillField y toma dos argumentos, es decir, el nombre del campo y el valor del campo. Por lo tanto, para llenar los campos del formulario, debes conocer el nombre exacto del campo del formulario.

Detalles de implementación

A menudo nos encontramos con un escenario en el que necesitamos llenar un formulario creado en alguna herramienta, es decir, Adobe Designer, y no estamos seguros sobre los nombres de los campos del formulario. Por lo tanto, para llenar los campos del formulario, primero necesitamos leer los nombres de todos los campos del formulario PDF. La clase Form proporciona la propiedad llamada FieldNames que devuelve todos los nombres de los campos y devuelve null si el PDF no contiene ningún campo. Sin embargo, al usar esta propiedad, obtenemos los nombres de todos los campos en el formulario PDF y podríamos no estar seguros de qué nombre corresponde a qué campo en el formulario.

Como solución a este problema, utilizaremos los atributos de apariencia de cada campo. La clase Form tiene una función llamada GetFieldFacade que devuelve atributos, incluyendo ubicación, color, estilo de borde, fuente, elemento de lista, etc. Para guardar estos valores, necesitamos usar la clase FormFieldFacade, que se utiliza para registrar los atributos visuales de los campos. Una vez que tengamos estos atributos, podemos agregar un campo de texto debajo de cada campo que mostraría el nombre del campo.

En el espacio de nombres Aspose.Pdf.Facades tenemos una clase llamada FormEditor que proporciona la capacidad de manipular formularios PDF. Abre un formulario PDF; agrega un campo de texto debajo de cada campo de formulario existente y guarda el formulario PDF con un nuevo nombre.

// 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");
        }
    }
}