Работа с формами XFA

Класс Form предоставляет возможность работать со статическими AcroForm, и вы можете получить конкретный экземпляр поля, используя метод Form class’ GetFieldFacade(..). Однако доступ к полям XFA невозможен через метод Form.GetFieldFacade(..). Вместо этого используйте Document.Form.XFA для получения/установки значений полей и управления шаблоном полей XFA (установка свойств полей).

Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.

Заполнение полей XFA

В следующем фрагменте кода показано, как заполнять поля в форме 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");
    }
}

Преобразование из XFA в Acroform

Динамические формы основаны на XML-спецификации, известной как XFA (Архитектура XML-форм). Информация о форме (что касается PDF) очень расплывчата — она указывает на то, что поля существуют со свойствами и событиями JavaScript, но не определяет никакого рендеринга.

В настоящее время PDF поддерживает два различных метода интеграции данных и PDF-форм:

  • AcroForms (также известные как формы Acrobat), представленные и включённые в спецификацию формата PDF 1.2.
  • Формы Adobe XML Forms Architecture (XFA), представленные в спецификации формата PDF 1.5 в качестве дополнительной функции (спецификация XFA не включена в спецификацию PDF, на неё только ссылаются).

Мы не можем извлекать или управлять страницами форм XFA, поскольку содержимое формы генерируется во время выполнения (во время просмотра формы XFA) в приложении, пытающемся отобразить или отрисовать форму XFA. В Aspose.PDF есть функция, которая позволяет разработчикам преобразовывать формы XFA в стандартные формы AcroForms.

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

Получение свойств поля XFA

Чтобы получить доступ к свойствам поля, сначала используйте Document.Form.XFA.Template для доступа к шаблону поля. Следующий фрагмент кода показывает шаги получения координат X и Y поля формы 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");
    }
}