Trabalhando com Formulários XFA

A classe Form fornece a capacidade de lidar com AcroForms estáticos e você pode obter uma instância de campo particular usando o método GetFieldFacade(..) da classe Form. No entanto, os campos XFA não podem ser acessados via o método Form.GetFieldFacade(..). Em vez disso, use Document.Form.XFA para obter definir valores de campo e manipular o template do campo XFA (definir propriedades do campo).

O seguinte trecho de código também funciona com a biblioteca Aspose.PDF.Drawing.

Preencher campos XFA

O seguinte trecho de código mostra como preencher campos em um formulário 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");
    }
}

Converter XFA para Acroform

Formulários dinâmicos são baseados em uma especificação XML conhecida como XFA, a “Arquitetura de Formulários XML”. As informações sobre o formulário (no que diz respeito a um PDF) são muito vagas – especifica que os campos existem, com propriedades e eventos JavaScript, mas não especifica nenhuma renderização.

Atualmente, o PDF suporta dois métodos diferentes para integrar dados e formulários PDF:

  • AcroForms (também conhecidos como formulários Acrobat), introduzidos e incluídos na especificação do formato PDF 1.2.
  • Formulários da Arquitetura de Formulários XML da Adobe (XFA), introduzidos na especificação do formato PDF 1.5 como um recurso opcional (A especificação XFA não está incluída na especificação PDF, ela é apenas referenciada.)

Não podemos extrair ou manipular páginas de Formulários XFA, porque o conteúdo do formulário é gerado em tempo de execução (durante a visualização do formulário XFA) dentro da aplicação que tenta exibir ou renderizar o formulário XFA. O Aspose.PDF possui um recurso que permite que os desenvolvedores convertam formulários XFA em AcroForms padrão.

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

Obter propriedades do campo XFA

Para acessar as propriedades do campo, primeiro use Document.Form.XFA.Template para acessar o template do campo. O seguinte trecho de código mostra os passos para obter as coordenadas X e Y de um campo de formulário 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");
    }
}