none
Insertar imagen en Word con vb net RRS feed

  • Pregunta

  • Hola expertos,

    He creado un programa con vb net que genera sucesivos certificados (documentos de Word) personalizados con la información de una base de datos (Access).

    Lo que ahora necesito es insertar un logotipo en ese documento, pero con el código que he encontrado, el logotipo me sale después de escribir la última línea de texto, y con un tamaño que sobrepasa el área de la página.

    Lo que necesito es que alguien me ayude a lograr estos tres objetivos:

    1. Insertar el logotipo al principio de la página.
    2. Que salga centrado.
    3. Poder ajustar el tamaño.

    A continuación copio el código (con el texto del certificado abreviado) que tengo fucnionando. He resaltado el código añadido para insertar el logotipo.

    DimImagen As Object, LogoPath As String = Application.StartupPath & "\Logotipo.png"

    Dim DocuClase As Word.ApplicationClass

                DocuClase = New Word.ApplicationClass

                DocuClase.WindowState = Word.WdWindowState.wdWindowStateNormal

                DocuClase.Documents.Add()

    Imagen = DocuClase.ActiveDocument.Shapes.AddPicture(LogoPath)

                    With DocuClase

                        .Selection.Font.Bold = 1

                        .Selection.Font.Name = "Verdana"

                        .Selection.Font.Size = 12

                        .Selection.TypeText("CERTIFICA")

                        .Selection.TypeParagraph()

                        .Selection.Font.Bold = 0

                        .Selection.Font.Name = "Verdana"

                        .Selection.Font.Size = 12

                        TextoDoc = "Doña " & PrpFirmante

                        TextoDoc &= dtDocuTexto.Rows(0).Item("Nombre").ToString & " "

                        .Selection.TypeText(TextoDoc)

                        .Selection.TypeParagraph()

                DocuClase.ActiveDocument.Range.ParagraphFormat.Alignment = _

                                                    Word.WdParagraphAlignment.wdAlignParagraphJustify

                DocuClase.ActiveDocument.SaveAs(Archivo.ToString)

                DocuClase.ActiveDocument.PrintOut()

                DocuClase.ActiveDocument.Close()

                DocuClase.Quit()

                DocuClase = Nothing

    Agradeceré todas las respuestas. 

    viernes, 23 de febrero de 2018 6:43

Todas las respuestas

  • Durante una charla casual sobre este asunto en un bar, alguien que escuchó la conversación me ofreció una solución escrita en una servilleta. Después de alguna intentona de prueba y error, he alcanzado los objetivos que perseguía, y quiero dejar constancia de la solución por si fuera de utilidad para alguien.

    Dejo la pregunta abierta por si alguien experto que tenga conocimiento de este tema quiere hacer alguna precisión, o tal vez algún moderador decida cerrar el hilo.

    La primera parte de la solución pasa por hacer una copia del logotipo original, y crear una copia del tamaño que se necesite (200 de ancho y 130 de alto en este caso).

    Dim ruta As String = Application.StartupPath & "\LogoOriginal.png"

    Dim ruta2 As String = Application.StartupPath & "\LogoCopia.png"

    Dim imagen As New Bitmap(New Bitmap(ruta), 200, 130)

    imagen.Save(ruta2, System.Drawing.Imaging.ImageFormat.Png)

    Después, ya en la sección donde se está creando el documento de Word, primero se inserta el código para establecer la alineación de centrar en la página,

    DocuClase.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter

    y, a continuación, se inserta la imagen que se ha preparado para este efecto.

    DocuClase.Selection.InlineShapes.AddPicture(ruta2)

    Una advertencia para los novatos como yo: la alineación centrada se mantiene para el resto del texto que se quiera incluir, mientras no se cambie por otra, por ejemplo la alineación justificada:

    DocuClase.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify

    sábado, 24 de febrero de 2018 17:32