per Makro Bild einfügen und Größe und Position setzen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

sbrunk
Beiträge: 6
Registriert: Mo, 23.06.2008 15:30

per Makro Bild einfügen und Größe und Position setzen

Beitrag von sbrunk »

Hallo Forum,

ich möchte mit writer in eine Vorlage, die als Briefpapier dienen soll, per Makro ein Bild einfügen und dieses dann in einem definierten Bereich verschieben und die Größe festlegen.

Die Bilder liegen alle als DATEINAME_1.tif, DATEINAME_2.tif usw. vor und ich kann jetzt auch schon ein zufälliges Bild einfügen und dieses in den Hintergrund setzen. Der Rest gelingt mir aber leider nicht:

Code: Alles auswählen

sub nologo_testomania
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
Dim Zufallszahl As Integer
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem -----------Zufallszahl generieren-----------------------------
	Randomize	
	Zufallszahl = Int((9999 * Rnd + 1)) 

rem ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FileName"
args1(0).Value = "file://networkpath/Dateiname" & Zufallszahl & ".tif"
args1(1).Name = "FilterName"
args1(1).Value = "<Alle Formate>"
args1(2).Name = "AsLink"
args1(2).Value = false
args1(3).Name = "Style"
args1(3).Value = "Grafik"

dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args1())
wait 2500
rem ----------------------------------------------------------------------
 dispatcher.executeDispatch(document, ".uno:WrapThrough", "", 0, Array())

rem ----------------------------------------------------------------------
 dispatcher.executeDispatch(document, ".uno:SendToBack", "", 0, Array())

rem ----------------------------------------------------------------------
 dispatcher.executeDispatch(document, ".uno:WrapThroughTransparent", "", 0, Array())

end sub
Das Ändern der Position und das Festlegen der Grafik-Höhe auf 10 cm gelingt mir leider nicht. Hat da jemand einen Tipp für mich?


Vielen Dank und Freundliche Grüße aus Mainz


Steffen


.
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: per Makro Bild einfügen und Größe und Position setzen

Beitrag von turtle47 »

Hi Steffen,

erstmal willkommen hier im Forum.

Versuche es mal mit folgendem Code:

Code: Alles auswählen

Dim Page As Object
Dim GraphicObjectShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Sub BildEinfuegen

	Doc = ThisComponent
	Page = Doc.drawPage
	
	GraphicObjectShape = Doc.createInstance("com.sun.star.drawing.GraphicObjectShape")
	
	Size.Width = 10000 'Grösse
	Size.Height = 10000 'Grösse
	GraphicObjectShape.Size = Size
	
	Point.x = 2000 'Position   
	Point.y = 1500 'Position
	GraphicObjectShape.Position = Point
	
	GraphicObjectShape.GraphicURL = "Deine URL zum Bild"
	GraphicObjectShape.AdjustBlue = 0
	GraphicObjectShape.AdjustGreen = 0
	GraphicObjectShape.AdjustBlue = 0
	GraphicObjectShape.AdjustContrast = 0
	GraphicObjectShape.AdjustLuminance = 0
	GraphicObjectShape.Transparency = 30
	GraphicObjectShape.AnchorType=0
	GraphicObjectShape.Name = "Mein Bild"
	GraphicObjectShape.IsFollowingTextFlow (true)
	GraphicObjectShape.GraphicColorMode = com.sun.star.drawing.ColorMode.STANDARD
	Page.add(GraphicObjectShape)
End Sub
Dieser beinhaltet noch mehrere Einstellmöglichkeiten. :D
Das ist aber sicherlich nicht schlimm. Oder?

Hilft das weiter?

Jrgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
sbrunk
Beiträge: 6
Registriert: Mo, 23.06.2008 15:30

Re: per Makro Bild einfügen und Größe und Position setzen

Beitrag von sbrunk »

Klasse!
Vielen vielen Dank,

ich hab´s heute erst wieder testen können, daher die späte Antwort.
Es macht erstmal genau das, was ich wollte.

DANKE

der steffen


.
sbrunk
Beiträge: 6
Registriert: Mo, 23.06.2008 15:30

Re: per Makro Bild einfügen und Größe und Position setzen

Beitrag von sbrunk »

Vielleicht kannst Du/könnt ihr mir noch einmal weiterhelfen:
Ich möchte eine graue Linie (die schon auf der Seite ist) so verschieben, dass Sie zur zufälligen Position des angesprochenen Bildes passt.

Wie spreche ich diese schon existierende Linie an und wie verschiebe ich sie per Makro?



Vielen Dank

der Steffen


.
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: per Makro Bild einfügen und Größe und Position setzen

Beitrag von turtle47 »

Hallo Steffen,
sbrunk hat geschrieben:Wie spreche ich diese schon existierende Linie an und wie verschiebe ich sie per Makro?
ansprechen kannst Du die Linie über den Namen oder den Index. Über den Namen ist aber einfacher.

Folgender Code löscht, wenn vorhanden, die Linie mit dem Namen "Meine Linie" und fügt dann wieder eine neue ein
mit dem Namen "Meine Linie". Die Position der Linie kann man ja von der Position des Bildes ableiten.

Code: Alles auswählen

Sub Linie_Zeichnen
	oDoc = thisComponent
	oGrafiken = oDoc.Drawpage
	anzahl = oGrafiken.count
	For i = 1 to anzahl
	oGrafik = oGrafiken.getByIndex(i-1)
	'Objekt entfernen
	if oGrafik.Name = "Meine Linie" then oGrafiken.remove(oGrafik)
	next i
	oLinie = oDoc.createInstance("com.sun.star.drawing.LineShape")
	dim oPos3 as new com.sun.star.awt.Point
	oPos3.X = 5000 'Abstand von Links
	oPos3.Y = 4800 'Abstand von Oben
	dim LineSize as new com.sun.star.awt.Size
	LineSize.Width = 10000  '100 mm lang
	LineSize.Height = 0 'Endpunkt = oPos3.Y + LineSize.Height
	with oLinie
		.name = "Meine Linie"
		.lineColor = RGB(211,211,211)
		.lineWidth = 80
		.position = oPos3
		.Size = LineSize
		.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
		.MoveProtect = true
	end with
	oDoc.Drawpage.add(oLinie)
End Sub
Edit:
Dieser Code verschiebt die vorhandene Linie nur :

Code: Alles auswählen

sub Linie_verschieben
	oDoc = thisComponent
	oLinien = oDoc.Drawpage
	anzahl = oLinien.count
	For i = 1 to anzahl
	oLinie = oLinien.getByIndex(i-1)
	if oLinie.Name = "Meine Linie" then 
	oLinie.HoriOrientPosition=4000
	oLinie.VertOrientPosition=8000
	end if
	next i
end sub
Kommst Du damit klar?

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
sbrunk
Beiträge: 6
Registriert: Mo, 23.06.2008 15:30

Re: per Makro Bild einfügen und Größe und Position setzen

Beitrag von sbrunk »

Hallo Jürgen,

danke mal wieder für Deine Antwort.

Ich hab jetzt lange probiert und bin mit Deinen Tipps auch schon sehr weit. Weil ich nicht weiß, wie ich einerm eingefügten Bild sage, dass es im Hintergrund sein soll und nicht den Textfluss stören soll, bin ich jetzt etwas anders vorgegangen:
Ich habe eine Vorlage von Hand so erstellt, wie das Ergebnis am Ende aussehen soll.
Jetzt suche ich über den Namen (Danke für den tollen Tipp!) die Objekte, die ich ändern bzw. verschieben möchte.
Die Größen sind dann schon korrekt, weil die Vorlage das vorgibt, die POSITIONEN muss ich allerdings noch anpassen.
Bei den grauen Linien (ich brauche zwei, wegen zwei verschiedener Kopfzeilen) funktioniert das auch bestens, das vorhandene Bild aber kann ich nicht verschieben.

Hier mein Code:

Code: Alles auswählen

Sub Linie

	  Dim Zufallszahl As Integer
			rem -----------Zufallszahl generieren-----------------------------
				Randomize	
				Zufallszahl = Int((9999 * Rnd + 1)) 
			rem ----------------------------------------------------------------------       
				  
   oDoc = thisComponent
   oGrafiken = oDoc.Drawpage
   anzahl = oGrafiken.count
	'   	MsgBox anzahl,0," soviele Grafiken"

   For i = 1 to anzahl
   		oGrafik = oGrafiken.getByIndex(i-1)
		'MsgBox  oGrafik.Name,0,"   is der Name"
			   
