Bildbeschriftung aus Dateinamen

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

Moderator: Moderatoren

sarotti
****
Beiträge: 105
Registriert: So, 12.03.2006 17:40
Wohnort: Nähe Krefeld

Re: Bildbeschriftung aus Dateinamen

Beitrag von sarotti »

Hallo Seebaer,

Wenn Du die Bilder als Verknüpfung eingefügt hast, kannst Du die Adressen auslesen. Vielleicht hilft Dir das folgende Makro weiter:

Code: Alles auswählen

Sub Grafiken_auslesen
Dim odoc as Object, grafiken as object, oURL as object, oTxt as Object
Dim s as string

odoc=thisComponent

 grafiken=odoc.getGraphicObjects()
 oObjects=odoc.getEmbeddedObjects()

REM Bilder in einer Schleife auslesen

	s = Chr(13) & " Verzeichnis der Bildreferenzen:" & CHR(13) & CHR(13)
 		for i= 0 to grafiken.count -1
		oURL = grafiken.getByIndex(i)
	s = s & "Abb." & i+1 & " : " & oURL.graphicUrl & chr(13) '& oURL.name  & " - "
 next

REM Einfügen am Ende des Textes

oTxt = oDoc.text
oTxt.insertString(oTxt.getEnd(), s + chr(13) + "Ende Bildreferenzen", False)
oTxt.insertControlCharacter(oTxt.getEnd(), com.sun.star.text.ControlCharacter.APPEND_PARAGRAPH, False)
oDoc.refresh()

msgBox "Bildreferenzen am Ende des Dokuments eingefügt", 64, "Bilder auslesen aus Text"

End Sub
Hier weden die Bilder am Ende Des Textdokumentes eingefügt...

Vile Erfolg!

Gruß
sarotti
sarotti
****
Beiträge: 105
Registriert: So, 12.03.2006 17:40
Wohnort: Nähe Krefeld

Re: Bildbeschriftung aus Dateinamen

Beitrag von sarotti »

Hallo Seebaer,
Seebaer hat geschrieben:Das Makro hab ich hinbekommen das es läuft aber das mit der Verknüpfung nicht. Wie geht das denn nun schon wieder?
...naja, damit ein Dateiname für diei Beschriftung da ist muss bei <Einfügen> <Bild> <aus Datei> die Option "Verknüpfung" ausgewählt sein....

Aber ich denke Deine Frage mit der Beschriftung läßt sich lösen, indem Du bei jedem Bild nach dem Einfügen mit der rechten Maustaste "Bechriftung" aufrufst. Dann erhälst Du einen Rahmen um jedes Bild in Deinem Tectdokument.

Mit Hilfe des folgenden Codes hast Du Zugriff auf diesen Rahmen und kannst diesen automatisch mit dem Dateinamen versehen...

Code: Alles auswählen

Sub GrafikRahmen_beschriften
Dim odoc as Object, grafiken as object, oURL as object

BasicLibraries.loadLibrary("Tools") 'Diese Biblothek brauchst Du für das Auslesen des Dateinamens

 odoc=thisComponent

    '*** oFrame=oDoc.getTextFrames()
    '*** die vorherige Zeile brauchst Du für die Alternative (s.u.)

 grafiken=odoc.getGraphicObjects()

REM *** Bilder in einer Schleife auslesen

for i= 0 to grafiken.count -1
		oURL = grafiken.getByIndex(i)
		oURL.getAnchor.TextFrame.String="Abb. " + i+": "+ FileNameOutOfPath(oURL.graphicUrl)

    ' *** alternativ (wenn keine anderen TextFrames vorhanden sind geht aus das hier):
    ' *** oFrame.getByIndex(i).String="Abb. " + i+": "+ FileNameOutOfPath(oURL.graphicUrl)
next

End Sub
O.K. soweit?....

Leider kann ich Dir nicht sagen, wie man für jedes Bild automatisch einen Beschriftungsrahmen einfügt... das wäre vermutlich auch nicht schlecht ;-)

Viel Erfolg

Gruss
sarotti
sarotti
****
Beiträge: 105
Registriert: So, 12.03.2006 17:40
Wohnort: Nähe Krefeld

Re: Bildbeschriftung aus Dateinamen

Beitrag von sarotti »

Hallo Seebaer,

Deine Fehlermeldung liegt vermutlich daran, dass Du die Bilder nicht beschriftet hast. Dann kann das Objekt - in dem vorliegenden Fall der "Anchor" auch nicht existieren. Also noch einmal: Für dieses Makro muss bei jedem Bild der Beschriftungsrahmen gesetzt sein (rechte Maustaste auf dem Bild, Beschriftung)... ist aufwendig, aber beim manuellen Einfügen vermutlich unwesentlich mehr Aufwand als das Einfügen selbst. Anschließend mit Hilfe des Makros (das zweite) die Dateinamen in die Beschriftungsrahmen einfügen... sollte ohne Probleme klappen.

