BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Bilder per Makro einfügen

Alles zur Programmierung im LibreOffice.
Antworten
chemnitzer
Beiträge: 43
Registriert: Di 20. Jan 2015, 18:56
Wohnort: Hungen

Bilder per Makro einfügen

Beitrag von chemnitzer » Do 30. Jan 2020, 22:08

Hallo
nach langer Zeit habe ich mich wieder dem Problem des Bildereinfügens beschäftigt. Habe ein Makro für ein Bild einfügen aufgezeichnet und das für ein zweites Bild ergänzt. Folgende Probleme : nach dem ersten Bild einen Seitenumbruch -> funktioniert nicht; das zweite Bild wird eingefügt aber da das erste noch selektiert blieb wird es überschrieben.

Wie kann ich einen Seitenumbruch über die Parameter des Dispatchers einfügen und auf der neuen Seite weiter machen ?
Wie kann ich nachdem Einfügen des 1.Bildes die Selektion aufheben ?
Ich hab hier mal den Code eingefügt. Vielleicht hilf das weiter ?

Code: Alles auswählen

sub Bilder2
rem ein aufgezeichnetes Makro mit LO 6.3.4.2 64Bit
rem define variables
	dim document   as object
	dim dispatcher as object
rem ----------------------------------------------------------------------
rem ab hier der ORIGINAL aufgezeichnete Code
rem get access to the document
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
	dim args1(3) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "FileName"
	args1(0).Value = "file:///C:/Archiv-ads/2019-Bonnet/Project/Data/11.JPG"
	args1(1).Name = "FilterName"
	args1(1).Value = "<Alle Bilder>"
	args1(2).Name = "AsLink"
	args1(2).Value = true
	args1(3).Name = "Style"
	args1(3).Value = "Bilder"

	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 = "file:///C:/Archiv-ads/2019-Bonnet/Project/Data/11.JPG"
	args2(1).Name = "FilterName"
	args2(1).Value = "<Alle Bilder>"
	args2(2).Name = "AsLink"
	args2(2).Value = true
	args2(3).Name = "Style"
	args2(3).Value = "Bilder"

	dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args2())
rem ab hier der Ende des ORIGINAL aufgezeichneten Code
rem #########################################################################
	msgbox "hier vor Seitenumbruch"
rem ----------------------------------------------------------------------
	dispatcher.executeDispatch(document, ".uno:InsertPagebreak", "", 0, Array())

	rem zweites Bild soll auf der neuen Seite eingesetzt werden
rem gleicher CODE wie für Bild 1 aufgezeichnet nur die Bilddatei geändert
	msgbox "vor 2. Bild einfügen"
rem ----------------------------------------------------------------------
	dim args4(3) as new com.sun.star.beans.PropertyValue
	args4(0).Name = "FileName"
	args4(0).Value = "file:///C:/Archiv-ads/2019-Bonnet/Project/Data/36a.JPG"
	args4(1).Name = "FilterName"
	args4(1).Value = "<Alle Bilder>"
	args4(2).Name = "AsLink"
	args4(2).Value = true
	args4(3).Name = "Style"
	args4(3).Value = "Bilder"
	dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args4())

rem ----------------------------------------------------------------------
	dim args5(3) as new com.sun.star.beans.PropertyValue
	args5(0).Name = "FileName"
	args5(0).Value = "file:///C:/Archiv-ads/2019-Bonnet/Project/Data/36a.JPG"
	args5(1).Name = "FilterName"
	args5(1).Value = "<Alle Bilder>"
	args5(2).Name = "AsLink"
	args5(2).Value = true
	args5(3).Name = "Style"
	args5(3).Value = "Bilder"

	dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args5())

rem ----------------------------------------------------------------------
	dispatcher.executeDispatch(document, ".uno:InsertPagebreak", "", 0, Array())
end sub
Viele Grüße von
Chemnitzer

aladin
Beiträge: 37
Registriert: Di 30. Jul 2019, 15:49
Kontaktdaten:

Re: Bilder per Makro einfügen

Beitrag von aladin » Fr 31. Jan 2020, 13:49

Hallo,

ich hatte mal vor Jahren etwas gebaut und habe es eben noch einmal bezüglich FilePicker angepasst, so dass es zumindest unter LO 6.3.4 unter Linux läuft.

Vielleicht kannst Du Dir ja etwas aus dem angehängten Dokument abschauen...

Gruß
Heiko
Dateianhänge
Bilder_Buch.odt
(11.56 KiB) 217-mal heruntergeladen

chemnitzer
Beiträge: 43
Registriert: Di 20. Jan 2015, 18:56
Wohnort: Hungen

Re: Bilder per Makro einfügen

Beitrag von chemnitzer » Fr 31. Jan 2020, 15:15

