Горе с использованием Word Interop - вставка изображения в шаблон - PullRequest
0 голосов
/ 12 декабря 2018

Я пробовал несколько разных решений, чтобы попытаться вставить изображение в шаблон документа.У меня была пара успехов, но не с желаемым эффектом.По сути, я просто пытаюсь вставить изображение в верхней части документа над всем другим содержимым.Изображение в лучшем случае должно переместить остальное содержимое вниз по странице, а не на что-либо сверху.

    With objDoc
        Dim filePath As String = Path.Combine(appPath, fileName)
        If Not filePath = "" Then
            Dim img As Image = Image.FromFile(filePath)
            Dim imgX As Integer = img.Width
            Dim imgY As Integer = img.Height

            'insert picture here
        End If
    End With

Заменив приведенный выше комментарий следующим, я добился успеха ... вроде.Следующее вставит изображение в заголовок.Но изображение будет масштабироваться очень странным образом, независимо от определения параметров изображения.

            .PageSetup.DifferentFirstPageHeaderFooter = True
            .Sections(1).Headers(Word.WdHeaderFooterIndex.wdHeaderFooterPrimary).Shapes.AddPicture(
               FileName:=filePath,
               LinkToFile:=False,
               SaveWithDocument:=True,
               Left:=0,
               Top:=0,
               Width:=imgX,
               Height:=imgY
        ).ConvertToInlineShape()

Ниже будет вставлено изображение под заголовком и над текстом.Попытка преобразовать его в линейную форму вызывает исключение.Предоставление холсту 0,0 начала в этом случае игнорирует поля шаблона и помещает изображение к левому краю листа.Даже если бы мне пришлось сдвинуть его вправо и заставить текст сместиться вниз, это все равно нежелательно, так как в верхней части слишком много пустого пространства.

        Dim objCanvas As Word.Shape = objWordApp.ActiveDocument.Shapes.AddCanvas(Left:=0, Top:=0, Width:=imgX, Height:=imgY)
        objCanvas.CanvasItems.AddPicture(FileName:=filePath, LinkToFile:=False, SaveWithDocument:=True)

Остальное из следующих попытокчто я обнаружил, просеивая через MSDN и различные другие выходы.Ни на одном из них вообще нет изображения.

               '.InlineShapes.AddPicture(filePath, Type.Missing, Type.Missing, Type.Missing)

                'Dim objRng As Word.Range = .Range()
                'objRng.InlineShapes.AddPicture(filePath)

                'Dim objInlineShape As Word.InlineShape = objWordApp.Selection.InlineShapes.AddPicture(
                '    FileName:=filePath,
                '    LinkToFile:=False,
                '    SaveWithDocument:=True
                ')
                'objInlineShape.LockAspectRatio = Microsoft.Office.Core.MsoTriState.msoTrue
                'objInlineShape.Width = imgX
                'objInlineShape.Height = imgY

                '.Application.Selection.InlineShapes.AddPicture(filePath)

                'Dim objRng As Word.Range = .Sections(1).Range()
                'objRng.InlineShapes.AddPicture(filePath)
                '
                'Dim objInlineShape As Word.InlineShape = .InlineShapes.AddPicture(filePath)
                'Dim objShape As Word.Shape = objInlineShape.ConvertToShape()

                'objDoc.Bookmarks.Item("\startofdoc").Range.InlineShapes.AddPicture(filePath)

Сам документ представляет собой всего лишь четыре таблицы с некоторым форматированием.Какого черта я делаю не так?

1 Ответ

0 голосов
/ 12 декабря 2018

Следующий код взят из одной из моих надстроек VB.Net.

                rng = rng.Rows(1).Cells(1).Range
                rng.Delete()
                rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)
                rng.InlineShapes.AddPicture(.SelectedItems(i))

Он добавляет изображение в ячейку таблицы.Ссылка «SelectItems (i)» относится к файлу изображения, который пользователь выбрал из функции msoFileDialogFilePicker, и вы можете изменить его на любой известный путь к файлу для своего изображения.Я публикую его, чтобы показать вам пример реального кода.

Получить ваше изображение в верхней части документа так же просто, как установить диапазон вставки в этом месте.Следующий код сделает это.

Dim rng as Word.Range
rng = ActiveDocument.Content
rng.Collapse(Word.WdCollapseDirection.wdCollapseStart)
rng.InlineShapes.AddPicture(Your Path)
...