Tabeller, figurer og andre objekt.
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:
- AnchorType (Enum): Hvordan objektet skal forankres (com.sun.star.text.TextContentAnchorType).
- AnchorTypes (sequence of Enum): Alle typer forankring for objektet.
- TextWrap (Enum): Hvordan tekst skal "omslutte" objektet (com.sun.star.text.WrapTextMode).
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):
- com.sun.star.text.textfield.PageCount (antall sider)
- com.sun.star.text.textfield.WordCount (antall ord)
- com.sun.star.text.textfield.CharacterCount (antall tegn)
- com.sun.star.text.textfield.PageNumber (sidenummer)
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). |