كيفية العمل مع الحقول الانتقالية في .NET

كيفية العمل مع الحقول الانتقالية في .NET

كيفية العمل مع الحقول الانتقالية في .NET

Aspose.Words FOSS لـ .NET يمثل مجموعة من أنواع حقول Word القديمة — حقول الباركود وعدد قليل من حقول التوافق قبل Open-XML — من خلال فئات مخصصة في Aspose.Words.Fields المساحة الاسمية، يُطلق عليها بشكل غير رسمي transitional الحقول هنا. يوضح هذا الدليل كيفية العثور عليها وقراءتها وتكوينها. كل فئة حقل انتقالي تُشتق من النوع الأساسي Field النوع، إلى جانب العامة Field الكائن المعروض من قبل Document.Range.Fields.


دليل خطوة بخطوة

الخطوة 1: العثور على الحقول الانتقالية في مستند

قم بتعداد Document.Range.Fields وقارن قيمة Type لكل حقل (قيمة FieldType) بالثوابت ذات الصلة — FieldBarcode، FieldDisplayBarcode، FieldMergeBarcode، FieldBidiOutline، FieldEQ، FieldFootnoteRef أو FieldInfo — ثم قم بتحويل الكائن العام Field إلى الفئة المطابقة للوصول إلى خصائصه المحددة. تحقق دائمًا من Type قبل التحويل: التحويل إلى فئة حقل خاطئة يطلق InvalidCastException.


الخطوة 2: تكوين حقل DISPLAYBARCODE أو MERGEBARCODE

FieldDisplayBarcode (حقل DISPLAYBARCODE) و FieldMergeBarcode (حقل MERGEBARCODE، الذي يطبق أيضًا IMergeFieldSurrogate للدمج البريدي) يشتركان في نفس مجموعة خصائص تكوين الباركود: BarcodeType، BarcodeValue، SymbolHeight، SymbolRotation، ScalingFactor، ForegroundColor، BackgroundColor، PosCodeStyle، CaseCodeStyle، ErrorCorrectionLevel، DisplayText، AddStartStopChar، و FixCheckDigit. اضبط هذه على نسخة الحقل، ثم استدعِ Update() لكي يعكس Result التكوين الجديد قبل حفظ المستند.


الخطوة 3: قراءة بيانات حقل BARCODE (البريدي) القديم

FieldBarcode يُنفّذ الحقل BARCODE الأقدم، وهو حقل باركود بريدي أمريكي (POSTNET) تحديدًا وليس باركودًا متعدد الأغراض — لا يشارك خصائص BarcodeType/BarcodeValue من الخطوة 2. بدلاً من ذلك يكشف عن PostalAddress (العنوان الذي يُشفّرّه الباركود)، FacingIdentificationMark، IsUSPostalAddress، وIsBookmark. تحقق من Field.Type مقابل FieldType.FieldBarcode تحديدًا قبل قراءة هذه الخصائص، لأن تحويل حقل DISPLAYBARCODE أو MERGEBARCODE إلى FieldBarcode لن يُظهر الخصائص التي تتوقعها.


الخطوة 4: إنشاء صور الباركود باستخدام مولد مخصص

تحتوي نسخة FOSS هذه على بيانات حقول الباركود لكنها لا تتضمن محركًا لتصوير الباركود. BarcodeParameters هو الحاوية العابرة التي توحّد الإعدادات من أي عائلة حقول باركود — خصائص DISPLAYBARCODE/MERGEBARCODE من الخطوة 2 والخصائص البريدية من الخطوة 3 — في كائن واحد يُسلم إلى المرسِّم. نفّذ IBarcodeGenerator، مكشفًا عن GetBarcodeImage(parameters) وGetOldBarcodeImage(parameters) القديم، لتوفير تصوير الصورة الفعلي؛ بدون تنفيذ مُقدَّم، تحمل حقول الباركود بيانات التكوين فقط.


الخطوة 5: العمل مع حقول التوافق القديمة

