نحوه کار با سبکها در .NET
این راهنما نشان میدهد که چگونه سبکهای پاراگراف، کاراکتر، جدول و فهرست را جستجو، اعمال و ایجاد کنید در Aspose.Words FOSS برای .NET، با استفاده از Style, StyleCollection، و TableStyle کلاسها. این راهنما شامل خواندن مجموعهٔ سبکهای یک سند، جستجوی قابل اعتماد سبکها در زبانهای مختلف، اعمال سبکها بر پاراگرافها و بخشها (runs)، ایجاد و کپیکردن سبکها، و پیکربندی قالببندی شرطی منطقهای بر سبکهای جدول است.
راهنمای گام به گام
مرحله 1: نصب بسته
Aspose.Words FOSS برای .NET هنوز بسته NuGet را منتشر نکرده است – بهجای آن کتابخانه را از منبع بسازید. https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git را کلون کنید، سپس Aspose.Words.sln را در حالت Release با استفاده از SDK .NET بسازید و اسمبلی Aspose.Words حاصل را در پروژهتان ارجاع دهید. این کتابخانه هدف .NET Standard 2.0 را دارد، بنابراین بر روی .NET Framework 4.6.2+ و .NET 6/8/10 اجرا میشود.
مرحله 2: وارد کردن کلاسهای مورد نیاز
یک دستور using Aspose.Words; اضافه کنید – Style، StyleCollection، TableStyle، StyleType، StyleIdentifier، ConditionalStyle، ConditionalStyleCollection و ConditionalStyleType همگی در فضای نام Aspose.Words همراه با Document قرار دارند.
مرحله ۳: خواندن مجموعهٔ سبکهای سند
Document.Styles یک StyleCollection برمیگرداند – هر Style داخلی و کاربری که به سند پیوست شده است. StyleCollection.Count تعداد سبکهایی که دارد را گزارش میدهد، و DefaultFont / DefaultParagraphFormat قالببندی پیشفرض سراسری سند را توصیف میکنند که محتوای جدید قبل از اعمال هر سبک صریحی، از آن ارث میبرد.
مرحله ۴: بهصورت قابلاعتماد یک سبک را جستجو کنید
یک سبک را با استفاده از نام نمایشی آن و با بهرهگیری از ایندکسگر StyleCollection، styles[name] دریافت کنید. برای سبکهای داخلی، بهجای آن از همان ایندکسگر با مقدار enum StyleIdentifier استفاده کنید – styles[sti] –؛ نامها بومیسازی میشوند، اما مقادیر StyleIdentifier بومیسازی نمیشوند، بنابراین جستجو بر اساس شناسه بههمین شکل صرفنظر از زبان سند کار میکند. Style.Aliases را برای نامهای جایگزینی که Word برای همان سبک میشناسد، بررسی کنید اگر ایندکسگر آنچه را انتظار دارید پیدا نکند، و قبل از حذف یا تغییر نام یک سبک بهصورت برنامهنویسی، Style.BuiltIn را بررسی کنید، چون سبکهای داخلی اغلب در جای دیگری از سند با نامشان ارجاع داده میشوند.
مرحله ۵: اعمال یک سبک به پاراگرافها یا Runها
اشیای قالببندی که یک سبک را حمل میکنند، هر دو ویژگی Style (خود شیء Style) و ویژگی StyleName (یک میانبر که سبک را بر اساس نام حل میکند یا ایجاد میسازد) را نمایان میسازند. برای اعمال یک سبک پاراگراف، ParagraphFormat.Style یا ParagraphFormat.StyleName را تنظیم کنید، و برای اعمال یک سبک کاراکتر به قالببندی یک Run، Font.Style یا Font.StyleName را تنظیم کنید. اختصاص StyleName با نامی که پیش از این در مجموعه وجود ندارد، آن سبک را ایجاد میکند – ابتدا با ایندکسگر StyleCollection موجود بودن سبک را تأیید کنید، یا اگر رفتار موردنظر نیست، شیء Style را بهصورت مستقیم اختصاص دهید.
مرحله ۶: ساخت سلسلهمراتب سبکها
BaseStyleName را بخوانید تا سبکای را پیدا کنید که یک سبک دادهشده قالببندی تنظیمنشده را از آن بهارث میبرد، LinkedStyleName برای یک سبک جفتدار پاراگراف/کاراکتر (همانطور که Word برای سبکهای داخلی مانند یک عنوان و سبک کاراکتر مرتبط آن تعریف میکند)، و NextParagraphStyleName برای سبکای که Word به پاراگراف جدیدی که پس از پاراگرافی با این سبک تایپ میشود، اختصاص میدهد. هنگام تعریف مجموعهای از سبکهای مرتبط، BaseStyleName را تنظیم کنید — مانند یک خانواده از سبکهای عنوان که همه باید انتخابهای قلم را از یک سبک پایه بهارث ببرند — بهجای تکرار یکسان قالببندی در هر سبک.
مرحله ۷: ایجاد یا کپی یک سبک
با StyleCollection.Add(type, name) همراه با یک StyleType (Paragraph، Character، Table یا List) و یک نام فراخوانی کنید تا یک سبک جدید و خالی ایجاد شود، سپس ویژگیهای Font و ParagraphFormat آن را طبق نیاز تنظیم کنید. برای تکثیر یک سبک موجود — از جمله یکی که در StyleCollection یک Document متفاوت است — به جای خواندن و اعمال دستی هر ویژگی قالببندی، StyleCollection.AddCopy(style) را فراخوانی کنید. برای حذف یک سبک از مجموعهٔ آن، Style.Remove() را فراخوانی کنید.
مرحله ۸: پیکربندی سبکهای جدول و قالببندی شرطی
TableStyle Style را با ویژگیهای طرحبندی جدول — Alignment، CellSpacing، LeftIndent، Shading، VerticalAlignment و چهار ویژگی حاشیهگذاری (LeftPadding، RightPadding، TopPadding، BottomPadding) — گسترش میدهد و علاوه بر آن RowStripe و ColumnStripe را اضافه میکند که تعداد ردیفها یا ستونهایی که الگوی نوار بندی بر روی آنها تکرار میشود را کنترل میکند. برای قالببندی بهصورت ناحیهای، TableStyle.ConditionalStyles را پیکربندی کنید — یک ConditionalStyleCollection که یک ConditionalStyle برای هر ناحیه نگه میدارد: FirstRow، LastRow، FirstColumn، LastColumn، OddRowBanding، EvenRowBanding، OddColumnBanding، EvenColumnBanding و چهار سلول گوشهای (TopLeftCell، TopRightCell، BottomLeftCell، BottomRightCell). هر ConditionalStyle ویژگیهای Font، ParagraphFormat، Shading، Borders و حاشیهگذاری سلول خود را دارد، بهطوری که Type گزارش میدهد کدام ناحیهٔ ConditionalStyleType را نمایندگی میکند؛ برای دریافت قالببندی نوار بندی، ردیف سرصفحه یا سلول گوشهای که پس از ویرایش جدول باقی میماند، قالببندی را روی این نواحی تنظیم کنید نه روی ردیفهای جداگانهٔ جدول.
مرحله ۹: بازنشانی یا حذف قالببندی
با ConditionalStyle.ClearFormatting() یک ناحیه شرطی را بازنشانی کنید، یا با ConditionalStyleCollection.ClearFormatting() تمام نواحی را در یک TableStyle بهطور همزمان بازنشانی کنید. StyleCollection.ClearQuickStyleGallery() تمام سبکها را از گالری سبکهای سریع رابط کاربری Word حذف میکند بدون اینکه خود سبکها حذف شوند — برای کوچک کردن گالری بدون تغییر محتوای سند مفید است.
مشکلات رایج و راهحلها
StyleCollection indexer مقدار null را برای جستجوی نام برمیگرداند نام سبک در این سند وجود ندارد، یا یک سبک پیشفرض هنوز استفاده نشده است، بنابراین Word آن را materialize نکرده است. بررسی کنید Style.Aliases برای نامهای جایگزین، یا از StyleCollection indexer با یک StyleIdentifier بهجای برای سبکهای داخلی.
تنظیم StyleName بهطور غیرمنتظره یک سبک جدید ایجاد میکند StyleName اگر سبک نامبرده در مجموعه وجود نداشته باشد، آن را ایجاد میکند. از StyleCollection indexer ابتدا برای تأیید وجود سبک، یا اختصاص Style شیء مستقیماً از طریق Style ویژگی بهجای StyleName.
باندینگ جدول پس از اعمال TableStyle ظاهر نمیشود نواحی قالببندی شرطی – OddRowBanding, EvenRowBanding, و مشابه آن – هرگز پیکربندی نشدند بر روی TableStyle.ConditionalStyles. قالببندی را بر روی موارد مربوطه تنظیم کنید ConditionalStyle ورودیها در ConditionalStyleCollection.
تغییر سبک بر محتوایی که قبلاً از آن سبک استفاده میکند تأثیری ندارد قالببندی مستقیم (دستی) که بر روی سبک اعمال میشود، بر تنظیمات خود سبک تقدم دارد. قالببندی مستقیم را در بخشها یا پاراگرافهای تحت تأثیر پاک کنید، یا تنظیم کنید Style.AutomaticallyUpdate تا سبک خود را از آن قالببندی دستی دوباره تعریف کند.
جستجوی داخلی سبک در سندی که به زبان دیگری نوشته شده است، شکست میخورد این StyleCollection نمایهساز بر اساس نام نمایشی که بومیسازی شده است، هنگام فراخوانی با یک نام، مطابقت میدهد. از همان نمایهساز با مقدار متناظر استفاده کنید StyleIdentifier به جای مقدار enum، چون این شناسه مستقل از محل است.
سوالات متداول
چگونه میتوانم مجموعه تمام سبکها را در یک سند دریافت کنم؟
به Document.Styles مراجعه کنید، که یک StyleCollection حاوی تمام Styleهای داخلی و تعریفشده توسط کاربر در آن سند برمیگرداند.
تفاوت بین Style و StyleIdentifier چیست؟
Style شیء سبک واقعی با قالببندی آن است؛ StyleIdentifier یک مقدار enum مستقل از زبان است که برای جستجوی یک سبک توکار خاص بدون توجه به زبان سند، از طریق ایندکسگر StyleCollection استفاده میشود.
سبکهای جدول چگونه با سبکهای پاراگراف یا کاراکتر متفاوت هستند؟
TableStyle یک زیرکلاس از Style است که ویژگیهای طرحبندی جدول (Alignment، CellSpacing، padding) و یک مجموعه ConditionalStyles برای قالببندی خاص منطقهای مانند ردیفهای بندی، ردیفهای سرصفحه و سلولهای گوشهای را اضافه میکند — مفاهیم قالببندی که برای سبکهای پاراگراف یا کاراکتر اعمال نمیشوند.
آیا میتوانم یک سبک کاملاً جدید ایجاد کنم بهجای اصلاح یک سبک موجود؟
بله — با فراخوانی StyleCollection.Add(type, name) همراه با StyleType مورد نظر و یک نام جدید، یک سبک خالی ایجاد کنید، سپس ویژگیهای قالببندی آن (Font، ParagraphFormat، و غیره برای سبکهای پاراگراف یا کاراکتر) را تنظیم کنید.
چگونه میتوانم یک سبک را تکثیر کنم، حتی از سند دیگری؟
با فراخوانی StyleCollection.AddCopy(style) و عبور یک شیء Style — که میتواند از StyleCollection یک Document دیگر باشد — یک نسخه از آن را به مجموعه هدف اضافه کنید.