도형 및 워터마크 그리기
도형 그리기 및 워터마크
Word 문서는 AutoShapes, 그림, 텍스트 상자 및 OLE 개체를 별도의 그리기 레이어에 보관하며, 이는 단락/런 텍스트 흐름과는 구분됩니다. Aspose.Words .NET용 FOSS는 이 레이어를 Shape 클래스(구체적인 그리기 개체)와 그 추상 기본 클래스 ShapeBase로 모델링하며, 두 클래스는 모두 Aspose.Words.Drawing 네임스페이스의 일부입니다. 이 가이드는 도형 모델, 이미지 및 AutoShapes 삽입, 위치 지정 및 텍스트 래핑, 채우기 및 효과, 그룹화, 그리고 워터마크를 다룹니다.
도형 및 ShapeBase 모델
Shape — sealed이며 직접 작업하는 유형 — 은 그리기 레이어에서 AutoShape, 텍스트 상자, 자유형, OLE 개체, ActiveX 컨트롤 또는 그림을 나타냅니다. 이는 추상 클래스 ShapeBase을 상속받으며, 이 클래스는 모든 그리기 개체가 공유하는 속성들을 제공합니다: 위치 (Left, Top, Width, Height, Rotation), ShapeType 열거형 값, 그리고 Fill, Stroke, ShadowFormat, Glow, Reflection와 같은 서식 하위 개체들. GroupShape(또한 ShapeBase임)는 하나의 단위로 취급되는 도형 그룹을 나타냅니다. 독립형 도형은 new Shape(doc, shapeType)를 사용해 직접 생성할 수 있으며, 여기서 shapeType은 Rectangle, Ellipse, Star, TextBox와 같은 ShapeType 값입니다. 그런 다음 DocumentBuilder.InsertNode(node)를 사용해 트리에 삽입합니다.
이미지와 AutoShapes을 DocumentBuilder로 삽입하기
특히 그림의 경우, DocumentBuilder.InsertImage이 더 직접적인 방법입니다: 오버로드는 Image, 파일 경로, Stream, 또는 원시 바이트 배열을 받아들이며, 명시적인 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은 도형이 텍스트와 함께 흐르는지(인라인) 아니면 독립적으로 떠 있는지를 보고합니다.
채우기, 스트로크 및 효과
Shape.Fill (a Fill object) 은(는) 도형 내부가 어떻게 채워지는지를 제어합니다: 평면 색상의 경우 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 (a TextBox object)는 텍스트 전용 레이아웃을 노출합니다: 패딩을 위한 InternalMarginLeft/Right/Top/Bottom, 모양을 자동 크기 조정하기 위한 FitShapeToText, 텍스트 방향을 위한 LayoutFlow, 그리고 모양 내 수직 텍스트 정렬을 위한 VerticalAnchor.
Watermarks
Document.Watermark (a 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 를 제어합니다.
팁 및 모범 사례
- 단일
Shape및GroupShape인스턴스 모두에서 작동해야 하는 코드를 작성할 때는ShapeBase를 사용하십시오;ImageData또는Chart와 같은 그림 또는 AutoShape 전용 멤버가 필요할 경우에는Shape를 직접 사용하십시오. - 도형을 띄울 때
RelativeHorizontalPosition/RelativeVerticalPosition을WrapType와 함께 설정하십시오 — 인라인 도형(InsertImage의 기본값)은 띄우기 전까지 위치 속성을 무시합니다. - 텍스트 뒤에
Shape을 수동으로 삽입하고 위치를 지정하는 대신, 전체 문서에 적용되는 단일 워터마크에는Document.Watermark를 사용하는 것이 좋습니다. - 개별 속성을 0으로 설정하는 대신, 객체의
Remove()메서드(ShadowFormat.Remove(),ReflectionFormat.Remove())를 사용하여 효과를 지우십시오. ImageData,Chart또는 그룹 전용 멤버에 접근하기 전에Shape.HasImage,Shape.HasChart또는Shape.IsGroup를 확인하십시오.Shape는 여러 종류의 그리기 객체 중 하나를 나타낼 수 있기 때문입니다.
일반적인 문제
| 문제 | 원인 | 해결 |
|---|---|---|
형상에 Left/Top을 설정해도 눈에 보이는 효과가 없습니다 | 형상이 여전히 인라인(IsInline == true)입니다 | WrapType을 플로팅 값으로 설정하고 RelativeHorizontalPosition/RelativeVerticalPosition를 설정하여 위치 지정 속성이 적용되도록 합니다 |
Shape.ImageData이 예외를 발생시키거나 비어 있습니다 | 형상이 그림 형상이 아닙니다 | ImageData를 읽기 전에 Shape.HasImage를 확인하십시오. |
| 워터마크 텍스트가 요청된 글꼴과 일치하지 않습니다. | TextWatermarkOptions가 제공되지 않았습니다. | FontFamily이(가) Watermark.SetText(text, options)로 설정된 TextWatermarkOptions 인스턴스를 전달하십시오. |
| 그룹의 자식 도형들이 함께 움직이지 않습니다. | 자식들이 그룹을 통해서가 아니라 직접 재배치되었습니다. | GroupShape 자체를 이동하거나 크기를 조정하여 좌표 변환이 모든 자식에게 적용되도록 하십시오. |
FAQ
Shape와 ShapeBase의 차이점은 무엇입니까?
ShapeBase은(는) Shape과 GroupShape가 공유하는 추상 기본 클래스입니다. 두 종류를 균일하게 처리해야 하는 코드에서는 ShapeBase을(를) 사용하고, ImageData나 Chart과 같이 단일 도형 개체에 특화된 멤버가 필요할 때는 Shape을(를) 사용하십시오.
문서에 그림을 추가하려면 어떻게 해야 하나요?
다음 중 하나의 DocumentBuilder.InsertImage 오버로드를 사용하십시오 — Image 객체, 파일 경로, Stream 또는 바이트 배열을 전달하고, 선택적으로 width/height 또는 전체 위치 인수를 사용할 수 있습니다.
도형을 텍스트와 인라인으로 배치하지 않고 떠 있도록 하려면 어떻게 해야 하나요?
그의 WrapType를 인라인이 아닌 값으로 설정하고, 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 | 텍스트 또는 이미지 워터마크의 모양을 구성합니다. |