أربع فئات أخرى تغطي رموز الحقول الأقدم التي لا تزال موجودة في ملفات .docx القديمة. FieldBidiOutline يُنفّذ حقل BIDIOUTLINE لترقيم المخطط من اليمين إلى اليسار ولا يكشف عن أي خصائص بخلاف السطح المشترك Field. FieldEQ يُنفّذ حقل المعادلة EQ ويكشف إضافيًا عن AsOfficeMath() لتحويل محتواه إلى كائن OfficeMath — هذا ينجح فقط عندما يكون الحقل يُشفّر معادلة فعليًا. FieldFootnoteRef يُنفّذ حقل FOOTNOTEREF، الذي يربط إشارة بحاشية أو هوامش نهائية، ولا يكشف أيضًا عن أي خصائص بخلاف السطح المشترك Field. FieldInfo يُنفّذ حقل INFO، قراءة أو كتابة خاصية معلومات ملخص المستند عبر خصائصه InfoType وNewValue.


الخطوة 6: تحديث أو تجميد قيمة حقل انتقالي

كل فئة حقل انتقالي ترث GetFieldCode() (نص الشيفرة الأساسي للحقل)، Update() (يعيد تقييم النتيجة)، Unlink() (يستبدل الحقل بنتيجته الأخيرة المحسوبة كنص ثابت)، وRemove() (يحذف الحقل). استدعِ Update() بعد تغيير أي تكوين للحقل لكي يعكس Result التغيير، واستخدم Unlink() عندما يجب تجميد القيمة الحالية للحقل بدلاً من بقائها قابلة لإعادة الحساب.


المشكلات الشائعة والحلول

InvalidCastException عند تحويل Field إلى فئة حقل انتقالي. الخاطئ FieldType كان مفترضًا. تحقق Field.Type مقابل المطابقة FieldType الثابت قبل التحويل.

A DISPLAYBARCODE/MERGEBARCODE خصائص الحقل مفقودة بعد التحويل. تم تحويل الحقل إلى FieldBarcode بدلاً من FieldDisplayBarcode/FieldMergeBarcode (أو العكس) — هذه الفئات تعرض مجموعات خصائص مختلفة على الرغم من أن الثلاثة تمثل بيانات الباركود. أكد Field.Type قبل الصب.

حقول الباركود تحمل بيانات ولكن لا يتم عرض أي صورة. لا IBarcodeGenerator تم توفير التنفيذ. قدم مولدًا مخصصًا يطبق GetBarcodeImage(parameters) — لا تُرفق هذه النسخة محركًا مدمجًا لعرض الباركود.

FieldEQ.AsOfficeMath() يعيد نتائج غير متوقعة. الحقل لا يحتوي على تعليمة معادلة صالحة. افحص الحقل GetFieldCode() الإخراج قبل محاولة التحويل.

FieldInfoالقيمة ليست محدثة بعد الضبط NewValue. لم يتم تحديث الحقل بعد التغيير. استدعِ Update() على الحقل بعد التعديل NewValue.


الأسئلة الشائعة

ماذا يعني “transitional” بالنسبة لأنواع الحقول هذه؟

ليس مصطلحًا رسميًا في Word — فهو يجمع فئات الحقول في مساحة الاسم Aspose.Words.Fields لهذا الإصدار التي تنفّذ رموز الحقول القديمة (حقول الباركود وحقول التوافق قبل Open-XML) من خلال فئاتها ذات الأنواع القوية بدلاً من التعامل معها فقط عبر الكائن العام Field.

هل يستخدم FieldBarcode نفس الخصائص كما في FieldDisplayBarcode؟

لا. يُنفّذ FieldBarcode الحقل القديم BARCODE (postal/POSTNET) ويكشف عن PostalAddress وFacingIdentificationMark وIsUSPostalAddress وIsBookmark. يشارك FieldDisplayBarcode وFieldMergeBarcode مجموعة خصائص مختلفة — BarcodeType وBarcodeValue وSymbolHeight وإعدادات العرض ذات الصلة.

هل يُظهر هذا الإصدار صور الباركود؟

لا. يحتفظ FieldBarcode وFieldDisplayBarcode وFieldMergeBarcode ببيانات تكوين الباركود ويكشفان عن واجهة IBarcodeGenerator، ولكن لا يتم تضمين أي محرك عرض باركود في هذا الإصدار — يلزم تنفيذ IBarcodeGenerator مخصص لإنتاج صورة.

هل يمكنني تحويل حقل EQ إلى معادلة OfficeMath؟

نعم، عبر FieldEQ.AsOfficeMath()، بشرط أن يكون رمز الحقل فعليًا يُشفّر معادلة.

كيف يمكنني العثور على جميع الحقول الانتقالية في مستند؟

عدّ Document.Range.Fields وقارن كل Field.Type بالثوابت FieldType ذات الصلة (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).


انظر أيضاً

 العربية