[gelöst] Bilder bearbeiten
Moderator: Moderatoren
-
- ****
- Beiträge: 115
- Registriert: Mo, 29.08.2011 09:01
- Wohnort: Duisburg
[gelöst] Bilder bearbeiten
Ich habe vor einigen Tagen ein Makro geschrieben das mir Bilder aus einem Verzeichnis hochlädt.
Klappt auch alles wunderbar, nur stehe ich jetzt vor einem Problem:
Die Bilder werden einfach nur eingebunden, bisher habe ich keinerlei Bearbeitungen vorgenommen an den Bildern (Größe, Position, etc.)
Nun die Fragestellung: Ist es möglich über ein Makro die Position, Größe, etc. zu verändern? Das Dokument dient als Vorlage für Kunden unserer Firma, ich kann dem Kunden also schlecht sagen: "Entschuldigung, aber Sie müssen jedes Bild immer wieder manuell anpassen."
Die Bilder sollen, nach Vorgabe des Kunden, im Verhältnis 2:1 sein (Verzerrung ist komischer Weise uninteressant), sollen an einer bestimmten Position im Dokument sein und eine vorgegebene Größe haben.
Sowohl im Internet, als auch in den guten Dokus (Andrew Pitonyak und andere) finde ich keine Infos dadrüber, ob und wie man Grafiken im Dokument anspricht bzw. wie ich die entsprechenden Attribute einstelle.
Mir würde schon reichen, die entsprechenden Codeschnipsel zu erhalten, also wie ich die Grafiken anspreche und welche Attribute es gibt. Den Rest bastel ich mir dann selber zusammen.
Danke für die Hilfe schonmal
Grüße
Philipp
Klappt auch alles wunderbar, nur stehe ich jetzt vor einem Problem:
Die Bilder werden einfach nur eingebunden, bisher habe ich keinerlei Bearbeitungen vorgenommen an den Bildern (Größe, Position, etc.)
Nun die Fragestellung: Ist es möglich über ein Makro die Position, Größe, etc. zu verändern? Das Dokument dient als Vorlage für Kunden unserer Firma, ich kann dem Kunden also schlecht sagen: "Entschuldigung, aber Sie müssen jedes Bild immer wieder manuell anpassen."
Die Bilder sollen, nach Vorgabe des Kunden, im Verhältnis 2:1 sein (Verzerrung ist komischer Weise uninteressant), sollen an einer bestimmten Position im Dokument sein und eine vorgegebene Größe haben.
Sowohl im Internet, als auch in den guten Dokus (Andrew Pitonyak und andere) finde ich keine Infos dadrüber, ob und wie man Grafiken im Dokument anspricht bzw. wie ich die entsprechenden Attribute einstelle.
Mir würde schon reichen, die entsprechenden Codeschnipsel zu erhalten, also wie ich die Grafiken anspreche und welche Attribute es gibt. Den Rest bastel ich mir dann selber zusammen.
Danke für die Hilfe schonmal
Grüße
Philipp
Zuletzt geändert von Philipp_19 am Mo, 12.09.2011 14:44, insgesamt 1-mal geändert.
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Bilder bearbeiten
Kapitel 5.9 Loading/Inserting a graphic into your document in Andrews DokumentPhilipp_19 hat geschrieben:Mir würde schon reichen, die entsprechenden Codeschnipsel zu erhalten, also wie ich die Grafiken anspreche und welche Attribute es gibt. Den Rest bastel ich mir dann selber zusammen.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
-
- ****
- Beiträge: 115
- Registriert: Mo, 29.08.2011 09:01
- Wohnort: Duisburg
Re: Bilder bearbeiten
Okay, habe die ersten 200 Seiten auf deutsch geladen, war wohl ein Fehler. Geht nur bis 5.6...ich schau mal, danke^^
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Bilder bearbeiten
Hat sich Deine Frage im libreoffice-forum damit auch erledigt?
Du weisst: Crossposting ohne Referenz ist unhöflich!
Du weisst: Crossposting ohne Referenz ist unhöflich!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
-
- ****
- Beiträge: 115
- Registriert: Mo, 29.08.2011 09:01
- Wohnort: Duisburg
Re: Bilder bearbeiten
Naja im LibreOffice-Forum hatte sich bisher keiner gemeldet. Hab dann einfach weiter gesucht, aber ja, ich denke das hat sich damit wohl auch erledigt.
Entschuldige das
Entschuldige das

Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
-
- ****
- Beiträge: 115
- Registriert: Mo, 29.08.2011 09:01
- Wohnort: Duisburg
Re: Bilder bearbeiten
Okay, das Kapitel in Andrews Doku hat mir nicht weitergeholfen, habe im Internet aber zwei Makros gefunden, die zwar genau das machen sollen was ich will, aber ich bekomme immer Fehlermeldungen zurück.
Das ist das eine Makro, crasht bei mir aber schon in der Zeile:
.CurrentSelection ist unbekannt, und ich weiß inzwischen auch nicht weiter. Hab einiges versucht, aber ich komme nicht an meine Grafik dran. (Name ist Grafik1), dran kommen kann man mit GetByName("Grafik1"), aber alles davor will er nicht annehmen.
Also wenn jemand mir hier zeigen kann wie ich die Grafik anspreche, wäre mir sehr weitergeholfen.
Code: Alles auswählen
Sub ResizeEmbeddedPictureInWriter
oDesktop = createUnoService("com.sun.star.frame.Desktop")
oDocument = ThisComponent
oSelection = oDocument.CurrentSelection
If oSelection.ImplementationName <> "SwXTextGraphicObject" Then
MsgBox "Select image first..."
Exit Sub
End If
nFactor = InputBox("Resize factor in %:","Resizing picture...",50)
If Not(IsNumeric(nFactor)) Then Exit Sub
nFactor = Val(nFactor)/100
Dim oSize as new com.sun.star.awt.Size
oSize.Width = Int(oSelection.Width * nFactor)
oSize.Height = Int(oSelection.Height * nFactor)
oSelection.setSize(oSize)
End Sub
Code: Alles auswählen
oSelection = oDocument.CurrentSelection
Also wenn jemand mir hier zeigen kann wie ich die Grafik anspreche, wäre mir sehr weitergeholfen.
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
-
- ****
- Beiträge: 115
- Registriert: Mo, 29.08.2011 09:01
- Wohnort: Duisburg
Re: Bilder bearbeiten
Es geht um diesen Beitrag, aber hat sich dennoch niemand auf mein aktuelles Problem gemeldet. Und komma4 hat lediglich auf diesen Thread hier verwiesen.Gast hat geschrieben:Winfried ist keiner?
Oder geht es nicht um diesen Beitrag?
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Bilder bearbeiten
Das Makro arbeitet mit der ausgewählten Grafik.... hast Du diese markiert?Philipp_19 hat geschrieben:.CurrentSelection ist unbekannt
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
-
- ****
- Beiträge: 115
- Registriert: Mo, 29.08.2011 09:01
- Wohnort: Duisburg
Re: Bilder bearbeiten
Komischerweise meckert Basic erst bei dem Makro, nun klappt es...ich verstehs nicht 
Auf jeden Fall lässt sich die BIldgröße nun anpassen mit:
Jetzt muss das ganze noch mit der Position erweiter werden.
Dies ist die gängige Lösung im Internet zu dem Problem, doch bei mir sagt er "position cannot be changed with this methode"...
Vorschläge?
Die Grafik ist übrigends nach dem Einfügen direkt ausgewählt, also kann ich dir nicht erklären warum Selection nicht gegriffen hat

