Tabeller, figurer og andre objekt.

From Apache OpenOffice Wiki
Jump to: navigation, search


Tekstdokument kan ha mer enn ren tekst i avsnitt. Fremmedobjekt som tabeller, tegninger, tekstfelter og annet kan forankres eller flyte rundt i dokumentet.

TextContent

Forankring styres via tjenesten com.sun.star.text.TextContent som alle objekt støtter. Egenskaper:

Metoder som dokumentet tilbyr:

  • createInstance() lager et nytt objekt som støtter TextContent.
  • insertTextContent() legger et objekt inn i teksten.
  • removeTextContent() fjerner et objekt fra teksten.

Tabeller

Eksemplet viser innsetting av en ny tabell:

Cursor = ThisComponent.Text.createTextCursor()
Kalender = ThisComponent.createInstance("com.sun.star.text.TextTable")
Kalender.initialize(12,31)
ThisComponent.Text.insertTextContent(Cursor, Kalender, False)

En ser at en ved innsetting også skal angi posisjon (cursor) og om det utvalgte skal erstattes (True) eller beholdes (False).

Å vise alle tabeller gjøres som under:

alleTabeller = ThisComponent.getTextTables()
For I = 0 to alleTabeller.count - 1
   tabell = TextTables(I)
   ... 
Next I

Tabeller støtter com.sun.star.text.TextTable og har egenskaper (avstander er i 1/100 mm):

  • BackColor (Long): bakgrunnsfarge.
  • BottomMargin (Long): bunnmarg.
  • LeftMargin (Long): venstremarg.
  • RightMargin (Long): høyremarg.
  • TopMargin (Long): toppmarg.
  • RepeatHeadline (Boolean): True hvis overskrift skal gjentas på hver side.
  • Width (Long): bredde.

Alle rader og kolonner

Tabellen tilbyr getRows og getColumns(). Begge gir en liste som støtter com.sun.star.table.XTableRows. De tilbyr:

  • getByIndex(Integer): enkeltobjekt.
  • getCount(): antallet objekt.
  • insertByIndex(i, n): setter inn i nye objekt fra posisjon n.
  • removeByIndex(i, n): sletter n objekt fra posisjon n.

OBS: insert og remove kun hvis tabellen er fri for "merged cells". Tabellens annenhver rad får ny bakgrunnsfarge som under:

Cursor = ThisComponent.Text.createTextCursor()
tabell = ThisComponent.createInstance("com.sun.star.text.TextTable")
tabell.initialize(5, 4)
ThisComponent.Text.insertTextContent(Cursor, Table, False)
rader = tabell.getRows
For I = 0 To rader.getCount() - 1 Step 2
   rad = rader.getByIndex(I)
   rad.BackColor = &HFF00FF
Next

Enkeltrad

Hver rad støtter com.sun.star.text.TextTableRow service og tilbyr følgende:

  • BackColor (Long): bakgrunnsfarge.
  • Height (Long): høyde.
  • IsAutoHeight (Boolean): om høyde skal autotilpasses.
  • VertOrient (const): vertikal justering (com.sun.star.text.VertOrientation)

Celler

Hver celle har et unikt navn. Cellen "øverst, til venstre" heter vanligvis A1, der A angir kolonne og 1 er rad. Altså har neste kolonne navnet B. En tabell har metoden getCellByName(n). Eksemplet under setter verdien i tabellens celler:

Cursor = ThisComponent.Text.createTextCursor()
tabell = ThisComponent.createInstance("com.sun.star.text.TextTable")
tabell.initialize(5, 4)
ThisComonent.Text.insertTextContent(Cursor, Table, False)
rader = tabell.getRows
kolonner = tabell.getColumns
For rad = 1 To rader.getCount()
   For kol = 1 To kolonner.getCount()
      celleNavn = Chr(Asc("A") - 1 + kol) & rad
      celle = tabell.getCellByName(celleNavn)
      celle.String = "rad: " & CStr(rad) + ", kolonne: " & CStr(kol)
   Next
Next

En celle ligner en vanlig tekst og tilbyr blant annet createTextCursor(). Utseendet i cellen endres som vanlig tekst. I eksemplet under høyre-justeres alle celler med tall.

tabellListe = ThisComponent.getTextTables()
For I = 0 to tabellListe.count - 1
   tabell = tabellListe(I)
   celleNavn = tabell.getCellNames()
   For J = 0 to UBound(celleNavn)
      celle = tabell.getCellByName( celleNavn(J) )
      If IsNumeric( celle.String ) Then
         celleCursor = celle.createTextCursor()
         celleCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.RIGHT
      End If
   Next
Next

Innrammet tekst

Innrammet tekst er også et flytende objekt, som tabeller og bilder, og behandles likt med disse. Den tilbyr com.sun.star.text.BaseFrameProperties og har derved egenskaper som:

  • BackColor (Long): bakgrunnsfarge.
  • BottomMargin (Long): bunnmark.
  • LeftMargin (Long): venstremark.
  • RightMargin (Long): høyremark.
  • TopMargin (Long): toppmarg.
  • Height (Long): høyde.
  • Width (Long): bredde.
  • HoriOrient (const): horisontal justering com.sun.star.text.HoriOrientation).
  • VertOrient (const): vertikal justering (com.sun.star.text.VertOrientation).

I eksemplet under lages en slik ramme og stikkes inn.

Cursor = ThisComponent.Text.createTextCursor()
Cursor.gotoNextWord(False)
Frame = ThisComponent.createInstance("com.sun.star.text.TextFrame")
 
Frame.Width = 3000
Frame.Height = 1000
Frame.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
Frame.TopMargin = 0
Frame.BottomMargin = 0
Frame.LeftMargin = 0
Frame.RightMargin = 0
Frame.BorderDistance = 0
Frame.HoriOrient = com.sun.star.text.HoriOrientation.NONE
Frame.VertOrient = com.sun.star.text.VertOrientation.LINE_TOP
 
Doc.Text.insertTextContent(Cursor, Frame, False)

Merk vekselvirkningen mellom AnchorType (fra TextContent) og VertOrient (fra BaseFrameProperties). Forankringen er AS_CHARACTER så teksten settes inn midt i strømmen av tegn (karakterer). Derfor kan den f.eks. bli flyttet til neste linje hvis der blir linjeskift. Med vertikal justering satt til LINE_TOP blir rammens topp sidestilt med tegnenes topp.

Innholdet i rammen kan endres ved å lage set en cursor:

Doc = ThisComponent
Cursor = Doc.Text.createTextCursor()
Frame = Doc.createInstance("com.sun.star.text.TextFrame")
Frame.Width = 3000
Frame.Height = 1000
Doc.Text.insertTextContent(Cursor, Frame, False)
FrameCursor = Frame.createTextCursor()
FrameCursor.charWeight = com.sun.star.awt.FontWeight.BOLD
FrameCursor.paraAdjust = com.sun.star.style.ParagraphAdjust.CENTER
FrameCursor.String = "This is a small Test!"

Tekstfelt

Nok et flytende objekt er spesielle felt som kan settes inn etter behov. De kan inneholde dato, sidenummer, forfatter og annet.

Et datofelt settes inn som under:

DateTimeField = Doc.createInstance("com.sun.star.text.textfield.DateTime")
DateTimeField.IsFixed = False
DateTimeField.IsDate = True
Doc.Text.insertTextContent(Cursor, DateTimeField, False)

En liste med alle dokumentets felt kan gjennomgås som under:

feltListe = ThisComponent.getTextFields.createEnumeration
While feltListe.hasMoreElements()
   felt = TextFieldEnum.nextElement()
   If felt.supportsService("com.sun.star.text.textfield.DateTime") Then
      MsgBox "Date/time"
   ElseIf felt.supportsService("com.sun.star.text.textfield.Annotation") Then
      MsgBox "Annotation"
   End If
Wend

Gjennomgangen skjer med en iterator og sjekker tekstfeltet for type.

Nummerfelt støtter NumberingType (const) som i com.sun.star.style.NumberingType):

Under settes slike inn i et dokument:

Doc = ThisComponent
PageNumber = Doc.createInstance("com.sun.star.text.textfield.PageNumber")
PageNumber.NumberingType = com.sun.star.style.NumberingType.ARABIC
PageStyles = Doc.StyleFamilies.getByName("PageStyles")
StdPage = PageStyles("Default")
StdPage.FooterIsOn = True
FooterCursor = StdPage.FooterTextLeft.Text.createTextCursor()
StdPage.FooterTextLeft.Text.insertTextContent(FooterCursor, PageNumber, False)

Først lages et tekstfelt for sidenummer. Så letes "footer" frem (mer om slike bunntekster annet sted), det ligger i en av stilene, og tekstfeltet settes inn der.

Annotering (anmerkninger) vises som et lite gult symbol som kan beklikkes (com.sun.star.text.textfield.Annotation). Egenskaper er:

  • Author (String): Forfatter.
  • Content (String): Tekst.
  • Date (Date): Tidspunkt.

Dato og tid er et felt (com.sun.star.text.textfield.DateTime) med*IsFixed (Boolean)</tt>: hvorvidt verdien skal endres hver gang dokumentet åpnes

  • IsDate (Boolean): hvorvidt feltet skal vise dato (eller tid)
  • DateTimeValue (struct): innhold (com.sun.star.util.DateTime)
  • NumberFormat(const): visingsformat.

Kapitelnavn tilbyr et com.sun.star.text.textfield.Chapter og har egenskapene

  • ChapterFormat(const): hvordan navn og nummer skal vises (com.sun.star.text.ChapterFormat)
  • Level (Integer): hvilket kapitelnivå som skal vises (0 er høyeste)

Bokmerker

Den siste typen fremmedobjekt er bokmerker(com.sun.star.text.Bookmark). Behandling blir veldig likt de foregående.

Bookmark = ThisComponent.createInstance("com.sun.star.text.Bookmark")
Bookmark.Name = "mine bokmerker"
Doc.Text.insertTextContent(Cursor, Bookmark, True)

Tekstens bokmerker ligger i den navne- og indeksbaserte samlingen Bookmarks. T I eksemplet letes et navngitt bokmerker frem og en tekst innsettes.

Bookmark = ThisDocument.Bookmarks.getByName("mine bokmerker")
Cursor = ThisDocument.Text.createTextCursorByRange(Bookmark.Anchor)
Cursor.String = "Here is the bookmark"


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools