Seite 1 von 1
Bilder Import nicht als Verknüpfung
Verfasst: Di, 31.05.2011 14:00
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
Re: Bilder Import nicht als Verknüpfung
Verfasst: Di, 31.05.2011 15:35
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
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)
Re: Bilder Import nicht als Verknüpfung
Verfasst: Di, 31.05.2011 15:42
von morpheus_f
DPunch Du bist mein Held !!!
Vielen Dank !!!!!
Re: Bilder Import nicht als Verknüpfung
Verfasst: Di, 19.07.2011 17:36
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
Re: Bilder Import nicht als Verknüpfung
Verfasst: Di, 19.07.2011 22:52
von DPunch
Re: Bilder Import nicht als Verknüpfung
Verfasst: Do, 21.07.2011 11:57
von MikeRo
Ich habe den Beitrag gefunden, nur bekomme ich eine Fehlermeldung bei
"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
Re: Bilder Import nicht als Verknüpfung
Verfasst: Do, 21.07.2011 12:26
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
Re: Bilder Import nicht als Verknüpfung
Verfasst: Do, 21.07.2011 12:35
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
Du bist mein persönlicher Held!
Vielen Dank!
Eine Möglichkeit für eine Bildüberschrift und Unterschrift gibt es aber nicht oder?