Auf jeden Fall lässt sich die BIldgröße nun anpassen mit:
Code: Alles auswählen
oDesktop = createUnoService("com.sun.star.frame.Desktop")
oDocument = ThisComponent
oSelection = oDocument.CurrentSelection
Dim oSize as new com.sun.star.awt.Size
oSize.Width = 2000
oSize.Height = 1000
oSelection.setSize(oSize)
Code: Alles auswählen
Dim Point as new com.sun.star.awt.Point
Point.x = 100
Point.y = 100
oSelection.Position = Point
Vorschläge?
Die Grafik ist übrigends nach dem Einfügen direkt ausgewählt, also kann ich dir nicht erklären warum Selection nicht gegriffen hat

Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
-
- ****
- Beiträge: 115
- Registriert: Mo, 29.08.2011 09:01
- Wohnort: Duisburg
Re: Bilder bearbeiten
Muss jetzt leider hier nochmal nach haken, ob bisher jemand eine Lösung gefunden hat.
Ich habe inzwischen einen Haufen Threads gelesen (auch englische), aber das Problem wird nirgends gelöst.
Das FAQ hat darauf keine Antworten, die Online-Hilfe ebenfalls nicht und die 3 bis 4 Dokus, die ich hier liegen habe, helfen mir da auch nicht mehr weiter.
Windows XP, OO 3.3
Ich erkläre nochmals kurz das Problem:
Ich lade mit dem Makro ein Bild hoch. Dabei wird die Größe direkt mitgeändert. Jetzt bleibt das Problem der Positionierung. Das Bild wird Standartmäßig in der Mitte geladen. Das soll so aber nicht sein, sondern es soll beliebig positionierbar sein.
Da ich bisher keinen Weg gefunden habe, das Makro komplett selbst zu schreiben, musste ich mich dem dispatcher bedienen.
die Größe kann ich hiermit ändern:
Hatte zuerst angenommen, das Problem mit
in den Griff zu bekommen, allerdings kommt dann eine Fehlermeldung "position cannot be changed by this method".
Eine Idee war, das Bild in einen Textrahmen bzw. einer Tabellenzelle zu laden, doch kann ich das inzwischen ausschließen, da die Bilder unterschiedlich groß sein können.
Kleine Ergänzung, die euch nicht umbedingt wichtig ist für das Problem. Es wird pro Dokument ein Bild geladen. Das Bild wird über
ausgelesen. Diese Bilder werden dabei immer in einem Temp-Verzeichnis zwischengespeichert nachdem sie über eine Software aufgerufen wurden. Die Bilder haben ALLE den gleichen Namen (Beispielsweise "Bild1.bmp")
Ich stelle nachher noch eine Datei hoch, die zeigen soll, wo das Bild aktuell geladen wird, und wo es eigentlich hinkommen soll. Braucht ihr das, um das Problem zu lösen?
Hoffe ihr habt ein paar mehr Ideen als ich.
Grüße und schonmal ein Danke an alle im vorraus.
Ich habe inzwischen einen Haufen Threads gelesen (auch englische), aber das Problem wird nirgends gelöst.
Das FAQ hat darauf keine Antworten, die Online-Hilfe ebenfalls nicht und die 3 bis 4 Dokus, die ich hier liegen habe, helfen mir da auch nicht mehr weiter.
Windows XP, OO 3.3
Ich erkläre nochmals kurz das Problem:
Ich lade mit dem Makro ein Bild hoch. Dabei wird die Größe direkt mitgeändert. Jetzt bleibt das Problem der Positionierung. Das Bild wird Standartmäßig in der Mitte geladen. Das soll so aber nicht sein, sondern es soll beliebig positionierbar sein.
Code: Alles auswählen
rem ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FileName"
args1(0).Value = Path
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())
rem ----------------------------------------------------------------------
dim args2(3) as new com.sun.star.beans.PropertyValue
args2(0).Name = "FileName"
args2(0).Value = Path
args2(1).Name = "FilterName"
args2(1).Value = "<Alle Formate>"
args2(2).Name = "AsLink"
args2(2).Value = false
args2(3).Name = "Style"
args2(3).Value = "Grafik"
dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args2())
die Größe kann ich hiermit ändern:
Code: Alles auswählen
Dim Size as new com.sun.star.awt.Size
Size.Width = 5000
Size.Height = 2500
oSelection.Size = Size
Code: Alles auswählen
Dim Point as new com.sun.star.awt.Point
Point.x = 100
Point.y = 100
oSelection.Position = Point
Eine Idee war, das Bild in einen Textrahmen bzw. einer Tabellenzelle zu laden, doch kann ich das inzwischen ausschließen, da die Bilder unterschiedlich groß sein können.
Kleine Ergänzung, die euch nicht umbedingt wichtig ist für das Problem. Es wird pro Dokument ein Bild geladen. Das Bild wird über
Code: Alles auswählen
part4 = Dir(Path & "Bild.*", 0)
Ich stelle nachher noch eine Datei hoch, die zeigen soll, wo das Bild aktuell geladen wird, und wo es eigentlich hinkommen soll. Braucht ihr das, um das Problem zu lösen?
Hoffe ihr habt ein paar mehr Ideen als ich.
Grüße und schonmal ein Danke an alle im vorraus.
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Bilder bearbeiten
Dann solltest Du auch über DannyB gestolpert sein.Philipp_19 hat geschrieben:Ich habe inzwischen einen Haufen Threads gelesen (auch englische)
Code: Alles auswählen
Sub Main
' Create a new empty Writer document.
oDoc = StarDesktop.loadComponentFromURL( "private:factory/swriter", "_blank", 0, Array() )
' Get the Text of the document.
oText = oDoc.getText()
' Get a cursor that can scan to any point or range of the text.
oCursor = oText.createTextCursor()
' At this point, you might want to move the cursor to desired
' part of text, like this.
oCursor.gotoStart( False )
' Create a graphic object.
oGraphic = oDoc.createInstance( "com.sun.star.text.GraphicObject" )
' Insert the graphic object into the text, at current cursor position.
oText.insertTextContent( oCursor, oGraphic, False )
' Set properties of the graphic.
oGraphic.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
oGraphic.GraphicURL = ConvertToURL( "C:\Danny\Graphics\Cam01.jpg" )
oGraphic.HoriOrientPosition = 5500
oGraphic.VertOrientPosition = 4200
oGraphic.Width = 4400
oGraphic.Height = 4000
End Sub
Und mit XRAY oGraphic.Anchor solltest Du ansich weiter kommen, oder?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
-
- ****
- Beiträge: 115
- Registriert: Mo, 29.08.2011 09:01
- Wohnort: Duisburg
Re: Bilder bearbeiten
Hi,
Danke dir für die Antwort. Sieht vielversprechend aus, hatte das aber bisher nicht gefunden oder nicht wahrgenommen.
Werde das morgen dann mal ausprobieren und dann Rückmeldung geben.
Hoffe das klappt dann endlich mal
Grüße und danke nochmal komma
Danke dir für die Antwort. Sieht vielversprechend aus, hatte das aber bisher nicht gefunden oder nicht wahrgenommen.

