vb.netimage-processingms-wordinsert-image

Create ImageBox in Microsoft Word document and insert image with Visual Basic


I'm working on a project in VB which has to do with document processing in Microsoft Word. I have difficulty on creating an ImageBox with certain size in a the document. Does anybody have an idea on how to do this? Can it even be done? The goal is to create the ImageBox and then insert an image to this box. The image must stretch and get the size of the ImageBox.

What I've done until now is this:

(...)  
Dim NewSize As Size
NewSize = New Size(Width, Height)
ResizedImage = New Bitmap(ImageToInsert, NewSize)
(...)
WordDocument.AddPicture(DirectoryAddress & "\ResizedImage." & ImageExtension)

Though, what this code does, is to insert an image with specified size in the Word document. What I want is, the image to stretch and get the size of the ImageBox that will have been created. I hope I was clear enough.

Thanks in advance!


Solution

  • Thanks to @CindyMeister and @macropod I managed to create what I needed. So here is the answer:

    Dim rng As Word.Range
    (...)
    rng = para.Range
    (...)
    
    Dim img As Image = Image.FromFile(imagePath)
    Dim objtable as Word.Table
    
    'In my case I needed a temporary paragraph to be added for my project and later delete it. If you don't need it, just don't declare it.
    
    Dim tempTablePara As Word.Paragraph = WordDoc.Content.Paragraphs.Add() 'Previously declared WordDoc as Word.Document
    objtable = WordDoc.Tables.Add(rng, 1, 1)
    objtable.Cell(1, 1).Width = img.Width * 0.75 'width is in pixels, convert to points
    objtable.Cell(1, 1).Height = img.Height* 0.75 'height is in pixels, convert to points
    objtable.Cell(1, 1).HeightRule = Word.WdRowHeightRule.wdRowHeightExactly ' Done so as the cell to get the same size with the picture
    
    Dim objShapes = objtable.Range.InlineShapes
    
    rng = tempTablePara.Range
    tempTablePara.Range.Delete()
    
    objShapes.AddPicture(imagePath)
    
    'add cell borders
    
    With objtable.Rows(1).Cells.Borders
    .InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle
    .OutsideLineStyle = Word.WdLineStyle.wdLineStyleSingle
    End With
    

    Extra. What I was looking for, was to insert an image to an already designed frame in a word document. So for me the pre-designed frame was a one cell table. If you just want to add a frame around a picture then the following code should work just fine.

    Dim shape
    (...)
    
    shape = WordDoc.InlineShapes.AddPicture(imagePath, Type.Missing, Type.Missing, rng)
    rng = shape.Range
    Dim objshape As Word.InlineShape
    objshape = shape
    objshape.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleSingleWavy
    objshape.Borders.OutsideColor = Word.WdColor.wdColorBlack
    rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)