Bilder Import nicht als Verknüpfung

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

Moderator: Moderatoren

morpheus_f
*
Beiträge: 12
Registriert: Do, 17.03.2011 14:42

Bilder Import nicht als Verknüpfung

Beitrag von morpheus_f »

Hallo Leute,

ich hab ein kleines Verständnis -Problem:

In meinem Makro wird das Textdokument nach dem Bilder-Pfad (z.B. file:///home/user/Desktop/bild.jpg) durchsucht und das Bild Importiert.
Das funktioniert soweit ganz gut, nur dass das Bild nicht komplett in die Datei eingebunden wird sondern nur verknüpft wird.

Ich dachte "GraphicURL" bindet die Datei ein und "GraphicStreamURL" verknüpft diese nur. Oder ist das Falsch??

Kann mir da jemand weiterhelfen???

Hier der Code

Code: Alles auswählen

Sub GrafikEinfuegen
	Dim oDoc as object, oGrafik as object, oDrawpage as Object, oSuchen as Object, oSuchErg as Object 
	Dim sURL as String, oTxtRange as Object, oBitmapGr as Object
	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	Const tpm = 0.017636684
	oDoc = ThisComponent
	oDrawpage = oDoc.getDrawpage()
	oTxtRange = ThisComponent.getCurrentcontroller().getviewcursor()
	oGrafik = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")

	oSuchen = oDoc.createSearchDescriptor
	oSuchen.SearchRegularExpression = True
   	oSuchen.setSearchString("file:///(.*)\.*")
	
	oSuchErg = oDoc.findfirst(oSuchen)
	oSuchErg.paraadjust=com.sun.star.style.ParagraphAdjust.LEFT
	
	
	found = oDoc.findfirst(osuchen)
	sUrl=found.string
	
		oGrafik.GraphicURL = sURL

	oDoc.Text.insertTextContent(oSuchErg, oGrafik, false)

	oGrafik.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
	dim oGrafGr as new com.sun.star.awt.Size
	oBitmapGr = oGrafik.GraphicObjectFillBitmap.GetSize

	oGrafGr.height = oBitmapGr.height * TwipsPerPixelX * tpm *120
	oGrafGr.width = oBitmapGr.width * TwipsPerPixelY * tpm * 120
 	oGrafik.setSize(oGrafGr)

End Sub
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Bilder Import nicht als Verknüpfung

Beitrag von DPunch »

Aloha
morpheus_f hat geschrieben:Ich dachte "GraphicURL" bindet die Datei ein und "GraphicStreamURL" verknüpft diese nur. Oder ist das Falsch??
Ich glaube nicht, dass irgendein Zusammenhang zwischen verwendeter Methode und der Art des Bildes (linked / embedded) besteht.
morpheus_f hat geschrieben:Kann mir da jemand weiterhelfen?
Siehe auch z.B. hier.

In Deinem Code nach der Zeile

Code: Alles auswählen

sUrl=found.string
folgende Zeilen einfügen

Code: Alles auswählen

oBitmaps = oDoc.createInstance("com.sun.star.drawing.BitmapTable")
sInternalPicName = "myPic"
Do While oBitmaps.hasByName(sInternalPicName)
   sInternalPicName = sInternalPicName & "1"
Loop
oBitmaps.insertByName(sInternalPicName, sURL)
sUrl = oBitmaps.getByName(sInternalPicName)
morpheus_f
*
Beiträge: 12
Registriert: Do, 17.03.2011 14:42

Re: Bilder Import nicht als Verknüpfung

Beitrag von morpheus_f »

DPunch Du bist mein Held !!!

Vielen Dank !!!!!
Benutzeravatar
MikeRo
****
Beiträge: 153
Registriert: Mi, 20.01.2010 10:16

Re: Bilder Import nicht als Verknüpfung

Beitrag von MikeRo »

Ich habe das gleiche Problem, weiß aber gerade nicht wie ich den Bitmapcode richtig implementieren soll.

Hier ist mein Code zum einfügen von Bildern, diese werden aber auch nur als Verknüpfung eingefügt.

Code: Alles auswählen

Sub GrafikEinfuegen

mycell = oSheet.getCellByPosition(Letztespalte,0)
oColumn = mycell.getColumns.getByIndex(0).getName()
cellname = oColumn
cellname = cellname & 1

oCell = oDoc.sheets.getByName("Angebot").getCellRangeByName(cellname)
aPos = oCell.Position

Point.x =  aPos.X-2900
Point.y =  aPos.Y
Size.Width = 5450
Size.Height = 2000
Page = oDoc.drawPages(0)
GraphicObjectShape = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
GraphicObjectShape.Size = Size
GraphicObjectShape.Position = Point

   	If OS = 1 Then 'Windows
	GraphicObjectShape.GraphicURL = "file:///Z:/Vorlagen/Logo.jpg"
   	ElseIf OS = 4 Then 'Unix
   	GraphicObjectShape.GraphicURL = "file:///media/transfer/Vorlagen/Logo.jpg"
   	End IF

GraphicObjectShape.Name = "Test"
GraphicObjectShape.Title = "Test"
GraphicObjectShape.GraphicColorMode = com.sun.star.drawing.ColorMode.STANDARD
Page.add(GraphicObjectShape)
End Sub
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Bilder Import nicht als Verknüpfung

Beitrag von DPunch »

Aloha

Der komplette Code dafür ist Hier -> "Über ein Makro ein bildeinfügen und Größe ändern" zu finden.
Zuletzt geändert von DPunch am Do, 21.07.2011 12:23, insgesamt 1-mal geändert.
Benutzeravatar
MikeRo
****
Beiträge: 153
Registriert: Mi, 20.01.2010 10:16

Re: Bilder Import nicht als Verknüpfung

Beitrag von MikeRo »

DPunch hat geschrieben:Aloha

Der komplette Code dafür ist Hier -> "Über ein Makro ein bildeinfügen und Größe ändern" zu finden.
Ich habe den Beitrag gefunden, nur bekomme ich eine Fehlermeldung bei

Code: Alles auswählen

    oBorder = oTextFrame.BottomBorder
"Objektvariable nicht belegt"

Hier mein Code.
Das Problem ist aber, das ich die Pfade der Bilder aus der Datenbank auslese und die Bilder an eine bestimmte Position in dem Dokument müssen. Und die Position ist auch jedes mal anders, da die Tabelle über den Bildern immer eine variable Breite (Anzahl von Spalten) hat. Prinzipiell müssen bis zu 3 Bilder nebeneinander unter der Tabelle eingefügt werden. Mit meinem Makro klappt das auch wunderbar, aber eben nur als Verknüpfung. Was ich auch nicht wirklich hin bekommen habe ist eine Bild Überschrift genau über dem Bild und eine Bild Unterschrift genau unter dem Bild.

Code: Alles auswählen

Sub GrafikEinfuegen

    nWidth = 5450 'Breite
    nHeight = 2000 'Höhe
    sLabel = "Abbildung " 'Beschriftung unter dem Bild

   	If OS = 1 Then 'Windows
	 sImgPath = "file:///Z:/Programme/Vorlagen für Makros/Angebote/Bilder/SW.jpg"
   	ElseIf OS = 4 Then 'Unix
   	 sImgPath = "file:///media/transfer/Programme/Vorlagen für Makros/Angebote/Bilder/SW.jpg"
   	End IF
   
    oBitmaps = oDoc.createInstance( "com.sun.star.drawing.BitmapTable" )
    sInternalPicName = "myPic"
    For i = 0 To 200
       sInternalPicName = "myPic" & i
       If NOT oBitmaps.hasByName(sInternalPicName) Then Exit For
    Next i
    oBitmaps.insertByName(sInternalPicName, sImgPath )
    If NOT oBitmaps.hasByName(sInternalPicName) Then
       MsgBox("Ausgewählte Datei konnte nicht als Grafik eingefügt werden",48,"Fehler")
       Exit Sub
    End If
    oDoc.lockControllers
    oPic = oBitmaps.getByName(sInternalPicName)
    oTextFrame = oDoc.createInstance("com.sun.star.text.TextFrame")
    oBorder = oTextFrame.BottomBorder
    With oBorder
       .Color = 0
       .InnerLineWidth = 0
       .OuterLineWidth = 0
       .LineDistance = 0
    End With
    With oTextFrame
       .Width = nWidth
       .Height = nHeight
       .BottomBorder = oBorder
       .TopBorder = oBorder
       .RightBorder = oBorder
       .LeftBorder = oBorder
       .LeftMargin = 0
       .RightMargin = 0
       .TopMargin = 0
       .BottomMargin = 0
       .TextWrap = 0
       .SizeType = 0
       .AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
    End With

    oCursor = oDoc.CurrentController.getViewCursor
    On Local Error GoTo ErrorOccured
    If NOT isEmpty(oCursor.TextTable) Then
       oCursor.Cell.insertTextContent(oCursor,oTextFrame,False)
    ElseIf NOT isEmpty(oCursor.TextFrame) Then
       oCursor.TextFrame.insertTextContent(oCursor,oTextFrame,False)
    Else
       oDoc.Text.insertTextContent(oCursor,oTextFrame,False)
    End If
    oCursor = oTextFrame.createTextCursor

    oGraph = oDoc.createInstance("com.sun.star.text.GraphicObject")
    With oGraph
       .GraphicURL = oPic
       .AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
       .Width = nWidth
       .Height = nHeight
    End With
    oTextFrame.insertTextContent(oCursor,oGraph,False)

    oTextFrame.String = sLabel
    oTFMaster = oDoc.TextFieldMasters.getByName("com.sun.star.text.fieldmaster.SetExpression.Illustration")
    oField = oDoc.createInstance("com.sun.star.text.textfield.SetExpression")
    oField.attachTextFieldMaster(oTFMaster)

    oCursor.goToEnd(False)
    oTextFrame.insertTextContent(oCursor,oField,False)

    oCursor.goToStart(True)
    oCursor.CharPosture = 2

    oDoc.TextFields.refresh
    Do While oDoc.hasControllersLocked
       oDoc.unlockControllers
    Loop
    Exit Sub

    ErrorOccured:
    MsgBox ("Cursor an ungeeigneter Position (z.B. Grafik)",48,"Fehler")
    If oBitmaps.hasByName(sInternalPicName) Then
       oBitmaps.removeByName(sInternalPicName)
    End If
    Do While oDoc.hasControllersLocked
       oDoc.unlockControllers
    Loop

End Sub
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Bilder Import nicht als Verknüpfung

Beitrag von DPunch »

Aloha

Dir geht es doch nur um die das embedden der Bilder, oder? Dann brauchst Du natürlich nicht den ganzen Code, sondern nur den Abschnitt, den ich zwei Posts vor Deinem Ursprungspost geschrieben hatte. Den Link hatte ich Dir nur gesetzt, damit Du das Ganze im Kontext anschauen kannst, nicht, weil er 1:1 übertragbar wäre (wobei ich gerade merke, dass ich anscheinend statt des Post-Subjects auf den Benutzernamen geklickt hatte für die Verlinkung, ist jetzt angepasst).
Auf die Schnelle zusammengesetzt:

Code: Alles auswählen

If OS = 1 Then 'Windows
  sURL = "file:///Z:/Vorlagen/Logo.jpg"
ElseIf OS = 4 Then 'Unix
  sURL = "file:///media/transfer/Vorlagen/Logo.jpg"
End IF
oBitmaps = oDoc.createInstance("com.sun.star.drawing.BitmapTable")
sInternalPicName = "myPic"
For i = 0 To 200
   sInternalPicName = "myPic" & i
   If NOT oBitmaps.hasByName(sInternalPicName) Then Exit For
Next i
oBitmaps.insertByName(sInternalPicName, sImgPath )
If NOT oBitmaps.hasByName(sInternalPicName) Then
  MsgBox("Ausgewählte Datei konnte nicht als Grafik eingefügt werden",48,"Fehler")
  Exit Sub
End If
sURL = oBitmaps.getByName(sInternalPicName)
und unten dann

Code: Alles auswählen

(...)
GraphicObjectShape.GraphicURL = sURL
(...)
Benutzeravatar
MikeRo
****
Beiträge: 153
Registriert: Mi, 20.01.2010 10:16

Re: Bilder Import nicht als Verknüpfung

Beitrag von MikeRo »

DPunch hat geschrieben:Aloha

Dir geht es doch nur um die das embedden der Bilder, oder? Dann brauchst Du natürlich nicht den ganzen Code, sondern nur den Abschnitt, den ich zwei Posts vor Deinem Ursprungspost geschrieben hatte. Den Link hatte ich Dir nur gesetzt, damit Du das Ganze im Kontext anschauen kannst, nicht, weil er 1:1 übertragbar wäre (wobei ich gerade merke, dass ich anscheinend statt des Post-Subjects auf den Benutzernamen geklickt hatte für die Verlinkung, ist jetzt angepasst).
Auf die Schnelle zusammengesetzt:

Code: Alles auswählen

If OS = 1 Then 'Windows
  sURL = "file:///Z:/Vorlagen/Logo.jpg"
ElseIf OS = 4 Then 'Unix
  sURL = "file:///media/transfer/Vorlagen/Logo.jpg"
End IF
oBitmaps = oDoc.createInstance("com.sun.star.drawing.BitmapTable")
sInternalPicName = "myPic"
For i = 0 To 200
   sInternalPicName = "myPic" & i
   If NOT oBitmaps.hasByName(sInternalPicName) Then Exit For
Next i
oBitmaps.insertByName(sInternalPicName, sImgPath )
If NOT oBitmaps.hasByName(sInternalPicName) Then
  MsgBox("Ausgewählte Datei konnte nicht als Grafik eingefügt werden",48,"Fehler")
  Exit Sub
End If
sURL = oBitmaps.getByName(sInternalPicName)
und unten dann

Code: Alles auswählen

(...)
GraphicObjectShape.GraphicURL = sURL
(...)
Du bist mein persönlicher Held! :-)
Vielen Dank!

Eine Möglichkeit für eine Bildüberschrift und Unterschrift gibt es aber nicht oder?
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
Antworten