Werde das morgen dann mal ausprobieren und dann Rückmeldung geben.
Hoffe das klappt dann endlich mal

Grüße und danke nochmal komma
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
-
- ****
- Beiträge: 115
- Registriert: Mo, 29.08.2011 09:01
- Wohnort: Duisburg
Re: Bilder bearbeiten
So hallo,
habe jetzt erstmal weitergebastelt und bin immerhin einen Schritt weiter. Leider hapert es jetzt wieder stark.
Damit kann ich nun schon die Auswahl treffen, ob die Ausrichtung "links", "rechts", "mitte" oder "von links" ist. Das gleiche mit der vertikalen Ausrichtung.
Nun kann ich mit 0-3 entscheiden, wie es das haben möchte, leider kann ich dannach keine Werte eintragen. Also z.B. "von Links" um "5,00 cm".
Kann mir jemand erklären wie ich an diese Stelle drankomme? Mit oGraphic.HoriOrientPosition klappts nicht.
Ich weiß noch nichtmal, was ich mit dem Befehl eigentlich anstelle, weil sämtlichen Werte ignoriert werden.
Grüße
habe jetzt erstmal weitergebastelt und bin immerhin einen Schritt weiter. Leider hapert es jetzt wieder stark.
Code: Alles auswählen
oGraphic.HoriOrient = 0
oGraphic.HoriOrientPosition = ?
oGraphic.VertOrient = 0
oGraphic.VertOrientPosition = ?
Nun kann ich mit 0-3 entscheiden, wie es das haben möchte, leider kann ich dannach keine Werte eintragen. Also z.B. "von Links" um "5,00 cm".
Kann mir jemand erklären wie ich an diese Stelle drankomme? Mit oGraphic.HoriOrientPosition klappts nicht.
Ich weiß noch nichtmal, was ich mit dem Befehl eigentlich anstelle, weil sämtlichen Werte ignoriert werden.
Grüße
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Bilder bearbeiten
Warum schaust Du nicht mal in die Dokumentation?Philipp_19 hat geschrieben: Mit oGraphic.HoriOrientPosition klappts nicht.
Ich weiß noch nichtmal, was ich mit dem Befehl eigentlich anstelle, weil sämtlichen Werte ignoriert werden.
http://api.openoffice.org/docs/common/r ... Shape.html
Die gibt es auch zum Runterladen und lokalem Benutzen

Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
-
- ****
- Beiträge: 115
- Registriert: Mo, 29.08.2011 09:01
- Wohnort: Duisburg
Re: Bilder bearbeiten
Hallo,
okay, danke für den Link, hatte das selber in der Doku nicht gefunden.
So klappt das nun. Danke für die Hilfe
okay, danke für den Link, hatte das selber in der Doku nicht gefunden.
Code: Alles auswählen
oGraphic.HoriOrient = HoriOrientation_NONE
oGraphic.HoriOrientPosition = 9800
oGraphic.VertOrient = VertOrientation_NONE
oGraphic.VertOrientPosition = 1800
Windows XP, OOo 3.3.0
oder
Windows 7, OOo 3.3.0
oder
Windows 7, OOo 3.3.0