Hallo
habe Deinen Code getestet der läuft auch unter Windows. Er fügt die Bilder in eine Tabelle ohne Rahmen ein. Diese Bilder sind dann aber im Dokument mit gespeichert. Ich habe ein Buch mit über 100 Seiten eingescannt und die Datei wird da ziemlich groß. Ich wollte die Bilder als Verknüpfung nur einfügen. Im aufgezeichneten Makro sieht das so aus:

Code: Alles auswählen

rem ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FileName"
args1(0).Value = "file:///C:/2013-Santorin/2013_05_23-/IMG_9172.JPG"
args1(1).Name = "FilterName"
args1(1).Value = "<Alle Bilder>"
args1(2).Name = "AsLink"					' als Link einfügen,dann sieht das wenn am übers Menü einfügen Bild
args1(2).Value = true
args1(3).Name = "Style"
args1(3).Value = "Bilder"
dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args1())
Bild
Wie kann ich das eingefügte Bild, welches im Doc noch markiert ist ( sehe die Anfasser) im Makro abwählen lassen.

Danke für die schnelle Hilfe, aber leider leider nicht die Lösung (wegen Dateigröße).
Vielen Dank sagt
Roland
Dateianhänge
screenshot-1-1.jpg
screenshot-1-1.jpg (53.92 KiB) 2817 mal betrachtet

aladin
Beiträge: 37
Registriert: Di 30. Jul 2019, 15:49
Kontaktdaten:

Re: Bilder per Makro einfügen

Beitrag von aladin » Fr 31. Jan 2020, 16:32

Sorry, aber da kann ich nicht helfen.
Ich kenne mich mit aufgezeichneten Makros nicht aus.

Leider verstehe ich auch nicht, wieso man 100 gescannte Images als Verknüpfung in ein Writer-Dokument packen sollte.
Das Dokument ist doch dann nur da nutzbar, wo der genaue Pfad zu den Images verfügbar ist.

Wenn die Images zu groß sind, dann sollte man diese entsprechend Konvertieren bzw. auf die notwendige Auflösung Skalieren bevor man diese in ein Dokument einbettet.

Auf die Schnelle habe ich auch nichts gefunden, wie man meinen Code anpassen könnte, so das die Bilder nur als Verknüpfung eingefügt werden.

Für ernsthafte Archivierung von gescannten Dokumenten, verwende ich DjVu als Datei-Format.
Das ist einfach mal unschlagbar im Verhältnis Qualität zu Dateigröße und ist, mit den richtigen Werkzeugen erstellt, sogar durchsuchbar.

Gruß
Heiko

musikai
Beiträge: 262
Registriert: Do 14. Mai 2015, 17:53

Re: Bilder per Makro einfügen

Beitrag von musikai » Fr 31. Jan 2020, 20:20

Um Bilder zu verlinken muss ab LibreOffice 6.1 dieser Code mitsamt Funktion getgraphfromurlaslink(sURL)
benutzt werden (abwärts- und Openoffice-kompatibel) :

Code: Alles auswählen

Sub InsertGraphicObject
 Dim oDoc
 Dim sURL
 Dim oCursor
 Dim oGraph
 Dim oText
 
 sURL= ConvertToUrl("http://pmg.pmgroup.be/enews/deroulard/exploit1.jpg")
 oDoc = ThisComponent
 oText = oDoc.getText()
 oCursor = oText.createTextCursor()
 oCursor.gotoStart(False)
 oGraph = oDoc.createInstance("com.sun.star.text.GraphicObject")
 oGraph.Graphic = getgraphfromurlaslink(sURL) 
 oGraph.GraphicURL = sURL 
 With oGraph
 .Width = 6000
 .Height = 8000
 End With
 
 oText.insertTextContent(oCursor, oGraph, False)

End Sub

function getGraphFromUrlAsLink(sFileUrl as String ) as Object 
  oProvider = createUnoService("com.sun.star.graphic.GraphicProvider") 
  Dim oPropsIN(1)as new com.sun.star.beans.PropertyValue 
  oPropsIN(0).Name  = "URL" 
  oPropsIN(0).Value = converttoURL(sFileUrl)
  oPropsIN(1).Name  = "LoadAsLink" 
  oPropsIN(1).Value = TRUE
  getGraphFromUrlAsLink = oProvider.queryGraphic(oPropsIN()) 
 end function
(
https://bugs.documentfoundation.org/sho ... =119519#c6
)


Oder Du probierst das LOSA-document aus meiner Signatur aus.
Wenn Du alle Bilder in einem Verzeichnis hast, dann können diese alle auf einmal (verlinkt) importiert werden, indem Du auf den Button "In" in der Toolbar klickst. Erst bekommst Du einen Datei-Picker, mit dem Du in das Verzeichnis navigierst und einfach ein Bild daraus auswählst. Es werden dann alle Bilder Seite für Seite importiert. (Allerdings wird erst der ganze Bilder-Ordner in ein Unterverzeichnis relativ zum Dokument kopiert und von dort aus verlinkt)
Achtung, der Prozess kann nicht einfach so abgebrochen werden und 100 Bilder sind "nicht ohne" :D
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten