فیلدهای انتقالی

فیلدهای انتقالی

این راهنما نشان می‌دهد چگونه با انواع فیلدهای انتقالی — بارکدهای ارثی و فیلدهای سازگاری — در Aspose.Words FOSS برای .NET کار کنید.

Aspose.Words FOSS برای .NET انواع خاصی از فیلدهای قدیمی Word را از طریق یک مجموعه اختصاصی از کلاس‌ها در Aspose.Words.Fields namespace، به‌طور غیررسمی نامیده شده transitional فیلدها. این‌ها فیلدهایی هستند که پیش از معادل‌های بعدی Open XML وجود داشته‌اند اما همچنان داخل .docx اسناد باز شده از منابع قدیمی. هر نوع فیلد گذارنده کلاس با تایپ قوی خود را دارد که از Field، همراه با generic Field شیء‌ای که توسط Document.Range.Fields.


فیلدهای بارکد

سه کلاس فیلد داده‌های بارکد را درون یک سند تولید یا نمایش می‌دهند: FieldBarcode (فیلد BARCODE — یک بارکد پستی ارثی با ویژگی‌های PostalAddress، IsBookmark، FacingIdentificationMark و IsUSPostalAddress مخصوص خود)، FieldDisplayBarcode (فیلد DISPLAYBARCODE)، و FieldMergeBarcode (فیلد MERGEBARCODE که همچنین IMergeFieldSurrogate را برای استفاده در ادغام نامه پیاده‌سازی می‌کند). FieldDisplayBarcode و FieldMergeBarcode همان ویژگی‌های عمومی پیکربندی بارکد را به اشتراک می‌گذارند — BarcodeType، BarcodeValue، SymbolHeight، SymbolRotation، ScalingFactor، ForegroundColor، BackgroundColor، PosCodeStyle، CaseCodeStyle، ErrorCorrectionLevel، DisplayText، AddStartStopChar و FixCheckDigit — ویژگی‌هایی که FieldBarcode فاقد آن‌هاست.

کلاس BarcodeParameters یک محفظه عبور-از-دست است که ترکیبی از هر دو مجموعه ویژگی (ویژگی‌های آدرس پستی و ویژگی‌های عمومی پیکربندی بارکد) را در اختیار می‌گذارد تا تنظیمات به یک رندرکننده بارکد منتقل شود، و IBarcodeGenerator رابطی است که یک رندرکننده سفارشی پیاده‌سازی می‌کند، GetBarcodeImage(parameters) و GetOldBarcodeImage(parameters) ارثی را در اختیار می‌گذارد. Document.Range.Fields را تکرار کنید و Field.Type را در برابر FieldType.FieldBarcode، FieldType.FieldDisplayBarcode یا FieldType.FieldMergeBarcode بررسی کنید تا این فیلدها را بیابید، سپس به کلاس فیلد خاص تبدیل (cast) کنید — BarcodeValue و BarcodeType فقط پس از تبدیل به FieldDisplayBarcode یا FieldMergeBarcode در دسترس هستند، نه FieldBarcode.


فیلدهای سازگاری ارثی

چهار کلاس فیلد اضافی کدهای فیلد قدیمی Word را پوشش می‌دهند که در اسناد تازه‌نویس کمتر رایج هستند اما هنوز در فایل‌های .docx قدیمی ظاهر می‌شوند: FieldBidiOutline (فیلد BIDIOUTLINE برای شماره‌گذاری طرح‌واره راست به چپ)، FieldEQ (فیلد معادله EQ که همچنین AsOfficeMath() را برای تبدیل محتوای آن به یک شیء OfficeMath در دسترس می‌گذارد)، FieldFootnoteRef (فیلد FOOTNOTEREF که به یک علامت پاورقی یا پانوشت ارجاع می‌دهد)، و FieldInfo (فیلد INFO که از طریق ویژگی‌های InfoType و NewValue یک ویژگی اطلاعات خلاصه سند را می‌خواند یا می‌نویسد).

هر یک از این کلاس‌های فیلد همان سطح Field را به ارث می‌برند: GetFieldCode() متن کد پایه فیلد را برمی‌گرداند، Update() نتیجه فیلد را دوباره ارزیابی می‌کند، Unlink() فیلد را با آخرین نتیجه محاسبه‌شده‌اش جایگزین می‌کند، و Remove() فیلد را از سند حذف می‌کند. IFieldCodeTokenInfoProvider توسط FieldBarcode، FieldDisplayBarcode، FieldMergeBarcode و FieldInfo پیاده‌سازی می‌شود، زیرا کدهای فیلد آنها سوئیچ‌های ساختاریافته‌ای فراتر از یک رشته دستور ساده دارند.


