Работа с XFA Формами с использованием C++
XFA Forms — это XML Forms Architecture, семейство проприетарных XML спецификаций, которые были предложены и разработаны компанией JetForm для улучшения обработки веб-форм. Они также могут использоваться в PDF файлах, начиная со спецификации PDF 1.5.
Заполните поля XFA с помощью класса Form из Aspose.Pdf.Facades.
Заполнение полей XFA
Следующий фрагмент кода показывает, как заполнить поля в форме XFA.
using namespace System;
using namespace System::Collections::Generic;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Text;
void FillXFA() {
String _dataDir("C:\\Samples\\");
// Load XFA form
auto document = MakeObject<Document>(_dataDir + u"FillXFAFields.pdf");
// Get names of XFA form fields
auto names = document->get_Form()->get_XFA()->get_FieldNames();
// Set field values
document->get_Form()->get_XFA()->idx_set(names->idx_get(0),u"Field 0");
document->get_Form()->get_XFA()->idx_set(names->idx_get(1),u"Field 1");
// Save the updated document
document->Save(_dataDir + u"Filled_XFA_out.pdf");
}
Convert XFA to 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.
void ConvertXFAtoAcroForms() {
String _dataDir("C:\\Samples\\");
// Загрузить форму XFA
auto document = MakeObject<Document>(_dataDir + u"DynamicXFAToAcroForm.pdf");
// Установить тип полей формы как стандартный AcroForm
document->get_Form()->set_Type(Aspose::Pdf::Forms::FormType::Standard);
// Сохранить полученный PDF
document->Save(_dataDir + u"Standard_AcroForm_out.pdf");
}
Получить свойства поля XFA
Чтобы получить доступ к свойствам полей, сначала используйте Document.Form.XFA.Teamplate для доступа к шаблону поля. Следующий фрагмент кода показывает шаги получения координат X и Y поля формы XFA.
void GetXFAProprties() {
String _dataDir("C:\\Samples\\");
// Загрузить форму XFA
auto document = MakeObject<Document>(_dataDir + u"GetXFAProperties.pdf");
auto names = document->get_Form()->get_XFA()->get_FieldNames();
// Установить значения полей
document->get_Form()->get_XFA()->idx_set(names->idx_get(0), u"Field 0");
document->get_Form()->get_XFA()->idx_set(names->idx_get(0), u"Field 1");
// Получить позицию поля
Console::WriteLine(document->get_Form()->get_XFA()->GetFieldTemplate(names[0])->get_Attributes()->idx_get(u"x")->get_Value());
// Получить позицию поля
Console::WriteLine(document->get_Form()->get_XFA()->GetFieldTemplate(names[0])->get_Attributes()->idx_get(u"y")->get_Value());
// Сохранить обновленный документ
document->Save(_dataDir + u"Filled_XFA_out.pdf");
}