Vẽ Hình và Đánh Dấu Nước

Vẽ Hình Dạng và Đánh Dấu Nước

Các tài liệu Word giữ AutoShapes, hình ảnh, hộp văn bản và các đối tượng OLE trong một lớp vẽ riêng biệt, tách biệt khỏi luồng văn bản đoạn/đoạn chạy. Aspose.Words FOSS cho .NET mô hình hóa lớp này bằng lớp Shape (các đối tượng vẽ cụ thể) và lớp cơ sở trừu tượng ShapeBase của nó, đều thuộc không gian tên Aspose.Words.Drawing. Hướng dẫn này bao gồm mô hình hình dạng, chèn hình ảnh và AutoShapes, định vị và bọc, tô màu và hiệu ứng, nhóm, và đánh dấu nước.


Mô hình Hình dạng và ShapeBase

Shape — sealed, và là kiểu bạn làm việc trực tiếp — đại diện cho một AutoShape, hộp văn bản, dạng tự do, đối tượng OLE, điều khiển ActiveX, hoặc hình ảnh trong lớp vẽ. Nó kế thừa từ lớp trừu tượng ShapeBase, cung cấp các thuộc tính chung cho mọi đối tượng vẽ: vị trí (Left, Top, Width, Height, Rotation), giá trị enum ShapeType, và các đối tượng phụ định dạng như Fill, Stroke, ShadowFormat, Glow, và Reflection. GroupShape (cũng là một ShapeBase) đại diện cho một nhóm các hình dạng được xử lý như một đơn vị. Tạo một hình dạng độc lập trực tiếp bằng new Shape(doc, shapeType), trong đó shapeType là một giá trị ShapeType như Rectangle, Ellipse, Star, hoặc TextBox, sau đó chèn nó vào cây bằng DocumentBuilder.InsertNode(node).


Chèn Hình ảnh và AutoShapes bằng DocumentBuilder

Đối với hình ảnh cụ thể, DocumentBuilder.InsertImage là cách tiếp cận trực tiếp hơn: các overload chấp nhận một Image, một đường dẫn tệp, một Stream, hoặc một mảng byte thô, với các overload bổ sung cho phép đặt width/height một cách rõ ràng hoặc vị trí đầy đủ (horzPos, left, vertPos, top, width, height, wrapType). Shape kết quả cung cấp dữ liệu hình ảnh của nó qua thuộc tính ImageData — ImageData.SetImage(...) để thay thế hình ảnh, cùng với CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast, và GrayScale cho các điều chỉnh cơ bản. Các thể hiện GroupShape được tạo bằng DocumentBuilder.InsertGroupShape(shapes).


Định vị và Bọc Văn bản

Vị trí của một hình dạng so với trang được kiểm soát bởi RelativeHorizontalPosition và RelativeVerticalPosition (mỗi cái tương đối với Page, Margin, Column, hoặc các neo tương tự), cùng với các thuộc tính offset Left/Top. HorizontalAlignment và VerticalAlignment xử lý việc căn chỉnh tương đối đơn giản. Cách văn bản xung quanh chảy quanh hình dạng được thiết lập bằng WrapType và, đối với việc bao bọc theo phía cụ thể, WrapSide. IsInline báo cáo liệu hình dạng có chảy cùng văn bản (inline) hay nổi độc lập.


Đổ màu, Đường viền và Hiệu ứng

Shape.Fill (một đối tượng Fill) kiểm soát cách nội thất của hình dạng được tô: Fill.Solid(color) cho màu đồng nhất, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) cho gradient, Fill.Patterned(patternType) cho mẫu, và Fill.SetImage(...) cho đổ màu ảnh; FillType báo cáo cái nào trong số này đang hoạt động. Đường viền được kiểm soát qua thuộc tính Stroke, và các hiệu ứng hình ảnh được hiển thị như các đối tượng định dạng riêng — ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat), và SoftEdge (SoftEdgeFormat) — mỗi cái có phương pháp Remove() riêng để xóa hiệu ứng.


Nhóm Hình dạng và Hộp Văn bản

Nhiều hình dạng có thể được kết hợp thành một GroupShape, mà bản thân nó hoạt động như một ShapeBase duy nhất với các thuộc tính Fill, ShadowFormat, Glow và Reflection riêng. Đối với một hình dạng chứa văn bản, Shape.TextBox (một đối tượng TextBox) cung cấp bố cục đặc thù cho văn bản: InternalMarginLeft/Right/Top/Bottom cho phần đệm, FitShapeToText để tự động thay đổi kích thước hình dạng, LayoutFlow cho hướng văn bản, và VerticalAnchor cho căn chỉnh dọc của văn bản trong hình dạng.


Watermarks

Document.Watermark (một đối tượng Watermark) quản lý một dấu watermark toàn tài liệu độc lập với bất kỳ hình dạng nào. Gọi Watermark.SetText(text) hoặc SetText(text, options) để tạo watermark văn bản, hoặc SetImage(...) để tạo watermark ảnh, và Watermark.Remove() để xóa nó. Watermark.Type báo cáo WatermarkType hiện tại (Text, Image, hoặc None). TextWatermarkOptions kiểm soát FontFamily, FontSize, Color, và Layout (WatermarkLayout.Horizontal hoặc Diagonal); ImageWatermarkOptions kiểm soát Scale và IsWashout.


