บทนำ

เอกสาร 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 ที่ใช้ในเชิงพาณิชย์เดียวกัน, ไม่ได้เป็นการเขียนใหม่หรือหุ้ม, ดังนั้นคลาส Shape และชั้นวาดที่อธิบายไว้ที่นี่คือ API รุ่นการผลิต.


คุณสมบัติหลัก

โมเดลวัตถุ Shape และ ShapeBase

ทุก AutoShape, กล่องข้อความ, รูปภาพที่ฝัง, วัตถุ OLE, หรือคอนโทรล ActiveX ที่ยึดในเอกสาร Word จะถูกแทนด้วยคลาส Shape — เป็น sealed และสร้างขึ้นบนคลาสฐานเชิงนามธรรม ShapeBase. ทั้งสองใช้พื้นผิวการกำหนดตำแหน่งและการจัดรูปแบบเดียวกัน: Shape.Left, Shape.Top, Shape.Width, Shape.Height, Shape.Rotation, และ Shape.ZOrder สำหรับเรขาคณิต, พร้อมกับแฟล็ก Shape.IsGroup, Shape.IsImage, Shape.IsWordArt, และ Shape.IsInline ที่อธิบายประเภทของวัตถุที่อินสแตนซ์นั้นถือ. Enum 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, พร้อมกับ enum 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() มี overloads ที่รับภาพ, เส้นทางไฟล์, อาเรย์ไบต์, หรือสตรีม, รวมถึงเวอร์ชันที่ตั้งค่าความกว้าง, ความสูง, ตำแหน่งแนวนอนและแนวตั้งอย่างชัดเจน, และ 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, คู่กับ enum 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.


เริ่มต้นใช้งาน

ทรัพยากรที่เกี่ยวข้อง