Rendering Shapes Por separado de un documento

Al procesar documentos, una tarea común es extraer todas las imágenes encontradas en el documento y exportarlas a una ubicación externa. Esta tarea se vuelve sencilla con la Aspose.Words API, que ya proporciona la funcionalidad para extraer y guardar datos de imagen. Sin embargo, a veces puede querer extraer de forma similar otros tipos de contenido gráfico que están representados por un tipo diferente de objeto de dibujo, por ejemplo, una caja de texto que contiene párrafos, formas de flecha y una imagen pequeña. No hay una manera sencilla de hacer este objeto ya que es una combinación de elementos de contenido individuales. También puede encontrar un caso cuando el contenido se ha agrupado en el objeto que parece una sola imagen.

Aspose.Words proporciona funcionalidad para extraer este tipo de contenido de la misma manera que puede extraer una imagen simple de la forma como el contenido renderizado. Este artículo describe cómo utilizar esta funcionalidad para dar formas independientemente del documento.

Tipos de Forma en Aspose.Words

Todo el contenido en una capa de dibujo de documento está representado por Shape o GroupShape nodo en el Aspose.Words Módulo de Objetos de DocumentosDOM). Tal contenido puede ser cajas de texto, imágenes, AutoShapes, objetos OLE, etc. Algunos campos también se importan como formas, por ejemplo, INCLUDEPICTURE campo.

Una imagen simple está representada por una Shape nodo de ShapeType.Image. Este nodo de forma no tiene ganglios infantiles pero los datos de imagen contenidos en este nodo de forma pueden ser accedidos por el Shape.ImageData propiedad. Por otro lado, también se puede formar una forma de muchos nodos infantiles. Por ejemplo, una forma del cuadro de texto, que está representada por el ShapeType.TextBox propiedad, se puede componer de muchos nodos, como Paragraph y Table. La mayoría de las formas pueden incluir Paragraph y Table Nodos de nivel de bloque. Estos son los mismos nodos que los que aparecen en el cuerpo principal. Las formas son siempre partes de algún párrafo, ya sea directamente en línea o ancladas a la Párrafo, pero “flotando” en cualquier lugar de la página de documento.

rendering-shapes-separately-from-a-document-aspose-words-java-1

Un documento también puede contener formas agrupadas. Grouping se puede activar en Microsoft Word seleccionando múltiples objetos y haciendo clic en “Group” en el menú de clic derecho.

rendering-shapes-separately-from-a-document-aspose-words-java-2

In Aspose.Words, estos grupos de formas están representados por GroupShape Nodo. Estos también pueden ser invocados de la misma manera para hacer que todo el grupo a la imagen.

rendering-shapes-separately-from-a-document-aspose-words-java-3

El formato DOCX puede contener tipos especiales de imágenes, como diagramas o gráficos. Estas formas también están representadas a través de Shape nodo en Aspose.Words, que también proporciona un método similar para renderizarlas como imágenes. Por diseño, una forma no puede contener otra forma como niño, a menos que esa forma sea una imagen (ShapeType.Image). Por ejemplo, Microsoft Word no le permite insertar una caja de texto dentro de otra caja de texto.

Los tipos de formas descritos anteriormente proporcionan un método especial para renderizar las formas a través de ShapeRenderer clase. Una instancia del ShapeRenderer clase es recuperada para un Shape o GroupShape a través de GetShapeRenderer método o pasando el Shape al constructor del ShapeRenderer clase. Esta clase proporciona acceso a los miembros, que permiten dar forma a lo siguiente:

  • Archivo en el disco usando el Save método sobrecarga
  • Corriente usando el Save método sobrecarga
  • Gráficos Objeto utilizando el RenderToSize y RenderToScale métodos

Rendering to File or Stream

El Save método proporciona sobrecargas que hacen una forma directamente a un archivo o flujo. Ambas sobrecargas aceptan una instancia de la ImageSaveOptions clase, que permite definir opciones para renderizar la forma. Esto funciona de la misma manera que el Document.Save método. A pesar de que este parámetro es necesario, puede pasar un valor nulo, especificando que no hay opciones personalizadas.

