Seite 1 von 1

Macro zum Bildereinfügen gesucht

Verfasst: So 15. Dez 2013, 15:02
von sailor
Moinsen,

ich habe mir jetzt schon im Web den Wolf gesucht (und diesen Tröt versehentlich schon mal in "Writer" aufgemacht :) ), aber leider keine entsprechende Lösung gefunden. :evil:
Ich möchte ein Template erstellen, das ein Macro mit folgenden Funktionen enthält:
  • Das Macro soll mir die Möglichkeit bieten, von einer voreingestellten Quelle (/media/cdrom) Bilddateien (nur *jpg!) in ein Textdokument zu laden. Dabei sollen die Bilder auf die Größe X*15cm skaliertund linksbündig ausgerichtet werden.
  • Nach dem Import der Bilder soll zu jedem Bild eine Beschriftung erzeugt werden, die die folgenden Zeilen enthält:
    1. Quelle: ... CD Nr. Y
    2. Bildbeschreibung (Freitext)
Ein Macro, das mir alle im Dokument vorhandenen Bilder in die richtige Größe bringt und die Bilder linksbündig ausrichtet habe ich schon. Woran es hängt ist die Geschichte mit dem Filepicker und das anschließende Einfügen der Beschriftung. Die Variable Y würde ich dabei aus einer im Kopf belegten Feldvariable versorgen.

Kann etwas Basic, aber hier stoße ich an meine Grenzen ... ;)

Re: Macro zum Bildereinfügen gesucht

Verfasst: So 15. Dez 2013, 19:41
von F3K Total
Hi,
anbei ein Makro und eine filepicker-function. Die Bilder werden immer, auch wenn sie nicht quadratisch sind, auf 15 cm skaliert, entweder in der Breite oder in der Höhe.
Leider funtioniert der MultiSelectionMode des Filepickers unter Windows 7 nicht (Bug), mit Linux kann man mehrere Dateien gleichzeitig auswählen.

Code: Alles auswählen

Sub Insert_Bitmap
    Dim Original_SizePixel As New com.sun.star.awt.Size
    Dim Size_max As New com.sun.star.awt.Size
    Dim Size As New com.sun.star.awt.Size
    oDoc = thisComponent
    sUrls = F_get_bitmaps_Url
    oText = odoc.Text
    oTextcursor = oText.createTextCursor
    oTextcursor.collapseToStart
    Size_max.Width = 15000 'maximale Breite
    Size_max.Height = 15000 'maximale Höhe
    For i = 0 to ubound(sUrls)
        sname = "MeinBild"+i'interner Name des Bildes
        oBitmaps = oDoc.createInstance( "com.sun.star.drawing.BitmapTable" )
        If oBitMaps.hasByName(sname) Then
           oBitmaps.replaceByName(sname, sUrls(i))
        else
            oBitmaps.insertByName(sname, sUrls(i))
        End If
        oPic = oBitmaps.getByName(sname)
        oGraph = oDoc.createInstance("com.sun.star.text.GraphicObject")
        With oGraph
           .GraphicURL = oPic
           .AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
           .HoriOrient = 0 'Linksbündig
        End With
        oDoc.Text.insertTextContent(oTextcursor,oGraph,False)'Bild einfügen
        'Skalieren
        Original_SizePixel = oGraph.Graphic.SizePixel
        Factor_Width=Size_max.width/Original_SizePixel.width
        Factor_Height=Size_max.Height/Original_SizePixel.Height
        if Factor_Width<=Factor_Height then 'bestimmen ob die Breite oder die Höhe der begrenzende Faktor ist
          factor = Factor_Width
        else
          factor = Factor_Height
        endif
        size.width = Original_SizePixel.width * factor
        size.Height = Original_SizePixel.Height * factor
        oGraph.size = size
        'Text einfügen
        oTextCursor.gotoend(false)
        oTextCursor.breaktype = 0
        oText.insertControlCharacter(oTextCursor,0 , False)'0 = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK
        sQuelle = inputbox("Bitte Quelle eingeben","Quelle")
        oTextCursor.String = sQuelle
        oTextCursor.gotoend(false)
        oTextCursor.breaktype = 0
        oText.insertControlCharacter(oTextCursor,0 , False)'0 = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK
        sBildbeschreibung = inputbox("Bitte Bildbeschreibung eingeben","Bildbeschreibung")
        oTextCursor.String = sBildbeschreibung
        'Seitenumbruch einfügen
        oTextCursor.gotoend(false)
        oTextCursor.breaktype = 5
        oText.insertControlCharacter(oTextCursor,0 , False)'0 = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK
        oTextCursor.gotoend(false)
    next i
end sub

function F_get_bitmaps_Url
	oFilepicker = createUnoService("com.sun.star.ui.dialogs.FilePicker")
    oFilepicker.setMultiSelectionMode(true)
	oFilepicker.appendFilter( "Graphics Files (*.jpg)","*.jpg" )
	oFilepicker.Title = ("Bilddateien auswählen")
	iAccept = oFilepicker.execute()
	if iAccept = 0 Then exit function
	F_get_bitmaps_Url = oFilepicker.SelectedFiles
end function
Viel Spaß damit
Gruß R