Trabajar con imágenes
Aspose.Words permite a los usuarios trabajar con imágenes de una forma muy flexible. En este artículo, puedes explorar sólo algunas de las posibilidades de trabajar con imágenes.
Insertar una imagen
DocumentBuilder proporciona varias sobrecargas del método insert_image que le permiten insertar una imagen en línea o flotante. Si la imagen es un metarchivo EMF o WMF, se insertará en el documento en formato de metarchivo. Todas las demás imágenes se almacenarán en formato PNG. El método insertar imagen puede utilizar imágenes de diferentes fuentes:
- Desde un archivo o
URL
pasando un parámetro de cadena - Desde una secuencia pasando un parámetro
Stream
- Desde una matriz de bytes pasando un parámetro de matriz de bytes
Para cada uno de los métodos insertar imagen, existen más sobrecargas que le permiten insertar una imagen con las siguientes opciones:
- En línea o flotante en una posición específica, por ejemplo, insertar imagen
- Escala porcentual o tamaño personalizado; Además, el método DocumentBuilder.insert_image devuelve un objeto Shape que acaba de crearse e insertarse para que pueda modificar aún más las propiedades del Shape.
Insertar una imagen en línea
Pase una sola cadena que represente un archivo que contenga la imagen a insert_image para insertar la imagen en el documento como un gráfico en línea.
El siguiente ejemplo de código muestra cómo insertar una imagen en línea en la posición del cursor en un documento:
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.insert_image(docs_base.images_dir + "Logo.jpg")
doc.save(docs_base.artifacts_dir+"WorkingWithImages.document_builder_insert_inline_image.doc")
Insertar una imagen flotante (absolutamente posicionada)
El siguiente ejemplo de código muestra cómo insertar una imagen flotante desde un archivo o URL
en una posición y tamaño específicos:
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.insert_image(docs_base.images_dir + "Logo.jpg",
aw.drawing.RelativeHorizontalPosition.MARGIN,
100,
aw.drawing.RelativeVerticalPosition.MARGIN,
100,
200,
100,
aw.drawing.WrapType.SQUARE)
doc.save(docs_base.artifacts_dir+"WorkingWithImages.document_builder_insert_floating_image.doc")
Cómo extraer imágenes de un documento
Todas las imágenes se almacenan dentro de nodos Shape en un Document. Para extraer todas las imágenes o imágenes que tengan un tipo específico del documento, siga estos pasos:
- Utilice el método Document.get_child_nodes para seleccionar todos los nodos Shape.
- Iterar a través de las colecciones de nodos resultantes.
- Verifique la propiedad booleana Shape.has_image.
- Extraer datos de imágenes utilizando la propiedad Shape.image_data.
- Guardar datos de imagen en un archivo.
El siguiente ejemplo de código muestra cómo extraer imágenes de un documento y guardarlas como archivos:
Puede descargar el archivo de plantilla de este ejemplo desde aquí.
Cómo insertar un código de barras en cada página de un documento
Este ejemplo le muestra cómo agregar códigos de barras iguales o diferentes en todas o en páginas específicas de un documento de Word. No existe una forma directa de agregar códigos de barras en todas las páginas de un documento, pero puede usar los métodos move_to_section, move_to_header_footer y insert_image para moverse a cualquier sección o encabezados/pies de página e insertar las imágenes de códigos de barras como puede ver en el siguiente código.
El siguiente ejemplo de código inserta una imagen de código de barras en cada página de un documento.
Bloquear relación de aspecto de la imagen
La relación de aspecto de una forma geométrica es la relación de sus tamaños en diferentes dimensiones. Puede bloquear la relación de aspecto de la imagen usando aspect_ratio_locked. El valor predeterminado de la relación de aspecto de la forma depende del ShapeType. Es True
para ShapeType.IMAGE y False
para otros tipos de formas.
El siguiente ejemplo de código muestra cómo trabajar con la relación de aspecto:
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_image(docs_base.images_dir + "Logo.jpg")
shape.aspect_ratio_locked = False
doc.save(docs_base.artifacts_dir+"WorkingWithImages.set_aspect_ratio_locked.doc")
Cómo obtener límites reales de forma en puntos
Si desea que el cuadro delimitador real de la forma se represente en la página, puede lograrlo utilizando la propiedad bounds_in_points.
El siguiente ejemplo de código muestra cómo utilizar esta propiedad:
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_image(docs_base.images_dir + "Logo.jpg")
shape.aspect_ratio_locked = False
print("\nGets the actual bounds of the shape in points.")
rect = shape.get_shape_renderer().bounds_in_points
print(f"{rect.x}, {rect.y}, {rect.width}, {rect.height}")
Recortar imágenes
El recorte de una imagen generalmente se refiere a la eliminación de las partes exteriores no deseadas de una imagen para ayudar a mejorar el encuadre. También se utiliza para eliminar algunas partes de una imagen para aumentar el enfoque en un área particular.
El siguiente ejemplo de código muestra cómo lograr esto usando Aspose.Words API:
# The path to the documents directory.
inputPath = docs_base.images_dir + "Logo.jpg"
outputPath = docs_base.artifacts_dir + "cropped_logo.jpg"
self.crop_image(inputPath,outputPath, 100, 90, 200, 200)
@staticmethod
def crop_image(inPath : str, outPath : str, left : int, top : int, width : int, height : int) :
doc = aw.Document();
builder = aw.DocumentBuilder(doc)
croppedImage = builder.insert_image(inPath)
src_width_points = croppedImage.width
src_height_points = croppedImage.height
croppedImage.width = aw.ConvertUtil.pixel_to_point(width)
croppedImage.height = aw.ConvertUtil.pixel_to_point(height)
widthRatio = croppedImage.width / src_width_points
heightRatio = croppedImage.height / src_height_points
if (widthRatio< 1) :
croppedImage.image_data.crop_right = 1 - widthRatio
if (heightRatio< 1) :
croppedImage.image_data.crop_bottom = 1 - heightRatio
leftToWidth = aw.ConvertUtil.pixel_to_point(left) / src_width_points
topToHeight = aw.ConvertUtil.pixel_to_point(top) / src_height_points
croppedImage.image_data.crop_left = leftToWidth
croppedImage.image_data.crop_right = croppedImage.image_data.crop_right - leftToWidth
croppedImage.image_data.crop_top = topToHeight
croppedImage.image_data.crop_bottom = croppedImage.image_data.crop_bottom - topToHeight
croppedImage.get_shape_renderer().save(outPath, aw.saving.ImageSaveOptions(aw.SaveFormat.JPEG))
Guardar imágenes como WMF
Aspose.Words proporciona funcionalidad para guardar todas las imágenes disponibles en un documento en formato WMF mientras convierte DOCX a RTF.
El siguiente ejemplo de código muestra cómo guardar imágenes como WMF con opciones de guardado RTF: