Inserting GraphicObjects in tablecells in oWriter

View: New views
2 Messages — Rating Filter:   Alert me  

Inserting GraphicObjects in tablecells in oWriter

by Steffen Boersig :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

i'm currently trying to solve my problem with tablecells.
I managed to get my GraphicObjects into my oWriter files with help of
snippets, mainly with

http://codesnippets.services.openoffice.org/Writer/Writer.EmbedAGraphicIntoATextdocument.snip

To determine the position where to anchor the image, I'm using
placeholders as normal strings within my oWriter file.
A XTextCursor is placed onto that placeholder and ist used for

 text.insertTextContent(cursor, xTextContent, true);

Runs smoothly except for the fact, that if my placeholder is within a
table I'm getting a RuntimeException with no further details.
After some research online I've found several approaches to that
problem. One which suggests using the method

getCellParagraph($cell)

to get an anchor to that specific cell. Problem is, there is no
getCellParagraph() method in the API of OOo.
Maybe it was an older approach.
The second approach I found suggests using Shapes to add them to
DrawPages. I couldn't figure out to make that one work, maybe because it
was suggested for oCalc instead of oWriter. But I don't know if it
should work in oWriter the same way and I'm just too dumb to use it.
That one was discussed here:

http://api.openoffice.org/servlets/ReadMsg?listName=dev&msgNo=2618

So my questions are:
(1) Is it possible to use insertTextContent with images in tablecells
when I'm in oWriter? And what do I have to change to make it work? When
not, why isn't it possible?
(2) Is using Shapes also the way to go for oWriter if I'm trying to get
images into tablecells?
(3) What mehtod is used if I manually insert images into cells with the
oWriter GUI?

Thanks in advance.

Steffen Boersig


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@...
For additional commands, e-mail: dev-help@...


Re: Inserting GraphicObjects in tablecells in oWriter

by Fernand Vanrie :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Steffen,

please find the basic code who inserts graphics in Tablecells using the
cell dimensions to dimensioning the grapgics.
Finding the dimensions off a cell can be tricky when cells are merged
ect.. therefore i use the "dificult to read" :-)firts part of the code

hope it helps

Fernand

    oText = oDocument.text
       RasterofCursor = True
    oViewCursor = oDocument.getCurrentController().getViewCursor()
'    xray oviewcursor
    If Not isEmpty(oViewCursor.TextTable) then  ' Cursor is in een Tabel
 '   sFrameofTabel = "TABEL"
  '  inFRameofTabel = true
  '  RasterofCursor = False
    Twidth = oViewCursor.TextTable.width
    TTotalpercent = oViewCursor.TextTable.TableColumnRelativeSum
    startcell = oViewCursor.cell.cellname
    Kindex = asc(left(oViewCursor.cell.cellname,1))-65
    Rindex = int(mid(oViewCursor.cell.cellname,2,2))-1
    CurRow = oViewCursor.texttable.rows.getbyindex(Rindex)
    if CurRow.IsAutoHeight = True then
    msgbox "De ROWhooghte moet FIXED zijn !!!!!" & chr(13) & "Eerst
aanpassen, dan pas kan je verder"
    exit sub
    end if
     if
oViewCursor.cell.compareRegionStarts(oViewCursor.cell.getstart,oViewCursor.cell.getend)
<> 0 or oViewCursor.cell.string <>"" then
    msgbox  "er mag in de cell enkel één" & chr(13) & "RETURN staan" &
chr(13) & "Eerst aanpassen, dan pas kan je verder"
   exit sub
    endif
    if oViewCursor.paraStylename <> "Standard" then
    msgbox "de ParaGraphStyle in de Tabelcell staat niet op default" &
chr(13) & "wordt nu automatisch aangepast !!"
    oViewCursor.ParaStyleName = "Standard"
    end if
    if oViewCursor.CharStylename <>  "" then
    msgbox "de CharacterStyle in de Tabelcell staat niet op default" &
chr(13) & "wordt nu automatisch aangepast !!"
     oViewCursor.setPropertyToDefault("CharStyleName")
    end if
 
    if oViewCursor.texttable.Horiorient = 6 then
    msgbox " De Table mag niet AUTOMATISCH gealigneerd zijn" & chr(13) &
"wordt nu automatisch aangepast naar ""center"" !!"
     oViewCursor.texttable.Horiorient = 2
    end if
 
   
   ' welke cell ??
    startcellname = oViewCursor.cell.cellname  
    startrow = int(mid(startcellname,2,2))
    if  oViewCursor.cell.VertOrient <> 2 then
    msgbox "Cursor staat niet in de HOOGTE gecentreerd" & chr(13) &
"wordt nu automatisch aangepast !!"
    oViewCursor.cell.VertOrient = 2
    end if
   if  oViewCursor.cell.createEnumeration.nextelement.paraAdjust <> 3 then
    msgbox "Tabelcell-Cursor is Niet in de BREEDTE gecentreerd" &
chr(13) & "wordt nu automatisch aangepast !!"
 oViewCursor.cell.createEnumeration.nextelement.paraAdjust = 3
     end if
           
          oViewcursor.goDOWN(1,false) ' de tabel MOET in een FRame
zitten anders problemen bij de onderste rij !!!!!
         
          if isEmpty(oViewCursor.TextTable) then
          startcellpos = "ONDER"
          oViewcursor.goUP(1,false)
 
         end if
 
   
     if startcellpos = "ONDER" then
     'eerst terug naar startcell
     otext = oviewcursor.texttable.getcellbyname(startcellname,true).text
   
     otabelCursor = oText.createTextCursor()
   
     oViewcursor.gotorange(otabelCursor,false)
'      xray oViewcursor
          If otext.supportsService("com.sun.star.text.Paragraph") then
           print "is paragraaf"
           exit sub
           end if

     laatsterow = oViewCursor.TextTable.rows.count
     if laatsterow = int(mid(oViewCursor.cell.cellname,2,2)) then ' cell
is één row hoog
     iFotH = oViewCursor.texttable.rows.getbyindex(Rindex).height
     else
        for i= 0 to laatsterow - int(mid(oViewCursor.cell.cellname,2,2))
     iFotH = iFotH + oViewCursor.texttable.rows.getbyindex(Rindex+ i
).height
     next i
     end if
   
   
     else 'cell boven of midden
     ' eerst terug naar de startcell
     otext =  oviewcursor.texttable.getcellbyname(startcellname,true).text
   
   
     otabelCursor = oText.createTextCursor()
     oViewcursor.gotorange(otabelCursor,false)
     startrow = int(mid(oViewCursor.cell.cellname,2,2))
             oViewcursor.goDOWN(1,false)
            volgenderow = int(mid(oViewCursor.cell.cellname,2,2))
   
      if isEmpty(oViewCursor.TextTable) then 'terug naar binnen de tabel
         oViewcursor.goUP(1,false)
         end if
      ' terug naar de startcell
     otext = oviewcursor.texttable.getcellbyname(startcellname,true).text
     otabelCursor = oText.createTextCursor()
     oViewcursor.gotorange(otabelCursor,false)
     for i= 1 to volgenderow - startrow
     iFotH = iFotH + oViewCursor.texttable.rows.getbyindex(Rindex + i-1
).height
 
     next i
   
     endif

   ' iFotH = CurRow.height
   
 
    tabstops = CurRow.TableColumnSeparators()
   
   if uBound(tabstops)< 0 then
    iFotW = tWidth
    else
     
        if kindex = 0 then
        iFotW = (twidth * tabstops(Kindex).position/TTotalpercent)
        elseif kindex -1 = ubound(tabstops) then
        iFotW = twidth - (twidth *
tabstops(Kindex-1).position/TTotalpercent)
        else  
        iFotW = (twidth * tabstops(Kindex).position/TTotalpercent) -
(twidth * tabstops(Kindex-1).position/TTotalpercent)
        endif
    end if
 
   
    otext = oViewCursor.text



    lAnchor = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
'AT_PARAGRAPH '
  oShape =
oDocument.createInstance("com.sun.star.drawing.GraphicObjectShape") '
shape  is leeg
  oGraphic = oDocument.createInstance("com.sun.star.text.GraphicObject")
  oDocument.getDrawPage().add(oShape)
  oOriginalGraph  = getGraphFromUrl(sGraphicURL)
  oShape.Graphic = oOriginalGraph
   
   oGraphic.GraphicUrl = oShape.GraphicUrl
     oGraphic.AnchorType = lAnchor

    oCell = oViewCursor.cell
    oText = oCell.getText()
    iFOTh = iFOTH - oCell.BottomBorderDistance - oCell.TopBorderDistance
    iFOTw = iFOTw - oCell.LeftBorderDistance - oCell.RightBorderDistance
    oCursor = oText.createTextCursor()
    oText.insertTextContent( oCursor, oGraphic, False )
 
  ' We no longer require the shape object.
      oDocument.getDrawPage().reMove(oShape)
      oShape = nothing

       oGraphic.HoriOrientPosition = 0
     oGraphic.VertOrientPosition = 0
   
     
     oGraphic.SetPropertyValue("GraphicCrop" , aCrop)
      oGraphic.SetPropertyValue("HyperLinkName" ,  sGraphicURL)
     oGraphic.PositionProtected = False
    oGraphic.SizeProtected = False
    oGraphic.ContentProtected = True
     oGraphic.width = iFotW
     oGraphic.height = iFotH
     oGraphic.HoriOrient = NONE
     oGraphic.VertOrient = NONE

> Hi,
>
> i'm currently trying to solve my problem with tablecells.
> I managed to get my GraphicObjects into my oWriter files with help of
> snippets, mainly with
>
> http://codesnippets.services.openoffice.org/Writer/Writer.EmbedAGraphicIntoATextdocument.snip 
>
>
> To determine the position where to anchor the image, I'm using
> placeholders as normal strings within my oWriter file.
> A XTextCursor is placed onto that placeholder and ist used for
>
> text.insertTextContent(cursor, xTextContent, true);
>
> Runs smoothly except for the fact, that if my placeholder is within a
> table I'm getting a RuntimeException with no further details.
> After some research online I've found several approaches to that
> problem. One which suggests using the method
>
> getCellParagraph($cell)
>
> to get an anchor to that specific cell. Problem is, there is no
> getCellParagraph() method in the API of OOo.
> Maybe it was an older approach.
> The second approach I found suggests using Shapes to add them to
> DrawPages. I couldn't figure out to make that one work, maybe because
> it was suggested for oCalc instead of oWriter. But I don't know if it
> should work in oWriter the same way and I'm just too dumb to use it.
> That one was discussed here:
>
> http://api.openoffice.org/servlets/ReadMsg?listName=dev&msgNo=2618
>
> So my questions are:
> (1) Is it possible to use insertTextContent with images in tablecells
> when I'm in oWriter? And what do I have to change to make it work?
> When not, why isn't it possible?
> (2) Is using Shapes also the way to go for oWriter if I'm trying to
> get images into tablecells?
> (3) What mehtod is used if I manually insert images into cells with
> the oWriter GUI?
>
> Thanks in advance.
>
> Steffen Boersig
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@...
> For additional commands, e-mail: dev-help@...


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@...
For additional commands, e-mail: dev-help@...