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.

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:
- Quelle: ... CD Nr. Y
- 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