On 15/04/2015 16:00, Piet van Oostrum wrote:
Hello,

I am in the process of converting several Java LO programming examples to 
Python. My plan is to do all (or most) of them. Also I try to extend them. 
However I encountered some surprises.

I converted LibreOffice4.4_SDK/examples/java/Text/GraphicsInserter.java which 
inserts a graphic image in a new Writer document. Works without problems.

Then I decided to add some text also, and put the picture in the middle of the 
text.

The code goes like this:

     # Create a new Writer document, which will be automatically displayed
     doc = Desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, 
())

     # Getting the text
     xText = doc.getText()

     # Getting a cursor on the document
     xTextCursor = xText.createTextCursor()

     # Inserting some text
     xText.insertString(xTextCursor, "This is the first paragraph.", False)
     xText.insertControlCharacter(xTextCursor, PARAGRAPH_BREAK, False)
     xText.insertString(xTextCursor, "Some text before the graphic. ", False)

     # Insert the graphic
     insertGraphic(doc, xText, xTextCursor, sUrl)

     # Inserting some more text
     xText.insertString(xTextCursor, "Some text after the graphic.", False)
     xText.insertControlCharacter(xTextCursor, PARAGRAPH_BREAK, False)
     xText.insertString(xTextCursor, "This is the second paragraph.", False)

def insertGraphic(doc, xText, cursor, sUrl):
     oGraphic = doc.createInstance("com.sun.star.text.TextGraphicObject")
     xText.insertString(cursor, "++", False)
     # Insert graphic between ++ and //
     xText.insertTextContent(cursor, oGraphic, False)
     # Setting the anchor type - must be done first, otherwise the graphic will 
be put after the //
     oGraphic.AnchorType = AS_CHARACTER
     xText.insertString(cursor, "//", False)
     # Setting the graphic url
     oGraphic.GraphicURL = sUrl

     # Setting the width and height
     oGraphic.Width = 2000
     oGraphic.Height = 2000

The image is inserted in the middle of a paragraph and surrounded by ++ and // 
to indicate where it should be. This also works without problems.

Then I decided to change the order. First I insert all text; then I go back to 
the insertion point and insert the image. To my surprise the image ended up a 
couple of words later in the text

The insertion code is then:

     # Inserting some text
     xText.insertString(xTextCursor, "This is the first paragraph.", False)
     xText.insertControlCharacter(xTextCursor, PARAGRAPH_BREAK, False)
     xText.insertString(xTextCursor, "Some text before the graphic. ", False)

     # Inserting some more text
     xText.insertString(xTextCursor, "Some text after the graphic.", False)
     xText.insertControlCharacter(xTextCursor, PARAGRAPH_BREAK, False)
     xText.insertString(xTextCursor, "This is the second paragraph.", False)

     # Move the cursor
     xTextCursor.gotoPreviousParagraph(False)
     xTextCursor.gotoNextSentence(False)
did you sure you are here where you think you are ? and not at the end off the wro,g paragraph
trye
# Move the cursor xTextCursor.gotoPreviousParagraph(False)

 xTextCursor.gotoPreviousParagraph(False)
xTextCursor.gotoNextSentence(False)

hope it helps

Fernand

# Insert the graphic
     insertGraphic(doc, xText, xTextCursor, sUrl)

Now I would expect ++Image// to be found just before "Some text after the graphic." 
However the ++// is indeed inserted there, but the image appears after "Some text after 
the", 4 words later. The image is indeed anchored to this position, as I can see when I 
manually insert some more text before it. So it is not a matter of an offset.

I have also tried to create another cursor with the endpoint of xTextCursor 
between the two sentences, and then use this to insert the graphic but that 
doesn't help.

Does anybody know what is happening here?

_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to