BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Mit vb.net ein Writer-Dokument mit Bild füllen

Alles zur Programmierung im LibreOffice.
sheogorat
Beiträge: 7
Registriert: Do 28. Jun 2012, 08:42

Mit vb.net ein Writer-Dokument mit Bild füllen

Beitrag von sheogorat » Do 28. Jun 2012, 08:53

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.

F3K Total
Beiträge: 2410
Registriert: So 10. Apr 2011, 10:10

Re: Mit vb.net ein Writer-Dokument mit Bild füllen

Beitrag von F3K Total » Do 28. Jun 2012, 19:28

CROSSPOSTING ohne Referenz ist unhöflich !!!
Windows 10: AOO, LO Linux Mint: AOO, LO

sheogorat
Beiträge: 7
Registriert: Do 28. Jun 2012, 08:42

Re: Mit vb.net ein Writer-Dokument mit Bild füllen

Beitrag von sheogorat » Fr 29. Jun 2012, 08:50

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 ;)

F3K Total
Beiträge: 2410
Registriert: So 10. Apr 2011, 10:10

Re: Mit vb.net ein Writer-Dokument mit Bild füllen

Beitrag von F3K Total » Sa 30. Jun 2012, 19:12

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
Windows 10: AOO, LO Linux Mint: AOO, LO

sheogorat
Beiträge: 7
Registriert: Do 28. Jun 2012, 08:42

Re: Mit vb.net ein Writer-Dokument mit Bild füllen

Beitrag von sheogorat » Mo 2. Jul 2012, 11:37

Ersteinmal vielen Dank für deine Antwort.

Bei der Zeile:

Code: Alles auswählen

oDoc.Text.insertTextContent(oAnchor,oGraph,False)
...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?

theindless
Beiträge: 36
Registriert: Mo 16. Apr 2012, 16:16

Re: Mit vb.net ein Writer-Dokument mit Bild füllen

Beitrag von theindless » Mo 2. Jul 2012, 12:02

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

sheogorat
Beiträge: 7
Registriert: Do 28. Jun 2012, 08:42

Re: Mit vb.net ein Writer-Dokument mit Bild füllen

Beitrag von sheogorat » Mo 2. Jul 2012, 13:24

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?

F3K Total
Beiträge: 2410
Registriert: So 10. Apr 2011, 10:10

Re: Mit vb.net ein Writer-Dokument mit Bild füllen

Beitrag von F3K Total » Mo 2. Jul 2012, 19:41

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

Code: Alles auswählen

odoc = ThisComponent
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
Windows 10: AOO, LO Linux Mint: AOO, LO

sheogorat
Beiträge: 7
Registriert: Do 28. Jun 2012, 08:42

Re: Mit vb.net ein Writer-Dokument mit Bild füllen

Beitrag von sheogorat » Di 3. Jul 2012, 08:51

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 ;)

F3K Total
Beiträge: 2410
Registriert: So 10. Apr 2011, 10:10

Re: Mit vb.net ein Writer-Dokument mit Bild füllen

Beitrag von F3K Total » Di 3. Jul 2012, 22:09

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
Windows 10: AOO, LO Linux Mint: AOO, LO

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten