Trabalhando com imagens

Aspose.Words permite aos usuários trabalhar com imagens de uma forma muito flexível. Neste artigo você poderá explorar apenas algumas das possibilidades de trabalhar com imagens.

Inserindo uma imagem

DocumentBuilder fornece diversas sobrecargas do método insert_image que permitem inserir uma imagem embutida ou flutuante. Se a imagem for um metarquivo EMF ou WMF, ela será inserida no documento no formato metarquivo. Todas as outras imagens serão armazenadas no formato PNG. O método Inserir Imagem pode usar imagens de diferentes fontes:

  • De um arquivo ou URL passando um parâmetro string
  • De um stream passando um parâmetro Stream
  • A partir de uma matriz de bytes, passando um parâmetro de matriz de bytes

Para cada um dos métodos Inserir Imagem, existem sobrecargas adicionais que permitem inserir uma imagem com as seguintes opções:

  • Inline ou flutuante em uma posição específica, por exemplo, Inserir Imagem
  • Escala percentual ou tamanho personalizado; além disso, o método DocumentBuilder.insert_image retorna um objeto Shape que acabou de ser criado e inserido para que você possa modificar ainda mais as propriedades do Shape

Inserindo uma imagem embutida

Passe uma única string representando um arquivo que contém a imagem para insert_image para inserir a imagem no documento como um gráfico embutido.

O exemplo de código a seguir mostra como inserir uma imagem embutida na posição do cursor em um 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")

Inserindo uma imagem flutuante (absolutamente posicionada)

O exemplo de código a seguir mostra como inserir uma imagem flutuante de um arquivo ou URL em uma posição e tamanho especificados:

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")

Como extrair imagens de um documento

Todas as imagens são armazenadas dentro de nós Shape em um Document. Para extrair todas as imagens ou imagens de tipo específico do documento, siga estas etapas:

O exemplo de código a seguir mostra como extrair imagens de um documento e salvá-las como arquivos:

Você pode baixar o arquivo de modelo deste exemplo em aqui.

Como inserir código de barras em cada página de um documento

Este exemplo demonstra como adicionar códigos de barras iguais ou diferentes em todas ou em páginas específicas de um documento do Word. Não existe uma maneira direta de adicionar códigos de barras em todas as páginas de um documento, mas você pode usar os métodos move_to_section, move_to_header_footer e insert_image para mover para qualquer seção ou cabeçalhos/rodapés e inserir as imagens de código de barras como você pode ver no código a seguir.

O exemplo de código a seguir insere uma imagem de código de barras em cada página de um documento.

Bloquear proporção da imagem

A proporção de uma forma geométrica é a proporção de seus tamanhos em diferentes dimensões. Você pode bloquear a proporção da imagem usando aspect_ratio_locked. O valor padrão da proporção da forma depende do ShapeType. É True para ShapeType.IMAGE e False para outros tipos de formas.

O exemplo de código a seguir mostra como trabalhar com proporção:

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")

Como obter limites reais de forma em pontos

Se desejar que a caixa delimitadora real da forma seja renderizada na página, você pode fazer isso usando a propriedade bounds_in_points.

O exemplo de código a seguir mostra como usar essa propriedade:

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}")

Cortar imagens

O corte de uma imagem geralmente se refere à remoção das partes externas indesejadas de uma imagem para ajudar a melhorar o enquadramento. Também é usado para remover algumas partes de uma imagem para aumentar o foco em uma área específica.

O exemplo de código a seguir mostra como fazer isso 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))

Salvando imagens como WMF

Aspose.Words fornece funcionalidade para salvar todas as imagens disponíveis em um documento no formato WMF enquanto converte DOCX em RTF.

O exemplo de código a seguir mostra como salvar imagens como WMF com opções de salvamento RTF: