🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Macro zum Bildereinfügen gesucht

Alles zur Programmierung im LibreOffice.
Antworten
sailor
Beiträge: 4
Registriert: Sa 20. Jul 2013, 07:20

Macro zum Bildereinfügen gesucht

Beitrag von sailor » So 15. Dez 2013, 15:02

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 ... ;)
Grüße von der Nordseeküste

Max

--
"Jede hinreichend fortgeschrittene Technologie ist von Magie nicht zu unterscheiden."
Arthur C. Clarke's (*1917) Drittes Gesetz
(brit. SciFi-Autor, u. a. "2001-Odyssee im Weltraum" [1968])

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Macro zum Bildereinfügen gesucht

Beitrag von F3K Total » So 15. Dez 2013, 19:41

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
Windows 11: AOO, LO Linux Mint: AOO, LO


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten