Seite 1 von 2
Mit vb.net ein Writer-Dokument mit Bild füllen
Verfasst: Do 28. Jun 2012, 08:53
von sheogorat
Hallo erst einmal
Ich hoffe ihr könnt mir bei meinem Problem behilflich sein.
Möchte gern mittels vb.net ein Writer-Dokument, welches mit textmarken bestückt ist dementsprechend befüllen.
Soweit funktioniert das mit folgendem Code auch sehr gut mit Text:
Code: Alles auswählen
Dim oSM, oDesk, oDoc As Object
Dim arg(-1)
oSM = CreateObject("com.sun.star.ServiceManager")
oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
oDoc = oDesk.loadComponentFromURL("file:///D:/MyDoc.doc", "_blank", 0, arg)
oDoc.Bookmarks.getByName("Textmarke1").getAnchor.setString("Text fer eingefügt wird")
Jetzt würde ich jedoch auch gerne an bestimmten Stellen/Textmarken auch Bilder einfügen.
Ich hoffe doch sehr ihr könnt mir helfen.
Mit besten Dank.
Re: Mit vb.net ein Writer-Dokument mit Bild füllen
Verfasst: Do 28. Jun 2012, 19:28
von F3K Total
CROSSPOSTING ohne
Referenz ist unhöflich !!!
Re: Mit vb.net ein Writer-Dokument mit Bild füllen
Verfasst: Fr 29. Jun 2012, 08:50
von sheogorat
Sorry wenn ich damit jemanden verstimmt haben sollte - das war nicht mein Anliegen.
Habe erst nach Erstellung meines Threads auf dem OpenOffice-Forum die Verlinkung auf das LibreOffice-Forum gesehen
und da ich aktuell LibreOffice nutze, habe ich mir gedacht, dass ich mein Problem auch hier schildern könnte.
Was ich nicht so ganz verstehe ist, was sich an der Tatsache des Crosspostings mit befügen der Referenz ändert,
wenn ohnehin noch keine Antwort auf meine Frage gegeben wurde?
Ich denke, dass was du meinst ist, wenn ich ein und die selbe Frage in mehreren Foren stelle und in einem Forum diese beantortet würde,
so wäre es unhöflich diese Antwort als "Referenz" nicht in den anderen Foren mit zu verlinken.
Das soetwas jedem Forumnutzer klar sein sollte versteht sich ja von selbst, genau wie, wenn ich selber die Lösung gefunden habe diese den
anderen Forumnutzern auch zukommen zulassen und ggf. meine eigene Frage zu beantworten.
Also noch einmal sorry und sobald ich eine passende Antwort oder Lösung gefunden habe werde ich die in beiden Foren natürlich preisgeben

Re: Mit vb.net ein Writer-Dokument mit Bild füllen
Verfasst: Sa 30. Jun 2012, 19:12
von F3K Total
Hi,
ich kenne vb.net nicht, in Starbasic geht es z.B. so:
Code: Alles auswählen
Sub Insert_Bitmap
Dim Original_SizePixel As New com.sun.star.awt.Size
Dim Size_max As New com.sun.star.awt.Size
Dim Size As New com.sun.star.awt.Size
oDoc = thisComponent
obookmark = oDoc.Bookmarks.getByName("Textmarke1")
oAnchor = obookmark.Anchor
Size_max.Width=5000 'maximale Breite
Size_max.Height=3000 'maximale Höhe
sImgPath = "C:\Users\<USER>\Pictures\Diverse\Sample Pictures\Koala.jpg" 'Pfad zum Bild
sImgPath = ConvertToUrl(sImgPath)
sname = "MyPic"'interner Name des Bildes
oDoc = thisComponent
oBitmaps = oDoc.createInstance( "com.sun.star.drawing.BitmapTable" )
If oBitMaps.hasByName(sname) Then
oBitmaps.replaceByName(sname, sImgPath)
else
oBitmaps.insertByName(sname, sImgPath )
End If
oPic = oBitmaps.getByName(sname)
oGraph = oDoc.createInstance("com.sun.star.text.GraphicObject")
With oGraph
.GraphicURL = oPic
.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
End With
oDoc.Text.insertTextContent(oAnchor,oGraph,False)'Bild einfügen
'Skalieren
Original_SizePixel = oGraph.Graphic.SizePixel
Factor_Width=Size_max.width/Original_SizePixel.width
Factor_Height=Size_max.Height/Original_SizePixel.Height
if Factor_Width<=Factor_Height then 'bestimmen ob die Breite oder die Höhe der begrenzende Faktor ist
factor = Factor_Width
else
factor = Factor_Height
endif
size.width = Original_SizePixel.width*factor
size.Height = Original_SizePixel.Height*factor
oGraph.size=size
end sub
Viel Erfolg
Gruß R
Edit: Habe noch eine kleine Änderung des Codes vorgenommen:
Code: Alles auswählen
sname = "MyPic"'interner Name des Bildes
oDoc = thisComponent
oBitmaps = oDoc.createInstance( "com.sun.star.drawing.BitmapTable" )
If oBitMaps.hasByName(sname) Then
oBitmaps.replaceByName(sname, sImgPath)
else
oBitmaps.insertByName(sname, sImgPath )
End If
Re: Mit vb.net ein Writer-Dokument mit Bild füllen
Verfasst: Mo 2. Jul 2012, 11:37
von sheogorat
Ersteinmal vielen Dank für deine Antwort.
Bei der Zeile:
...bringt er mir immer die Fehlermeldung:
com.sun.star.uno.RuntimeException: text interface and cursor not related
Nehme an, dass er die Position des Textmarkers falsch bestimmt hat...
Code: Alles auswählen
oAnchor = oDoc.Bookmarks.getByName("Textmarke1").Anchor
Hast du noch eine Idee?
Re: Mit vb.net ein Writer-Dokument mit Bild füllen
Verfasst: Mo 2. Jul 2012, 12:02
von theindless
Hallo,
dumme Frage von mir...
Heißt deine Textmarke wirklich "Textmarke1"??
Ist nämlich kein Index sondern wirklich die Suche nach dem Namen "Textmarke1".
aber das mal nur so am Rande
theindless
Re: Mit vb.net ein Writer-Dokument mit Bild füllen
Verfasst: Mo 2. Jul 2012, 13:24
von sheogorat
Ja die Textmarke heißt wirklich "Textmarke1" im Dokument.
Das füllen mit einfachem Text funktioniert ohne Probleme.
@F3K Total
Ich nutze im übrigen LibreOffice 3.4.5 vielleicht liegt ja das Problem auch daran.
Auf welcher Version von LibreOffice beruht dein SourceCode?
Re: Mit vb.net ein Writer-Dokument mit Bild füllen
Verfasst: Mo 2. Jul 2012, 19:41
von F3K Total
Hi,
den Code habe ich unter OOo 3.3.0 geschrieben, geht bei mir auch untert LibreOffice 3.5.4.2 habe ich gerade ausprobiert.
Du lädst odoc, d.h. du mußt natürlich die Passage
im Code ersetzen.
Der Link zum Bild sollte auch passen.
Ausserdem macht bei mir das arg(-1) Probleme, daher habe ich es durch arg() ersetzt.
Hier nun für Dich speziell:
Code: Alles auswählen
Sub Insert_Bitmap_in_loadet_document
Dim oSM, oDesk, oDoc As Object
Dim arg()
oSM = CreateObject("com.sun.star.ServiceManager")
oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
oDoc = oDesk.loadComponentFromURL("file:///D:/MyDoc.doc", "_blank", 0, arg)
Dim Original_SizePixel As New com.sun.star.awt.Size
Dim Size_max As New com.sun.star.awt.Size
Dim Size As New com.sun.star.awt.Size
obookmark = oDoc.Bookmarks.getByName("Textmarke1")
oAnchor = obookmark.Anchor
Size_max.Width=5000 'maximale Breite
Size_max.Height=3000 'maximale Höhe
sImgPath = "C:\Users\<USER>\Pictures\Diverse\Sample Pictures\Koala.jpg" 'Pfad zum Bild
sImgPath = ConvertToUrl(sImgPath)
sname = "MyPic"'interner Name des Bildes
oBitmaps = oDoc.createInstance( "com.sun.star.drawing.BitmapTable" )
If oBitMaps.hasByName(sname) Then
oBitmaps.replaceByName(sname, sImgPath)
else
oBitmaps.insertByName(sname, sImgPath )
End If
oPic = oBitmaps.getByName(sname)
oGraph = oDoc.createInstance("com.sun.star.text.GraphicObject")
With oGraph
.GraphicURL = oPic
.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
End With
oDoc.Text.insertTextContent(oAnchor,oGraph,False)'Bild einfügen
'Skalieren
Original_SizePixel = oGraph.Graphic.SizePixel
Factor_Width=Size_max.width/Original_SizePixel.width
Factor_Height=Size_max.Height/Original_SizePixel.Height
if Factor_Width<=Factor_Height then 'bestimmen ob die Breite oder die Höhe der begrenzende Faktor ist
factor = Factor_Width
else
factor = Factor_Height
endif
size.width = Original_SizePixel.width*factor
size.Height = Original_SizePixel.Height*factor
oGraph.size=size
end sub
Gruß R
Re: Mit vb.net ein Writer-Dokument mit Bild füllen
Verfasst: Di 3. Jul 2012, 08:51
von sheogorat
Ok ich habe das Problem jetzt lösen können, es lag nicht am Code sondern an der Vorlage.
Bei der Erstellung habe ich einen Text gesetzt und diesen mit einem Rahmen versehen und erst im Anschluss diesen als Textmarker hinterlegt.
Die "richtige" Reihenfolge muss jedoch so aussehen: Text setzen, Texmarker darauf legen und dann evtl. Rahmen darum legen.
Dann klappt es auch mit folgendem Code unter vb.net:
Code: Alles auswählen
Dim oSM, oDesk, oDoc, oPic, oAnchor As Object
Dim aNoArgs(-1)
oSM = CreateObject("com.sun.star.ServiceManager")
oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
oDoc = oDesk.loadComponentFromURL("file:///D:/MyDoc.doc", "_blank", 0, aNoArgs)
oPic = oDoc.createInstance("com.sun.star.text.GraphicObject")
oPic.GraphicURL = "file:///D:/Test.jpg"
oAnchor = oDoc.Bookmarks.getByName("Bild1").Anchor 'bestimmt Position des Textmarkers
oDoc.Text.insertTextContent(oAnchor, oPic, False) 'Bild an Textmarker-Position einfügen
Ich danke euch vielmals für eure Unterstützung und im besonderen F3K Total, der mir hiermit den richtigen Weg aufgezeigt hat

Re: Mit vb.net ein Writer-Dokument mit Bild füllen
Verfasst: Di 3. Jul 2012, 22:09
von F3K Total
Hi,
du fügst das entsprechende Bild "verlinkt" ein, d.h. die Datei funzt auf einem anderen Rechner nicht, da du die Passage mit
Code: Alles auswählen
oBitmaps = oDoc.createInstance( "com.sun.star.drawing.BitmapTable" ) ...
weggelassen hast, die das Bild in die Datei einbetten würde, das ist Dir bewußt?
Ausserdem funzt die Skalierung dann nicht?
Gruß R