Allerdings habe ich Dein Anliegen wohl noch nicht ganz verstanden.
Ich werd da so um die 400 Bilder einfügen wollen, mit automatischer Bildbetitelung aus dem Dateinamen, dann wollt ich mir ein Inhaltsverzeichniss generieren lassen damit ich über dieses dann Lesezeichen beim PDF-Export erzeugen lassen kann. Falls noch jemand eine andere Idee hat?
Da die Bilder sich ab und zu ändern, wär´s ganz schön wenn ich da dann einfach alle Bilder zum Import anklicken könnte und der rest automatisch geschieht, so das ich dann nur noch den pdf-export machen müßte.
O.K. also noch einmal für mich (vielleicht bin ich ja heute nicht ganz so schnell... :D )

1. Viele Bilder sind in der Datei und sollen alle mit Dateinamen versehen werden (sollte über das zweite gepostete Makro - sofern die Beschriftung für jedes Bild gesetzt wurde - funktionieren)
2. Es soll ein Inhaltsverzeichnis erstellt werden. (Sollte mit dem von mir erst geposteten Makro funktionieren)
3. Es sollen Links gesetzt werden - aber wohin? Auf die Originaldatei (sprich das Bild soll als Links mit welchem Programm auch immer geöffnet werden können?) oder innerhalb der Datei als Inhaltsverzeichnis mit einem Sprung auf das Bild.... aus der PDF-Datei auf das Bild in der PDF-Datei... Dann fehlt eigentlich nur noch die Kombination des ersten Makros (sprich die Liste der Bilder) mit einer Sprungmarke - richtig? Ich bin mir aber nicht sicher ob das inerhalb des PDF Dokumentes klappt...

Du kannst Dich ja mal wegen meiner Verständnisprobleme zurückmelden. Dann kann ich ja mal schauen, wie man das realisieren könnte....

Gruss
sarotti
sarotti
****
Beiträge: 105
Registriert: So, 12.03.2006 17:40
Wohnort: Nähe Krefeld

Re: Bildbeschriftung aus Dateinamen

Beitrag von sarotti »

Hallo Seebaer,

...da hat mich der Ehrgeiz gepackt..... Ich denke, dass ich die Lösung für Dich habe...

Es werden werden per Makro Bilder aus einem Verzeichnis ausgewählt, dies werden beschriftet, erhalten eine Formatierung (Überschrift 1), die dann bei einem Export als PDF Dokument als Bookmark gewählt werden können...

So sieht das nun aus....

Code: Alles auswählen

Sub BilderEinfuegenPlusBookmark

DIM Array()

oDoc=ThisComponent

oFolderDlg = createUnoService("com.sun.star.ui.dialogs.FolderPicker")
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
DIM oSize as new com.sun.star.awt.Size

document   = oDoc.CurrentController.Frame

sfolder=oFolderDlg.execute()
sPfad=ConvertFromUrl(oFolderDlg.Directory)
sDatei=Dir(sPfad+"\*.jpg",0)

do

	REM *** Auslesen des nächsten Bildes
		sDatei=Dir$
		
	REM *** ans Ende des Dokumentes gehen und.....
		oPos=oDoc.Text.getEnd()
	
	REM *** Dateiname einfügen
		oPos.string= sDatei
	
	REM *** Zeilenformatierung "Überschrift" (für das Inhaltsverzeichnis bzw. die Bookmarks als PDF Datei erforderlich)
		CALL ZeilenFormat

	REM *** Bild einfühen
		oBild = oDoc.createInstance( "com.sun.star.text.GraphicObject")
		oBild.GraphicURL=convertToURL(sPfad+"\"+sDatei)
	
	REM *** Größe setzen
		oSize.Width=17100
		oSize.Height=24930
		oBild.setSize(oSize)

	REM ...das einfügen des Bildes	
		oDoc.Text.insertTextContent(oPos, oBild, false )
		
	REM *** Seitenwechsel einfügen
		dispatcher.executeDispatch(document, ".uno:InsertPagebreak", "", 0, Array())
	
Loop While sDatei<>""

end Sub

'###########################################

sub ZeilenFormat

dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Template"
args1(0).Value = "Überschrift 1"
args1(1).Name = "Family"
args1(1).Value = 2

dispatcher.executeDispatch(document, ".uno:StyleApply", "", 0, args1())

end sub

'###########################################

Schau mal, ob´s das ist....

Wenn Du noch ein Inhaltsverzeichnis haben willst, kannst Du dies ja noch manuell einfügen....

So, nun Schluss (ist ja eigentlich nicht der Sinn des Forums anderen komplette Lösungen zu bieten) ...aber das Thema hat mich halt seeehr interessiert, da ich ähnliche Dinge für ein kleines, befreundetes Unternehmen brauchen kann...

Gruss
sarotti
sarotti
****
Beiträge: 105
Registriert: So, 12.03.2006 17:40
Wohnort: Nähe Krefeld

Re: Bildbeschriftung aus Dateinamen

Beitrag von sarotti »

Hallo Seebaer,

:D Erfolg freut immer...

abschließender Tipp: die Skalierung kannst Du mit der Size Funktion ändern "Height" und "Width" müssen entsprechend Deiner Bildgröße (d.h. im richtigen Maßstab) angepasst werden.

Code: Alles auswählen

...
Size.Width=17100 (d.h. 17,1 cm)
oSize.Height=24930 (d.h. 24,93 cm)
...
Da Du aber von Bildern (denke mal Photos) sprichst, gehe ich mal davon aus, dass diese immer im selben Format vorliegen.

Gruss
sarotti
Antworten