Identificando nomes de campos de formulário

Aspose.PDF for .NET fornece a capacidade de criar, editar e preencher formulários PDF já criados. O namespace Aspose.Pdf.Facades contém a classe Form, que contém a função chamada FillField e aceita dois argumentos, ou seja, nome do campo e valor do campo. Portanto, para preencher os campos do formulário, você deve estar ciente do nome exato do campo do formulário.

Detalhes da implementação

Frequentemente nos deparamos com um cenário em que precisamos preencher um formulário criado em alguma ferramenta, ou seja, Adobe Designer, e não temos certeza sobre os nomes dos campos do formulário. Portanto, para preencher os campos do formulário, primeiro precisamos ler os nomes de todos os campos do formulário PDF. A classe Form fornece a propriedade chamada FieldNames que retorna todos os nomes dos campos e retorna nulo se o PDF não contiver nenhum campo. No entanto, ao usar essa propriedade, obtemos os nomes de todos os campos no formulário PDF e podemos não ter certeza de qual nome corresponde a qual campo no formulário.

Como solução para esse problema, usaremos os atributos de aparência de cada campo. A classe Form possui uma função chamada GetFieldFacade que retorna atributos, incluindo localização, cor, estilo de borda, fonte, item de lista e assim por diante. Para salvar esses valores, precisamos usar a classe FormFieldFacade, que é usada para registrar atributos visuais dos campos. Uma vez que temos esses atributos, podemos adicionar um campo de texto abaixo de cada campo que exibirá o nome do campo.

No namespace Aspose.Pdf.Facades temos uma classe chamada FormEditor que fornece a capacidade de manipular formulários PDF. Abra um formulário PDF; adicione um campo de texto abaixo de cada campo de formulário existente e salve o formulário PDF com um novo nome.

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