مقدمه
سندهای Word تصاویر، جعبههای متن و سایر اشیای معلق آزاد را در لایهای رسم میکنند که جدا از جریان معمول پاراگرافها و جداول قرار دارد. Aspose.Words FOSS برای .NET این لایهی رسم را از طریق کلاسهای Shape و ShapeBase منتشر میکند و دسترسی برنامهای به همان مدل AutoShape، تصویر، جعبه متن و شیء OLE که خود Word بهصورت داخلی استفاده میکند، فراهم میسازد. این راهنما نشان میدهد که کتابخانه چگونه این اشیای رسم را نمایش و دستکاری میکند — موقعیتیابی، قالببندی پر و خطکش، تصاویر داخلی، و متنی که داخل یک شکل چیده شده است — در اسناد DOCX، DOCM، DOTX و DOTM.
این برای کدی که قالبهای گزارش یا سربرگ با لوگو یا گرافیک موقعیتیاب شده میسازد، اسناد را با جعبههای متن معلق و فراخوانیها تولید میکند، یا شکلهای موجود در یک سند بارگذاریشده را بررسی میکند — استخراج بایتهای تصویر داخلی، خواندن نام امضاکننده در خط امضا، یا تغییر موقعیت تصویر موجود — مفید است.
Aspose.Words FOSS برای .NET تحت مجوز MIT منتشر شده است و هدف .NET Standard 2.0 است، بنابراین بر روی .NET Framework 4.6.2+ و .NET 6، 8 و 10 بدون وابستگیهای بومی اجرا میشود. آن را از طریق NuGet نصب کنید، یا از سورس بسازید (به راهنمای سریع زیر مراجعه کنید). این همان موتور سند Aspose.Words است که بهصورت تجاری استفاده میشود، نه بازنویسی یا wrapper، بنابراین کلاسهای Shape و لایهی رسم که در اینجا توضیح داده شدهاند، نسخهٔ تولیدی API هستند.
ویژگیهای کلیدی
مدل شیء Shape و ShapeBase
هر AutoShape، جعبه متن، تصویر داخلی، شیء OLE یا کنترل ActiveX که در یک سند Word لنگر میخورند، توسط کلاس Shape نمایان میشوند — کلاس مهر و مومشده که بر پایهٔ کلاس پایهٔ انتزاعی ShapeBase ساخته شده است. هر دو همان سطح موقعیتیابی و قالببندی را به اشتراک میگذارند: Shape.Left، Shape.Top، Shape.Width، Shape.Height، Shape.Rotation و Shape.ZOrder برای هندسه، بهعلاوهٔ پرچمهای Shape.IsGroup، Shape.IsImage، Shape.IsWordArt و Shape.IsInline که نوع شیء نگهداریشده توسط یک نمونه را توصیف میکنند. شمارشگر ShapeType انواع شکلهای ملموسی که Word تشخیص میدهد — Rectangle، Ellipse، Line، Arrow، یک سری از انواع callout و connector، TextBox، Image و OleObject در بیش از هشتاد مقدار — را فهرست میکند تا کد مرورگر اشکال یک سند بتواند بر اساس Shape.ShapeType شاخهبندی کند و تصمیم بگیرد هر کدام را چگونه پردازش کند. چندین شکل میتوانند در یک GroupShape ترکیب شوند، که خود یک زیرکلاس ShapeBase است و مجموعهای از اشکال را بهصورت مشترک موقعیت و اندازه میدهد؛ DocumentBuilder.InsertGroupShape(shapes) یکی را از آرایهٔ موجودی از اشکال میسازد.
جعبههای متن و WordArt
هر Shape میتواند متن خود را از طریق کلاس TextBox حمل کند، که به عنوان Shape.TextBox در دسترس است. ویژگیهای TextBox نحوه قرارگیری آن متن داخل شکل را کنترل میکنند: TextBox.InternalMarginLeft، TextBox.InternalMarginRight، TextBox.InternalMarginTop و TextBox.InternalMarginBottom برای حاشیه داخلی (padding)، TextBox.FitShapeToText برای اجازه دادن به رشد شکل همراه با محتوا، LayoutFlow برای جهت متن، TextBoxWrapMode برای نحوه پیچش متن داخل جعبه، و TextBox.VerticalAnchor — مقداری TextBoxAnchor مانند Top، Middle، BottomCentered یا TopBaseline — برای تراز عمودی. جعبههای متن پیوسته، که در آن متن افزایشی به جعبه دوم ادامه مییابد، با TextBox.Next و TextBox.Previous مدلسازی میشوند. کلاسی مرتبط اما متمایز، TextPath، متنی به سبک WordArt را تعریف میکند که پیرامون خطوط شکل میچرخد به جای اینکه داخل آن بنشیند، با ویژگیهایی مانند TextPath.Text، TextPath.FontFamily، TextPath.Bold و TextPath.RotateLetters، بهعلاوه یک شمارش TextPathAlignment با مقادیری مانند Stretch، Center و LetterJustify.
تصاویر و عکسهای جاسازیشده
هنگامی که یک شکل حاوی یک تصویر است، Shape.HasImage درست است و Shape.ImageData یک شیء ImageData را برمیگرداند. ImageData بایتهای خام را از طریق ImageData.ImageBytes، فرمت شناساییشده را از طریق ImageType (مقادیر شامل Jpeg، Png، Bmp، Gif، Emf، Wmf، Pict، Eps و WebP)، ابعاد پیکسل و وضوح را از طریق ImageSize، و برش را از طریق ImageData.CropTop، ImageData.CropBottom، ImageData.CropLeft و ImageData.CropRight در دسترس میگذارد. تنظیمات رنگ — ImageData.Brightness، ImageData.Contrast، ImageData.GrayScale، ImageData.BiLevel و ImageData.ChromaKey — به عنوان ویژگیهای همان شیء وجود دارند، و ImageData.IsLink/ImageData.IsLinkOnly تصویر جاسازیشده را از تصویری که فقط مسیر فایل خارجی را ارجاع میدهد متمایز میکنند. DocumentBuilder.InsertImage() بارگذاریهای متعددی دارد که یک تصویر، مسیر فایل، آرایه بایت یا یک جریان را میپذیرند، شامل گونههایی که همچنین عرض، ارتفاع، موقعیت افقی و عمودی صریح و WrapType را در زمان درج تنظیم میکنند.
پرکردن، خطکشی و افکتهای شکل
هر Shape و GroupShape شامل یک شیء Fill و یک شیء Stroke برای داخلی و مرز خود هستند. Fill از شش نوع پرکردن از طریق FillType پشتیبانی میکند، با مقادیری شامل Solid، Patterned، Gradient، Textured، Background و Picture، که با روشهایی مانند Fill.Solid(color)، Fill.OneColorGradient(style, variant, degree)، Fill.TwoColorGradient(color1, color2, style, variant)، Fill.Patterned(patternType) یا Fill.SetImage(fileName) تنظیم میشوند. Stroke مرز را کنترل میکند: Stroke.Weight، DashStyle، JoinStyle، EndCap و Stroke.LineStyle (یک مقدار ShapeLineStyle) خود خط را پوشش میدهند، در حالی که Stroke.StartArrowType و Stroke.EndArrowType، همراه با شمارشهای ArrowWidth و ArrowLength، سرهای پیکان را بر روی اشکال اتصالدهنده و خطی تنظیم میکنند. فراتر از پرکردن و خطکشی، Shape چهار شیء افکت دیگر — ShadowFormat، ReflectionFormat، GlowFormat و SoftEdgeFormat — را نمایان میکند که هر کدام ویژگیهای رنگ و شفافیت خاص خود را برای اثر بصری مربوطه دارند.
موقعیتیابی و پیچش متن
اشکالی که نسبت به صفحه یا پاراگراف شناور هستند، از RelativeHorizontalPosition و RelativeVerticalPosition برای لنگر کردن خود — برای مثال به حاشیه، صفحه یا ستون — همراه با RelativeHorizontalSize و RelativeVerticalSize برای لنگر اندازه، بهعلاوه HorizontalAlignment و VerticalAlignment برای قرارگیری ساده چپ/مرکز/راست یا بالا/میانه/پایین استفاده میکنند. نحوه واکنش متن اطراف به یک شکل توسط WrapType کنترل میشود، با مقادیری شامل Inline، Square، Tight، TopBottom و None؛ برای پیچش Square و Tight، WrapSide آن را بیشتر به Left، Right، Both یا Largest محدود میکند. FlipOrientation یک شکل را به صورت افقی یا عمودی معکوس میکند بدون تغییر مختصات آن، و پرچمهای Shape.AllowOverlap/Shape.BehindText نحوه تعامل یک شکل با محتوای شناور دیگر و لایه متن زیر آن را کنترل میکنند.
خطوط امضا و خطوط افقی
دو نوع شکل تخصصی دیگر در همان مدل رسم وجود دارند. SignatureLine، که در زمان درج از طریق SignatureLineOptions پیکربندی میشود (ویژگیها شامل SignatureLineOptions.Signer، SignatureLineOptions.SignerTitle، SignatureLineOptions.Email، SignatureLineOptions.Instructions، SignatureLineOptions.ShowDate و SignatureLineOptions.AllowComments هستند)، بلوک بصری امضای قابل مشاهده در اسناد چاپی را رندر میکند و SignatureLine.IsSigned و SignatureLine.IsValid را پس از اعمال امضا در آن نمایش میدهد — این متفاوت از تأیید دیجیتال-امضای رمزنگاریشدهای است که در جای دیگری پوشش داده شده و با بخشهای امضاشدهٔ سند کار میکند نه با خود شکل. HorizontalRuleFormat خط تقسیم سادهای را که با DocumentBuilder.InsertHorizontalRule() وارد میشود پوشش میدهد، با ویژگیهای HorizontalRuleFormat.WidthPercent، HorizontalRuleFormat.Height، HorizontalRuleFormat.NoShade، HorizontalRuleFormat.Color و HorizontalRuleFormat.Alignment (آخرین یک مقدار HorizontalRuleAlignment است).
شروع سریع
Aspose.Words FOSS برای .NET از طریق NuGet در دسترس است:
dotnet add package Aspose.Words.FOSSبهجای آن، برای ساخت از منبع:
git clone https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git
cd Aspose.Words-FOSS-for-.NET
dotnet build Aspose.Words.sln -c Release
یک مرجع پروژه به Aspose.Words.csproj را از برنامهٔ خود اضافه کنید. از آنجا، کار با لایهٔ رسم الگوی استفادهشده در تمام این پست را دنبال میکند: یک Document را بارگذاری یا ایجاد کنید، شکلهای آن را با Document.GetChildNodes(NodeType.Shape, true) مرور کنید یا یک مورد جدید را با متدی از نوع DocumentBuilder مانند DocumentBuilder.InsertImage()، DocumentBuilder.InsertGroupShape() یا DocumentBuilder.InsertHorizontalRule() وارد کنید، سپس ویژگیهای Shape بازگرداندهشده را بخوانید یا تنظیم کنید — Shape.ImageData، Shape.TextBox، Shape.Fill، Shape.Stroke، Shape.WrapType و بقیه — پیش از فراخوانی Document.Save().
قالبهای پشتیبانیشده
| قالب | پسوند | خواندن | نوشتن |
|---|---|---|---|
| DOCX | .docx | ✓ | ✓ |
| DOCM | .docm | ✓ | ✓ |
| DOTX | .dotx | ✓ | ✓ |
| DOTM | .dotm | ✓ | ✓ |
| Flat OPC (همهٔ انواع) | (متنوع) | ✓ | ✓ |
| Markdown | .md | ✓ | ✓ |
| Text | .txt | ✓ | ✓ |
این نسخه عمداً چیدمان صفحه و رندرینگ را حذف میکند — بدون PDF، XPS یا خروجی تصویر، و بدون چاپ — به طوری که Shape.Bounds یک شکل و هندسه وابسته به چیدمان، مقادیر ذخیرهشده در سند را بازتاب میدهند نه یک چیدمان صفحه محاسبهشده. مبدلهای فرمت اضافی (DOC، RTF، ODT، HTML، EPUB، MHTML، MOBI، AZW3، و WordML) خوانده یا نوشته نمیشوند؛ اینها همان زیرسیستمهایی هستند که از پایه کد تجاری حذف شدهاند تا این نسخه رایگان بماند.
منبع باز و مجوزدهی
Aspose.Words FOSS برای .NET تحت مجوز MIT منتشر شده است، بهصورت رایگان برای استفاده تجاری و شخصی بدون حقالامتیاز یا محدودیتهای توزیع مجدد. کد کامل در GitHub در Aspose.Words FOSS برای .NET مخزن در دسترس است.