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
ShapeBasekhi viết mã cần hoạt động trên cả các thể hiệnShapeđơn vàGroupShape; sử dụngShapetrực tiếp khi bạn cần các thành viên đặc thù cho hình ảnh hoặc AutoShape nhưImageDatahoặcChart. - Đặt
RelativeHorizontalPosition/RelativeVerticalPositioncùng vớiWrapTypekhi làm nổi một hình dạng — một hình dạng nội tuyến (mặc định choInsertImage) 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.Watermarkcho một watermark trên toàn tài liệu thay vì tự chèn và định vị mộtShapephí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.HasCharthoặcShape.IsGrouptrước khi truy cậpImageData,Charthoặc các thành viên đặc thù nhóm, vì mộtShapecó 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ân | Sửa |
|---|---|---|
Cài đặt Left/Top trên một hình không có hiệu ứng nào | Hì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ỗng | Hình không phải là hình ảnh | Kiể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ầu | Không có TextWatermarkOptions được cung cấp | Truyề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 nhau | Các phần tử con đã được đặt lại vị trí trực tiếp thay vì thông qua nhóm | Di 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ức | Mô tả |
|---|---|
Shape | Một đối tượng lớp vẽ đơn — AutoShape, hình ảnh, hộp văn bản hoặc đối tượng OLE. |
ShapeBase | Lớp cơ sở trừu tượng được chia sẻ bởi Shape và GroupShape. |
GroupShape | Một nhóm các hình dạng được xử lý như một đối tượng vẽ. |
DocumentBuilder.InsertImage | Chè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. |
ImageData | Dữ 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 / RelativeVerticalPosition | Vị trí của một hình dạng nổi được đo tương đối so với gì. |
WrapType / WrapSide | Cách văn bản xung quanh bọc quanh một hình dạng. |
TextBox | Cài đặt bố cục văn bản cho một hình dạng chứa văn bản. |
Document.Watermark | Quản lý watermark văn bản hoặc hình ảnh của tài liệu. |
TextWatermarkOptions / ImageWatermarkOptions | Cấu hình giao diện của watermark văn bản hoặc hình ảnh. |