فیلدهای انتقالی
فیلدهای انتقالی
این راهنما نشان میدهد چگونه با انواع فیلدهای انتقالی — بارکدهای ارثی و فیلدهای سازگاری — در 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 را پیادهسازی میکند |