การวาดรูปร่างและลายน้ำ
วาดรูปทรงและลายน้ำ
เอกสาร Word เก็บ AutoShapes, รูปภาพ, กล่องข้อความ, และอ็อบเจกต์ OLE ไว้ในชั้นวาดแยกจากการไหลของข้อความในย่อหน้า/รัน. Aspose.Words FOSS สำหรับ .NET จำลองชั้นนี้ด้วยคลาส Shape (อ็อบเจกต์วาดที่เป็นคอนกรีต) และฐานแบบนามธรรม ShapeBase ของมัน, ทั้งสองเป็นส่วนหนึ่งของเนมสเปซ Aspose.Words.Drawing. คู่มือฉบับนี้ครอบคลุมโมเดลรูปทรง, การแทรกรูปภาพและ AutoShapes, การกำหนดตำแหน่งและการห่อข้อความ, การเติมสีและเอฟเฟกต์, การจัดกลุ่ม, และลายน้ำ.
โมเดลรูปทรงและ ShapeBase
Shape — เป็น sealed, และเป็นประเภทที่คุณทำงานโดยตรง — แสดงถึง AutoShape, กล่องข้อความ, รูปแบบอิสระ, อ็อบเจกต์ OLE, คอนโทรล ActiveX, หรือรูปภาพในชั้นวาด. มันสืบทอดจาก ShapeBase เชิงนามธรรม, ซึ่งให้คุณสมบัติที่ใช้ร่วมกันโดยอ็อบเจกต์วาดทุกชนิด: ตำแหน่ง (Left, Top, Width, Height, Rotation), ค่า enum ShapeType, และอ็อบเจกต์ย่อยสำหรับการจัดรูปแบบเช่น Fill, Stroke, ShadowFormat, Glow, และ Reflection. GroupShape (ซึ่งเป็น ShapeBase อีกด้วย) แทนกลุ่มของรูปทรงที่ถือเป็นหน่วยเดียว. สร้างรูปทรงอิสระโดยตรงด้วย new Shape(doc, shapeType), โดยที่ shapeType เป็นค่า ShapeType เช่น Rectangle, Ellipse, Star, หรือ TextBox, จากนั้นแทรกมันเข้าสู่ต้นไม้ด้วย DocumentBuilder.InsertNode(node).
การแทรกรูปภาพและ AutoShapes ด้วย DocumentBuilder
สำหรับรูปภาพโดยเฉพาะ, DocumentBuilder.InsertImage เป็นวิธีที่ตรงกว่า: overloads รับ Image, เส้นทางไฟล์, Stream, หรืออาร์เรย์ไบต์ดิบ, พร้อม overloads เพิ่มเติมที่ตั้งค่า width/height อย่างชัดเจนหรือการกำหนดตำแหน่งเต็มรูปแบบ (horzPos, left, vertPos, top, width, height, wrapType). Shape ที่ได้จะเปิดเผยข้อมูลรูปภาพผ่านคุณสมบัติ ImageData — ImageData.SetImage(...) เพื่อแทนที่ภาพ, พร้อม CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast, และ GrayScale สำหรับการปรับพื้นฐาน. อินสแตนซ์ของ GroupShape สร้างด้วย DocumentBuilder.InsertGroupShape(shapes).
การกำหนดตำแหน่งและการห่อข้อความ
ตำแหน่งของรูปทรงสัมพันธ์กับหน้าได้รับการควบคุมโดย RelativeHorizontalPosition และ RelativeVerticalPosition (แต่ละอันสัมพันธ์กับ Page, Margin, Column หรือจุดยึดที่คล้ายกัน) พร้อมกับคุณสมบัติการชดเชย Left/Top. HorizontalAlignment และ VerticalAlignment จัดการการจัดแนวสัมพันธ์แบบง่าย. วิธีที่ข้อความรอบข้างไหลรอบรูปทรงตั้งค่าด้วย WrapType และสำหรับการห่อหุ้มตามด้านเฉพาะ WrapSide. IsInline รายงานว่ารูปทรงไหลกับข้อความ (inline) หรือ ลอยอย่างอิสระ.
การเติม, เส้นขอบ, และเอฟเฟกต์
Shape.Fill (อ็อบเจกต์ Fill) ควบคุมวิธีการระบายสีภายในของรูปทรง: Fill.Solid(color) สำหรับสีทึบ, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) สำหรับไล่สี, Fill.Patterned(patternType) สำหรับลวดลาย, และ Fill.SetImage(...) สำหรับการเติมภาพ; FillType รายงานว่ารูปแบบใดกำลังใช้งานอยู่. เส้นรอบรูปควบคุมผ่านคุณสมบัติ Stroke, และเอฟเฟกต์ภาพถูกเปิดเผยเป็นอ็อบเจกต์การจัดรูปแบบแยกต่างหาก — ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat), และ SoftEdge (SoftEdgeFormat) — แต่ละอันมีวิธี Remove() ของตนเองเพื่อเคลียร์เอฟเฟกต์.
การจัดกลุ่มรูปทรงและกล่องข้อความ
หลายรูปทรงสามารถรวมเข้าด้วยกันเป็น GroupShape ซึ่งตัวมันเองทำงานเหมือน ShapeBase เดียวที่มี Fill, ShadowFormat, Glow, และ Reflection ของตนเอง. สำหรับรูปทรงที่มีข้อความ, Shape.TextBox (อ็อบเจกต์ TextBox) เปิดเผยการจัดวางเฉพาะข้อความ: InternalMarginLeft/Right/Top/Bottom สำหรับระยะห่างขอบใน, FitShapeToText เพื่อปรับขนาดอัตโนมัติของรูปทรง, LayoutFlow สำหรับทิศทางข้อความ, และ VerticalAnchor สำหรับการจัดแนวข้อความแนวตั้งภายในรูปทรง.
Watermarks
Document.Watermark (อ็อบเจกต์ Watermark) จัดการลายน้ำทั่วทั้งเอกสารที่แยกจากรูปทรงใดรูปหนึ่ง. เรียก Watermark.SetText(text) หรือ SetText(text, options) เพื่อสร้างลายน้ำข้อความ, หรือ SetImage(...) เพื่อสร้างลายน้ำภาพ, และ Watermark.Remove() เพื่อลบออก. Watermark.Type รายงาน WatermarkType ปัจจุบัน (Text, Image, หรือ None). TextWatermarkOptions ควบคุม FontFamily, FontSize, Color, และ Layout (WatermarkLayout.Horizontal หรือ Diagonal); ImageWatermarkOptions ควบคุม Scale และ IsWashout.
เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด
- ใช้
ShapeBaseเมื่อเขียนโค้ดที่ควรทำงานได้กับทั้งอินสแตนซ์ShapeเดียวและGroupShape; ใช้Shapeโดยตรงเมื่อคุณต้องการสมาชิกที่เฉพาะเจาะจงสำหรับรูปภาพหรือ AutoShape เช่นImageDataหรือChart. - กำหนด
RelativeHorizontalPosition/RelativeVerticalPositionพร้อมกับWrapTypeเมื่อต้องทำให้รูปร่างลอย — รูปร่างแบบอินไลน์ (ค่าเริ่มต้นสำหรับInsertImage) จะละเลยคุณสมบัติตำแหน่งจนกว่าคุณจะทำให้มันลอย. - แนะนำให้ใช้
Document.Watermarkสำหรับลายน้ำทั่วทั้งเอกสารเดียว แทนที่จะใส่และจัดตำแหน่งShapeด้วยตนเองไว้ด้านหลังข้อความ. - ลบเอฟเฟกต์ด้วยเมธอด
Remove()ของอ็อบเจ็กต์ (ShadowFormat.Remove(),ReflectionFormat.Remove()) แทนการตั้งค่าคุณสมบัติแต่ละตัวเป็นศูนย์. - ตรวจสอบ
Shape.HasImage,Shape.HasChartหรือShape.IsGroupก่อนเข้าถึงImageData,Chartหรือสมาชิกที่เฉพาะกลุ่ม เนื่องจากShapeสามารถแทนได้หนึ่งในหลายประเภทของอ็อบเจ็กต์การวาด.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ไข |
|---|---|---|
การตั้งค่า Left/Top บนรูปร่างไม่มีผลที่มองเห็นได้ | รูปร่างยังคงเป็นอินไลน์ (IsInline == true) | ตั้งค่า WrapType เป็นค่าแบบลอยและตั้งค่า RelativeHorizontalPosition/RelativeVerticalPosition เพื่อให้คุณสมบัติการกำหนดตำแหน่งทำงาน |
Shape.ImageData โยนข้อผิดพลาดหรือเป็นค่าว่าง | รูปร่างไม่ใช่รูปภาพ | ตรวจสอบ Shape.HasImage ก่อนอ่าน ImageData |
| ข้อความลายน้ำไม่ตรงกับฟอนต์ที่ร้องขอ | ไม่ได้จัดหา TextWatermarkOptions | ส่งอินสแตนซ์ TextWatermarkOptions ที่มี FontFamily ตั้งค่าเป็น Watermark.SetText(text, options) |
| รูปร่างลูกของกลุ่มไม่เคลื่อนที่พร้อมกัน | รูปร่างลูกถูกย้ายตำแหน่งโดยตรงแทนที่จะผ่านกลุ่ม | ย้ายหรือปรับขนาด GroupShape เองเพื่อให้การแปลงพิกัดของมันส่งผลต่อรูปร่างลูกทั้งหมด |
FAQ
ความแตกต่างระหว่าง Shape กับ ShapeBase คืออะไร?
ShapeBase เป็นคลาสฐานเชิงนามธรรมที่ใช้ร่วมกันโดย Shape และ GroupShape. ใช้ ShapeBase ในโค้ดที่ควรจัดการกับทั้งสองประเภทอย่างสอดคล้องกัน; ใช้ Shape เมื่อคุณต้องการสมาชิกที่เฉพาะเจาะจงต่ออ็อบเจ็กต์การวาดหนึ่งเดียว เช่น ImageData หรือ Chart.
ฉันจะเพิ่มรูปภาพลงในเอกสารได้อย่างไร?
ใช้หนึ่งในแบบ overload ของ DocumentBuilder.InsertImage — ส่ง Image, เส้นทางไฟล์, Stream, หรืออาเรย์ไบต์, โดยอาจระบุ width/height หรืออาร์กิวเมนต์การกำหนดตำแหน่งเต็มได้.
ฉันจะทำให้รูปทรงลอยอยู่แทนที่จะอยู่ต่อเนื่องกับข้อความอย่างไร?
ตั้งค่า WrapType ของมันเป็นค่าที่ไม่ใช่ inline และตั้งค่า RelativeHorizontalPosition / RelativeVerticalPosition เพื่อให้การชดเชย Left/Top ของรูปทรงถูกตีความตามหน้า, ขอบ, หรือคอลัมน์.
ฉันสามารถเพิ่มลายน้ำข้อความและลายน้ำรูปภาพพร้อมกันได้หรือไม่?
Document.Watermark.Type แสดงประเภทลายน้ำปัจจุบัน; การตั้งค่าลายน้ำใหม่ด้วย SetText หรือ SetImage จะทับสิ่งที่มีอยู่ก่อนหน้า, ดังนั้นเอกสารจะมีลายน้ำที่ใช้งานได้มากที่สุดหนึ่งรายการในหนึ่งเวลา.
ฉันจะลบเงาหรือการสะท้อนออกจากรูปทรงได้อย่างไร?
เรียก Remove() บนวัตถุการจัดรูปแบบที่สอดคล้อง — Shape.ShadowFormat.Remove() หรือ Shape.Reflection.Remove().
API Reference สรุป
| คลาส/เมธอด | คำอธิบาย |
|---|---|
Shape | วัตถุชั้นวาดเดียว — AutoShape, รูปภาพ, กล่องข้อความ, หรือวัตถุ OLE. |
ShapeBase | คลาสฐานเชิงนามธรรมที่ใช้ร่วมกันโดย Shape และ GroupShape. |
GroupShape | กลุ่มของรูปทรงที่ถือเป็นวัตถุวาดหนึ่งเดียว. |
DocumentBuilder.InsertImage | แทรกรูปภาพเป็นรูปทรงที่ตำแหน่งเคอร์เซอร์ พร้อมขนาดและการจัดตำแหน่งที่เป็นตัวเลือก. |
ImageData | ข้อมูลรูปภาพและการปรับภาพ (ครอบ, ความสว่าง, ความคอนทราสต์) บน Shape. |
Fill | การจัดรูปแบบการเติมภายใน — สีทึบ, ไล่ระดับสี, ลวดลาย, หรือรูปภาพ. |
RelativeHorizontalPosition / RelativeVerticalPosition | ตำแหน่งของรูปทรงลอยวัดสัมพันธ์กับอะไร. |
WrapType / WrapSide | วิธีที่ข้อความรอบข้างห่อหุ้มรูปทรง. |
TextBox | การตั้งค่าการจัดวางข้อความสำหรับรูปร่างที่มีข้อความอยู่. |
Document.Watermark | จัดการลายน้ำข้อความหรือรูปภาพของเอกสาร. |
TextWatermarkOptions / ImageWatermarkOptions | กำหนดลักษณะการแสดงผลของลายน้ำข้อความหรือรูปภาพ. |