วิธีเพิ่มรูปทรงการวาดลงในเอกสาร Word ใน .NET
คำแนะนำนี้แสดงวิธีเพิ่มเนื้อหาไปยังชั้นการวาดของเอกสาร Word ด้วย Aspose.Words FOSS สำหรับ .NET: แทรก AutoShape, เพิ่มรูปภาพ, กำหนดตำแหน่งและห่อหุ้มข้อความรอบ ๆ, เติมสีและจัดสไตล์, กลุ่มรูปทรงหลายรูป, และตั้งลายน้ำ. Aspose.Words FOSS สำหรับ .NET มีให้ผ่าน NuGet หรือโดยการสร้างจากซอร์สโค้ด.
คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 1: รับไลบรารี
คัดลอกรีโพซิทอรีและทำการสร้าง Aspose.Words.sln ในโหมด Release จากนั้นเพิ่มการอ้างอิงโครงการไปยัง Aspose.Words.csproj จากโครงการ .NET ของคุณเอง ตามที่อธิบายใน คู่มือการติดตั้ง. เพิ่ม using Aspose.Words; and using Aspose.Words.Drawing; ที่ส่วนหัวของไฟล์ใด ๆ ที่ทำงานกับรูปทรง.
ขั้นตอนที่ 2: เพิ่ม AutoShape
สร้างรูปทรงโดยตรงด้วย new Shape(doc, shapeType), โดยที่ shapeType เป็นค่าชนิด ShapeType เช่น Rectangle, Ellipse, Star, หรือ TextBox, จากนั้นแทรกมันเข้าสู่โครงสร้างต้นไม้ด้วย DocumentBuilder.InsertNode(node). Shape คือคลาสที่เป็นคอนกรีตและปิดท้ายที่คุณสร้างและกำหนดค่า; มันสืบทอดจาก ShapeBase แบบนามธรรม, ซึ่งกำหนดตำแหน่ง (Left, Top, Width, Height, Rotation) และวัตถุย่อยการจัดรูปแบบ (Fill, Stroke, ShadowFormat, Glow, Reflection) ที่ใช้ร่วมกับ GroupShape.
ขั้นตอนที่ 3: เพิ่มรูปภาพ
DocumentBuilder.InsertImage คือวิธีโดยตรงสำหรับรูปภาพ: การ overload รับ Image , เส้นทางไฟล์, Stream หรืออาร์เรย์ไบต์ดิบ, พร้อมการ overload เพิ่มเติมที่รับ width/height อย่างชัดเจนหรืออาร์กิวเมนต์การกำหนดตำแหน่งเต็มรูปแบบ (horzPos, left, vertPos, top, width, height, wrapType). คุณสมบัติ ImageData ของ Shape ที่ได้จะเก็บข้อมูลรูปภาพ — เรียก ImageData.SetImage(...) เพื่อเปลี่ยนภาพ, และใช้ CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast, และ GrayScale สำหรับการปรับพื้นฐาน.
ขั้นตอนที่ 4: กำหนดตำแหน่งรูปทรงและทำให้ข้อความห่อหุ้ม
รูปทรงแบบอินไลน์ (ผลลัพธ์เริ่มต้นของ InsertImage) จะไหลตามข้อความรอบข้างและไม่สนใจคุณสมบัติการกำหนดตำแหน่งจนกว่าจะลอยขึ้น — ตรวจสอบ IsInline เพื่อยืนยันว่ารูปทรงอยู่ในโหมดใด. เพื่อทำให้รูปทรงลอย, ตั้งค่า WrapType ให้เป็นค่าไม่ใช่อินไลน์และตั้งค่า RelativeHorizontalPosition / RelativeVerticalPosition (แต่ละค่าอ้างอิงถึง Page, Margin, Column หรือจุดยึดที่คล้ายกัน) พร้อมกับค่าออฟเซ็ต Left/Top. WrapSide ควบคุมการห่อหุ้มตามด้าน, และ HorizontalAlignment / VerticalAlignment จัดการการจัดแนวสัมพันธ์แบบง่ายแทนการใช้ค่าออฟเซ็ตโดยตรง.
ขั้นตอนที่ 5: เติมและจัดสไตล์รูปทรง
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() ที่ล้างเอฟเฟกต์กลับเป็นไม่มี.
ขั้นตอนที่ 6: กลุ่มหลายรูปทรง
รวมหลายรูปทรงเป็นหน่วยเดียวด้วย DocumentBuilder.InsertGroupShape(shapes), ซึ่งจะคืนค่า GroupShape. GroupShape เองเป็น ShapeBase, ดังนั้นจึงมี Fill, ShadowFormat, Glow, และ Reflection ของตนเองที่ใช้กับกลุ่มทั้งหมด; ย้ายหรือปรับขนาด GroupShape แทนการปรับขนาดของลูกแต่ละตัวเพื่อให้การแปลงพิกัดของกลุ่มคงที่. สำหรับรูปทรงที่มีข้อความ, Shape.TextBox (อ็อบเจกต์ TextBox) ควบคุมการเว้นระยะ (InternalMarginLeft/Right/Top/Bottom), การปรับขนาดอัตโนมัติ (FitShapeToText), ทิศทางข้อความ (LayoutFlow), และการจัดแนวแนวตั้ง (VerticalAnchor).
ขั้นตอนที่ 7: เพิ่มลายน้ำ
Document.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.
ปัญหาทั่วไปและวิธีแก้
Setting Left/Top บนรูปทรงไม่มีผลที่มองเห็นได้. รูปทรงยังคงเป็นอินไลน์IsInline == true). ตั้งค่า WrapType เป็นค่าที่ลอยและตั้งค่า RelativeHorizontalPosition/RelativeVerticalPosition เพื่อให้คุณสมบัติการชดเชยทำงาน.
Shape.ImageData โยนข้อยกเว้นหรือไม่คืนค่า. รูปร่างไม่ใช่รูปภาพ ตรวจสอบ Shape.HasImage ก่อนอ่าน ImageData.
รูปร่างลูกของกลุ่มไม่เคลื่อนที่พร้อมกัน. ลูก ๆ ถูกย้ายตำแหน่งแยกกันแทนที่จะผ่านกลุ่ม. ย้ายหรือปรับขนาด GroupShape ตัวมันเองดังนั้นการแปลงพิกัดของมันจึงใช้กับลูกทุกตัว.
ข้อความลายน้ำไม่ใช้แบบอักษรที่ร้องขอ. ไม่ TextWatermarkOptions ถูกส่งผ่านแล้ว. เรียก Watermark.SetText(text, options) ด้วย a TextWatermarkOptions อินสแตนซ์ที่มี FontFamily ถูกตั้งค่า.
คำถามที่พบบ่อย
ความแตกต่างระหว่าง Shape กับ ShapeBase คืออะไร?
ShapeBase คือคลาสฐานแบบนามธรรมที่ใช้ร่วมกันโดย Shape และ GroupShape. เขียนโค้ดโดยอ้างอิง ShapeBase เมื่อควรจัดการกับประเภทใดประเภทหนึ่งอย่างสม่ำเสมอ; ใช้ Shape โดยตรงสำหรับสมาชิกที่เฉพาะกับวัตถุการวาดเดียว เช่น ImageData.
ฉันจะแทรกรูปภาพที่มีขนาดเฉพาะได้อย่างไร?
ใช้การ overload ของ DocumentBuilder.InsertImage ที่รับอาร์กิวเมนต์ width และ height อย่างชัดเจน พร้อมกับแหล่งภาพ (เช่น Image, เส้นทางไฟล์, Stream, หรืออาร์เรย์ไบต์).
ฉันจะทำให้รูปทรงลอยอยู่แทนที่จะวางในบรรทัดเดียวกับข้อความได้อย่างไร?
ตั้งค่า WrapType ของมันเป็นค่าที่ไม่ใช่ inline และตั้งค่า RelativeHorizontalPosition / RelativeVerticalPosition เพื่อให้การออฟเซ็ต Left/Top ถูกตีความตามหน้า, ระยะขอบ, หรือคอลัมน์.
เอกสารสามารถมีลายน้ำข้อความและลายน้ำภาพพร้อมกันได้หรือไม่?
No. Document.Watermark.Type รายงานประเภทของลายน้ำปัจจุบัน; การเรียก SetText หรือ SetImage อีกครั้งจะทับลายน้ำที่ตั้งไว้ก่อนหน้า.
ฉันจะลบเงาหรือการสะท้อนออกจากรูปร่างได้อย่างไร?
เรียก Remove() บนวัตถุจัดรูปแบบที่สอดคล้อง — Shape.ShadowFormat.Remove() หรือ Shape.Reflection.Remove().