Cómo agregar formas de dibujo a documentos de Word en .NET

Cómo agregar formas de dibujo a documentos de Word en .NET

Esta guía muestra cómo agregar contenido a la capa de dibujo de un documento de Word con Aspose.Words FOSS para .NET: insertar un AutoShape, agregar una imagen, posicionarla y envolver texto a su alrededor, rellenarla y aplicarle estilo, agrupar varias formas y establecer una marca de agua. Aspose.Words FOSS para .NET está disponible a través de NuGet o compilando desde el código fuente.

Guía paso a paso

Paso 1: Obtén la biblioteca

Clona el repositorio y compila Aspose.Words.sln en configuración Release, luego agrega una referencia de proyecto a Aspose.Words.csproj desde tu propio proyecto .NET, como se describe en el Guía de instalación. Agrega using Aspose.Words; and using Aspose.Words.Drawing; en la parte superior de cualquier archivo que trabaje con formas.


Paso 2: Agrega un AutoShape

Construye una forma directamente con new Shape(doc, shapeType), donde shapeType es un valor ShapeType como Rectangle, Ellipse, Star o TextBox, y luego insértala en el árbol con DocumentBuilder.InsertNode(node). Shape es la clase concreta y sellada que construyes y configuras; deriva de la clase abstracta ShapeBase, que define la posición (Left, Top, Width, Height, Rotation) y los sub-objetos de formato (Fill, Stroke, ShadowFormat, Glow, Reflection) compartidos con GroupShape.


Paso 3: Añadir una imagen

DocumentBuilder.InsertImage es la ruta directa para imágenes: las sobrecargas aceptan un Image, una ruta de archivo, un Stream, o una matriz de bytes cruda, con sobrecargas adicionales que toman width/height explícitos o argumentos de posicionamiento completos (horzPos, left, vertPos, top, width, height, wrapType). La propiedad ImageData del Shape resultante contiene los datos de la imagen — llame a ImageData.SetImage(...) para cambiar la imagen, y use CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast y GrayScale para ajustes básicos.


Paso 4: Posicionar la forma y ajustar el texto

Una forma en línea (el resultado predeterminado de InsertImage) fluye con el texto circundante e ignora las propiedades de posicionamiento hasta que se flota — verifique IsInline para confirmar en qué modo está la forma. Para flotar una forma, establezca WrapType a un valor no en línea y configure RelativeHorizontalPosition / RelativeVerticalPosition (cada uno relativo a Page, Margin, Column, o un ancla similar) junto con los desplazamientos Left/Top. WrapSide controla el ajuste específico por lado, y HorizontalAlignment / VerticalAlignment manejan la alineación relativa simple en lugar de desplazamientos explícitos.


Paso 5: Rellenar y dar estilo a la forma

Shape.Fill (un objeto Fill) pinta el interior de la forma: Fill.Solid(color) para un color sólido, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) para degradados, Fill.Patterned(patternType) para un patrón, y Fill.SetImage(...) para un relleno de imagen — FillType indica cuál está actualmente activo. El contorno proviene de la propiedad Stroke. Para efectos, ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat) y SoftEdge (SoftEdgeFormat) cada uno expone sus propias configuraciones y un método Remove() que elimina el efecto volviendo a ninguno.


Paso 6: Agrupar varias formas

Combine varias formas en una unidad con DocumentBuilder.InsertGroupShape(shapes), que devuelve un GroupShape. GroupShape es a su vez un ShapeBase, por lo que lleva sus propios Fill, ShadowFormat, Glow y Reflection que se aplican al grupo en su conjunto; mueva o cambie el tamaño del GroupShape en lugar de sus hijos individuales para que la transformación de coordenadas del grupo permanezca coherente. Para una forma que contiene texto, Shape.TextBox (un objeto TextBox) controla el relleno (InternalMarginLeft/Right/Top/Bottom), el ajuste automático de tamaño (FitShapeToText), la dirección del texto (LayoutFlow) y la alineación vertical (VerticalAnchor).


Paso 7: Añadir una marca de agua

Document.Watermark gestiona una única marca de agua a nivel de documento, independiente de cualquier forma que hayas insertado manualmente. Llama a Watermark.SetText(text) o SetText(text, options) para una marca de agua de texto, o a SetImage(...) para una marca de agua de imagen; Watermark.Remove() la elimina, y Watermark.Type informa el WatermarkType actual (Text, Image o None). TextWatermarkOptions establece FontFamily, FontSize, Color y Layout (WatermarkLayout.Horizontal o Diagonal); ImageWatermarkOptions establece Scale y IsWashout.

Problemas comunes y soluciones

Setting Left/Top en una forma no tiene efecto visible. La forma sigue siendo en línea (IsInline == true). Establecer WrapType a un valor flotante y establecer RelativeHorizontalPosition/RelativeVerticalPosition para que las propiedades de desplazamiento tengan efecto.

Shape.ImageData lanza o no devuelve nada. La forma no es una forma de imagen. Verifique Shape.HasImage antes de leer ImageData.

Las formas secundarias de un grupo no se mueven juntas. Los hijos fueron reposicionados individualmente en lugar de a través del grupo. Mueva o cambie el tamaño del GroupShape en sí mismo, por lo que su transformación de coordenadas se aplica a cada hijo.

El texto de la marca de agua no utiliza la fuente solicitada. No TextWatermarkOptions se pasó. Llamar Watermark.SetText(text, options) con un TextWatermarkOptions instancia cuya FontFamily está configurada.

Preguntas frecuentes

¿Cuál es la diferencia entre Shape y ShapeBase?

ShapeBase es la clase base abstracta compartida por Shape y GroupShape. Escribe código contra ShapeBase cuando debe manejar cualquiera de los dos tipos de forma uniforme; usa Shape directamente para miembros específicos de un único objeto de dibujo, como ImageData.

¿Cómo inserto una imagen con un tamaño específico?

Utiliza una sobrecarga de DocumentBuilder.InsertImage que acepte argumentos explícitos de width y height, junto con la fuente de la imagen (un Image, ruta de archivo, Stream o matriz de bytes).

¿Cómo hago que una forma flote en lugar de estar en línea con el texto?

Establece su WrapType a un valor no en línea y configura RelativeHorizontalPosition / RelativeVerticalPosition para que los desplazamientos Left/Top se interpreten en relación con la página, el margen o la columna.

¿Puede un documento tener simultáneamente una marca de agua de texto y una de imagen?

No. Document.Watermark.Type informa del tipo de marca de agua actual; llamar a SetText o SetImage de nuevo reemplaza cualquier marca de agua que se haya establecido previamente.

¿Cómo elimino una sombra o reflexión de una forma?

Llame a Remove() en el objeto de formato correspondiente — Shape.ShadowFormat.Remove() o Shape.Reflection.Remove().

Ver también

 Español