نکات و بهترین روش‌ها

  • همیشه Field.Type را قبل از تبدیل یک Field عمومی به یکی از کلاس‌های فیلد انتقالی بررسی کنید — تبدیل نادرست یک InvalidCastException را پرتاب می‌کند.
  • پس از تغییر ویژگی‌های فیلد بارکد، Update() را فراخوانی کنید تا Result قبل از ذخیره سند، پیکربندی جدید را منعکس کند.
  • FieldEQ.AsOfficeMath() تنها زمانی موفق می‌شود که فیلد EQ واقعاً یک معادله را رمزگذاری کرده باشد؛ قبل از فراخوانی آن، Result فیلد را بررسی کنید تا شبیه یک فرمول باشد.
  • از Unlink() وقتی استفاده کنید که می‌خواهید مقدار فعلی یک فیلد را به عنوان متن ثابت ثابت کنید و امکان محاسبه مجدد آن را در آینده حذف کنید.
  • کلاس‌های فیلد بارکد فقط داده حمل می‌کنند — این نسخه FOSS شامل موتور رندر بارکد نیست، بنابراین خروجی GetBarcodeImage() به پیاده‌سازی IBarcodeGenerator که شما فراهم می‌کنید بستگی دارد.

مشکلات رایج

مسئلهعلتاصلاح
InvalidCastException هنگام تبدیل یک Fieldمقدار FieldType نادرستابتدا Field.Type را با ثابت متناظر FieldType بررسی کنید
FieldEQ.AsOfficeMath() نتایج غیرمنتظره‌ای برمی‌گرداندفیلد شامل دستور معادلهٔ معتبر نیستخروجی GetFieldCode() را پیش از تبدیل بررسی کنید
فیلد بارکد تصویری رندر شده نداردهیچ پیاده‌سازی IBarcodeGenerator ارائه نشده استیک ژنراتور سفارشی فراهم کنید که GetBarcodeImage() را پیاده‌سازی می‌کند
مقدار FieldInfo پس از تغییر NewValue به‌روز نشده استفیلد به‌روز نشده استمتد Update() را بر روی فیلد پس از تغییر NewValue فراخوانی کنید

FAQ

کلمه «transitional» در مورد این نوع فیلدها چه معنی دارد؟

این اصطلاح رسمی مایکروسافت ورد نیست — این ترکیب کلاس‌های فیلد را در فضای‌نام Aspose.Words.Fields این نسخه گروه‌بندی می‌کند که کدهای فیلد قدیمی (بارکد و فیلدهای سازگاری پیش از Open-XML) را از طریق کلاس‌های نوع-قوی خود پیاده‌سازی می‌کنند، به‌جای اینکه فقط از طریق شیء عمومی Field مدیریت شوند.

آیا این نسخه تصاویر بارکد را رندر می‌کند؟

خیر. FieldBarcode، FieldDisplayBarcode و FieldMergeBarcode داده‌های بارکد را نگه می‌دارند و رابط IBarcodeGenerator را افشا می‌کنند، اما هیچ موتور رندر داخلی بارکد در این نسخه گنجانده نشده است — شما باید پیاده‌سازی IBarcodeGenerator خود را فراهم کنید.

آیا می‌توانم یک فیلد EQ را به معادله OfficeMath تبدیل کنم؟

بله، از طریق FieldEQ.AsOfficeMath()، به شرطی که کد فیلد واقعاً یک معادله را رمزگذاری کند.

چگونه می‌توانم تمام فیلدهای انتقالی را در یک سند پیدا کنم؟

مجموعه Document.Range.Fields را فهرست کنید و هر Field.Type را با ثابت‌های مربوطه FieldType مقایسه کنید (FieldBarcode، FieldDisplayBarcode، FieldMergeBarcode، FieldBidiOutline، FieldEQ، FieldFootnoteRef، FieldInfo).


خلاصه API Reference

کلاس / متدتوضیح
FieldBarcodeفیلد BARCODE را پیاده‌سازی می‌کند
FieldDisplayBarcodeفیلد DISPLAYBARCODE را پیاده‌سازی می‌کند
FieldMergeBarcodeپیاده‌سازی فیلد بارکد ادغام ایمیل MERGEBARCODE
BarcodeParametersمحفظه‌ای برای تنظیمات بارکد که به یک ژنراتور منتقل می‌شود
IBarcodeGeneratorرابط برای رندر کنندهٔ سفارشی تصویر بارکد
FieldBidiOutlineپیاده‌سازی فیلد BIDIOUTLINE
FieldEQفیلد معادله EQ را پیاده‌سازی می‌کند؛ AsOfficeMath() به OfficeMath تبدیل می‌شود
FieldFootnoteRefفیلد FOOTNOTEREF را پیاده‌سازی می‌کند
FieldInfoفیلد ویژگی سند INFO را پیاده‌سازی می‌کند

همچنین ببینید:

 فارسی