'-------- LOGO ausrichten ----------
		if oGrafik.Name = "nologologo" Then
			oGrafik.GraphicURL = "file://universum/projekte/uz_imgNoLogo/noLogo-Vorlagen/noLogo_DRUCK.tif/nologo" & Zufallszahl & ".tif"		
		'--------HIER MUSS X UND Y DES LOGOS GESETZT WERDEN ----------	   						   

		End If	   

'--------Linie auf SEITE EINS ausrichten----------	   
	   if oGrafik.Name = "grauesteilseiteeins" Then
			dim linePos as new com.sun.star.awt.Point
				linePos.X = Zufallszahl 'Abstand von Links
				linePos.Y = Zufallszahl 'Abstand von Oben
			oGrafik.position = linePos
		End If


'--------Linie auf allen uebrigen Seiten ausrichten----------   
		if oGrafik.Name = "grauesteil" Then
			linePos.X = Zufallszahl  'Abstand von Links
			linePos.Y = Zufallszahl 'Abstand von Oben
			oGrafik.position = linePos
		End If

	'for-schleife weiterzaehlen
   next i
End Sub

Wie ändere ich nun die Position des Bildes ?!


Vielen Dank!

Steffen


.
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: per Makro Bild einfügen und Größe und Position setzen

Beitrag von turtle47 »

sbrunk hat geschrieben:Wie ändere ich nun die Position des Bildes ?!
Na, genau so wie du die Position der Linie änderst: :D

Code: Alles auswählen

sub Bild_verschieben
	oDoc = thisComponent
	oBilder = oDoc.Drawpage
	anzahl = oBilder.count
	For i = 1 to anzahl
	oBild = oBilder.getByIndex(i-1)
	if oBild.Name = "Grafik1" then 
	oBild.HoriOrientPosition=1000
	oBild.VertOrientPosition=2000
	end if
	next i
end sub
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
sbrunk
Beiträge: 6
Registriert: Mo, 23.06.2008 15:30

Re: per Makro Bild einfügen und Größe und Position setzen

Beitrag von sbrunk »

SUPER !!! DANKE !!!

ich packs ja nich: da sitz ich echt lange (!) dran und Du schüttelst das so aus dem Ärmel.

Mein Problem war, dass ich die Grafik immer über oBild.Position.X und oBild.Position.Y ansprechen wollte.
Mit HoriOrientPosition und VertOrientPosition hats jetzt DIREKT funktioniert.

Woher hätte ich wissen können, dass die Variablen so heißen? Ich hab ja auch die Hilfe und google offen gehabt und fleißig befragt - Wenn der Makroeditor mir verfügbare Methoden und setzbare Variablen anzeigen wüde, wäre ich vielleicht schon eher drauf gekommen - so ne Vervollständigungshilfe wär hier sehr praktisch.


VIELEN VIELEN DANK, Du hast mir sehr geholfen!!


der Steffen


.
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: per Makro Bild einfügen und Größe und Position setzen

Beitrag von turtle47 »

Hallo Steffen,
sbrunk hat geschrieben:Woher hätte ich wissen können, dass die Variablen so heißen? Ich hab ja auch die Hilfe und google offen gehabt und fleißig befragt - Wenn der Makroeditor mir verfügbare Methoden und setzbare Variablen anzeigen wüde, wäre ich vielleicht schon eher drauf gekommen - [color=[FF0000]so ne Vervollständigungshilfe wär hier sehr praktisch.[/[olor]
Die gibt es doch. :lol:

Schau Dir mal das X-RAY Tool an.
Damit bekommt man dann zum Beispiel folgende Informationen:
xRay.jpg
xRay.jpg (61.87 KiB) 8202 mal betrachtet
Echt Cool ne.

Schöne Grüsse.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
sbrunk
Beiträge: 6
Registriert: Mo, 23.06.2008 15:30

Re: per Makro Bild einfügen und Größe und Position setzen

Beitrag von sbrunk »

OOOH JA!
This is a tool that allows OOo Basic programmers to display the properties, methods, services and interfaces provided by an object.
das is in der Tat cool.

der Steffen

.
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: per Makro Bild einfügen und Größe und Position setzen

Beitrag von turtle47 »

Hallo Christoph,
Christoph89 hat geschrieben:also bei mir funktioniert dieser quellcode zum einfügen von grafiken nicht.
Der Code funktioniert schon, denn sonst würde das Graue Feld nicht angezeigt. :D

Schau mal unter
Menue > Extras > Optionen > OOo-Writer > Ansicht
ob da [X] Grafiken ond Objekte angehakt ist.

Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Antworten