العمل مع نماذج XFA باستخدام C++
نماذج XFA هي بنية نماذج XML، وهي مجموعة من المواصفات 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");
}
تحويل 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 القياسية.
void ConvertXFAtoAcroForms() {
String _dataDir("C:\\Samples\\");
// Load XFA form
auto document = MakeObject<Document>(_dataDir + u"DynamicXFAToAcroForm.pdf");
// Set the form fields type as standard AcroForm
document->get_Form()->set_Type(Aspose::Pdf::Forms::FormType::Standard);
// Save the resultant PDF
document->Save(_dataDir + u"Standard_AcroForm_out.pdf");
}
الحصول على خصائص حقل XFA
للوصول إلى خصائص الحقل، استخدم أولاً Document.Form.XFA.Teamplate للوصول إلى قالب الحقل. يُظهر مقطع الشفرة التالي خطوات الحصول على إحداثيات X و Y لحقل نموذج XFA.
void GetXFAProprties() {
String _dataDir("C:\\Samples\\");
// Load XFA form
auto document = MakeObject<Document>(_dataDir + u"GetXFAProperties.pdf");
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(0), u"Field 1");
// Get field position
Console::WriteLine(document->get_Form()->get_XFA()->GetFieldTemplate(names[0])->get_Attributes()->idx_get(u"x")->get_Value());
// Get field position
Console::WriteLine(document->get_Form()->get_XFA()->GetFieldTemplate(names[0])->get_Attributes()->idx_get(u"y")->get_Value());
// Save the updated document
document->Save(_dataDir + u"Filled_XFA_out.pdf");
}