Mẹo và Thực tiễn Tốt nhất

  • Sử dụng ShapeBase khi viết mã cần hoạt động trên cả các thể hiện Shape đơn và GroupShape; sử dụng Shape trực tiếp khi bạn cần các thành viên đặc thù cho hình ảnh hoặc AutoShape như ImageData hoặc Chart.
  • Đặt RelativeHorizontalPosition / RelativeVerticalPosition cùng với WrapType khi làm nổi một hình dạng — một hình dạng nội tuyến (mặc định cho InsertImage) sẽ bỏ qua các thuộc tính vị trí cho tới khi bạn làm nó nổi.
  • Ưu tiên Document.Watermark cho một watermark trên toàn tài liệu thay vì tự chèn và định vị một Shape phía sau văn bản.
  • Xóa một hiệu ứng bằng phương thức Remove() của đối tượng (ShadowFormat.Remove(), ReflectionFormat.Remove()) thay vì đặt các thuộc tính riêng lẻ về 0.
  • Kiểm tra Shape.HasImage, Shape.HasChart hoặc Shape.IsGroup trước khi truy cập ImageData, Chart hoặc các thành viên đặc thù nhóm, vì một Shape có thể đại diện cho bất kỳ một trong số các loại đối tượng vẽ.

Các vấn đề thường gặp

Vấn đềNguyên nhânSửa
Cài đặt Left/Top trên một hình không có hiệu ứng nàoHình vẫn ở dạng nội tuyến (IsInline == true)Đặt WrapType thành giá trị floating và đặt RelativeHorizontalPosition/RelativeVerticalPosition để các thuộc tính định vị có hiệu lực
Shape.ImageData ném lỗi hoặc rỗngHình không phải là hình ảnhKiểm tra Shape.HasImage trước khi đọc ImageData
Văn bản watermark không khớp với phông chữ yêu cầuKhông có TextWatermarkOptions được cung cấpTruyền một thể hiện TextWatermarkOptions với FontFamily được đặt thành Watermark.SetText(text, options)
Các hình dạng con của một nhóm không di chuyển cùng nhauCác phần tử con đã được đặt lại vị trí trực tiếp thay vì thông qua nhómDi chuyển hoặc thay đổi kích thước GroupShape để phép biến đổi tọa độ của nó áp dụng cho tất cả các phần tử con

FAQ

Sự khác nhau giữa Shape và ShapeBase là gì?

ShapeBase là lớp cơ sở trừu tượng được chia sẻ bởi Shape và GroupShape. Sử dụng ShapeBase trong mã cần xử lý đồng nhất cả hai loại; sử dụng Shape khi bạn cần các thành viên cụ thể cho một đối tượng vẽ duy nhất, chẳng hạn như ImageData hoặc Chart.

Làm thế nào để thêm một hình ảnh vào tài liệu?

Sử dụng một trong các phiên bản quá tải của DocumentBuilder.InsertImage — truyền một Image, một đường dẫn tệp, một Stream, hoặc một mảng byte, tùy chọn kèm width/height hoặc các đối số định vị đầy đủ.

Làm sao để làm cho một hình dạng nổi (float) thay vì nằm trong dòng văn bản?

Đặt WrapType của nó thành giá trị không phải nội dòng và đặt RelativeHorizontalPosition/RelativeVerticalPosition sao cho các độ dịch Left/Top của hình dạng được hiểu tương đối với trang, lề hoặc cột.

Tôi có thể thêm cả watermark văn bản và hình ảnh không?

Document.Watermark.Type phản ánh loại watermark hiện tại; việc đặt một watermark mới bằng SetText hoặc SetImage sẽ thay thế bất kỳ watermark nào đã có trước đó, do đó một tài liệu chỉ có tối đa một watermark đang hoạt động tại một thời điểm.

Làm thế nào để loại bỏ bóng hoặc phản chiếu khỏi một hình dạng?

Gọi Remove() trên đối tượng định dạng tương ứng — Shape.ShadowFormat.Remove() hoặc Shape.Reflection.Remove().


API Reference Tóm tắt

Lớp/Phương thứcMô tả
ShapeMột đối tượng lớp vẽ đơn — AutoShape, hình ảnh, hộp văn bản hoặc đối tượng OLE.
ShapeBaseLớp cơ sở trừu tượng được chia sẻ bởi Shape và GroupShape.
GroupShapeMột nhóm các hình dạng được xử lý như một đối tượng vẽ.
DocumentBuilder.InsertImageChèn một hình dạng ảnh tại con trỏ, với kích thước và vị trí tùy chọn.
ImageDataDữ liệu hình ảnh và các điều chỉnh hình ảnh (crop, brightness, contrast) trên một Shape.
FillĐịnh dạng tô nền bên trong — solid, gradient, pattern, hoặc picture.
RelativeHorizontalPosition / RelativeVerticalPositionVị trí của một hình dạng nổi được đo tương đối so với gì.
WrapType / WrapSideCách văn bản xung quanh bọc quanh một hình dạng.
TextBoxCài đặt bố cục văn bản cho một hình dạng chứa văn bản.
Document.WatermarkQuản lý watermark văn bản hoặc hình ảnh của tài liệu.
TextWatermarkOptions / ImageWatermarkOptionsCấu hình giao diện của watermark văn bản hoặc hình ảnh.

Xem thêm

 Tiếng Việt