La forma se puede exportar en cualquier formato de imagen especificado en el SaveFormat enumeración. Por ejemplo, la imagen puede ser renderizada como una imagen de mapa, como JPEG especificando la imagen SaveFormat.Jpeg enumeración, o como imagen vectorial, como EMF especificando el SaveFormat.Emf.

El ejemplo de código a continuación ilustra la forma de una imagen EMF separada del documento, y el ahorro al disco:

El ejemplo de código que figura a continuación ilustra la forma de una imagen JPEG separadamente del documento y el ahorro a una secuencia:

El ImageSaveOptions clase le permite especificar una variedad de opciones que controlan cómo se renderiza la imagen. La funcionalidad descrita anteriormente puede aplicarse de la misma manera a la GroupShape y Shape nodos.

Rendering a a Graphics Objeto

Rendering directly to a Graphics objeto le permite definir su propia configuración y el estado para el Graphics objeto. Un escenario común implica convertir una forma directamente en un Graphics objeto recuperado de un Windows Forma o un Bitmap. Cuando el Shape el nodo se hace, la configuración afectará la apariencia de la forma. Por ejemplo, puede girar o escalar la forma utilizando la RotateTransform o ScaleTransform métodos para Graphics objeto.

El ejemplo a continuación muestra cómo hacer una forma a una Graphics objeto separado del documento y aplicar rotación a la imagen renderizada:

Del mismo modo, al RenderToSize método, el RenderToSizemétodo heredado del NodeRendererBase es útil para crear miniaturas de contenido de documentos. El tamaño de la forma se especifica a través del constructor. El RenderToSize método acepta el Graphics objeto, las coordenadas X y Y de la posición de la imagen, y el tamaño de la imagen (anchura y altura) que se dibujará sobre la Graphics objeto.

El Shape se puede hacer a cierta escala utilizando ShapeRenderer.RenderToScale método heredado del NodeRendererBase clase. Esto es similar al Document.RenderToScale método que acepta los mismos parámetros principales. La diferencia entre estos dos métodos es que con ShapeRenderer.RenderToScale método, en lugar de un tamaño literal, usted elige un valor flotante que escala la forma durante su renderización. Si el valor flotante es igual a 1.0 hace que la forma sea renderizada al 100% de su tamaño original. Un valor flotante de 0,5 reducirá el tamaño de la imagen a la mitad.

Rendering a Shape Image

El Shape clase representa objetos en la capa de dibujo, como una AutoShape, cuadro de texto, freeform, objeto OLE, control ActiveX o una imagen. Usando el Shape clase, puede crear o modificar formas en una Microsoft Word documento. Una propiedad importante de una forma es su ShapeType. Las formas de diferentes tipos pueden tener diferentes capacidades en un documento de Word. Por ejemplo, sólo imágenes y formas OLE pueden tener imágenes dentro de ellas mientras que la mayoría de las formas pueden tener texto solamente.

El siguiente ejemplo muestra cómo hacer una imagen de Forma a una imagen JPEG separada del documento y guardarla en el disco:

Recuperar un tamaño de forma

El ShapeRenderer clase también proporciona funcionalidad para recuperar el tamaño de la forma en píxeles a través de la GetSizeInPixels método. Este método acepta dos parámetros de flotación (Single) – la escala y DPI, que se utilizan en el cálculo del tamaño de la forma cuando se produce la forma. El método devuelve el Size objeto, que contiene el ancho y la altura del tamaño calculado. Esto es útil cuando se requiere conocer el tamaño de la forma renderizada de antemano, por ejemplo al crear un nuevo Bitmap de la salida renderizada.

El siguiente ejemplo muestra cómo crear un nuevo objeto Bitmap y Graphics con el ancho y la altura de la forma a ser renderizado:

Al utilizar el RenderToSize o RenderToScale métodos, el tamaño de imagen renderizado también se devuelve en el SizeF objeto. Esto se puede asignar a una variable y utilizar si es necesario.

El SizeInPoints propiedad devuelve el tamaño de la Forma medida en puntos (ver ShapeRenderer). El resultado es un SizeF objeto que contiene el ancho y la altura.