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??
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.
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
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:
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)
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:
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)