Struktur i et tekstdokument
Et tekstdokument har selve teksten (strenger), maler som angir utseendet, fremmedelement som tabeller, bilder og tegninger, og diverse globale innstillinger.
Selve teksten er en samlig tekster som hverken har navn eller posisjon. Man må bruke iterator. Et tekstobjekt er enten avsnitt eller en tabell, og en kan enkelt teste hva det egentlig er som under:
Dim Doc As Object Dim alleTekster As Object Dim tekst As Object Doc = ThisComponent alleTekster = Doc.Text.createEnumeration While alleTelster.hasMoreElements tekst = alleTekster.nextElement If tekst.supportsService("com.sun.star.text.TextTable") Then ' dette er jo en tabell! End If If tekst.supportsService("com.sun.star.text.Paragraph") Then ' dette var visst et avsnitt End If Wend
Et avsnitt p har egenskapen p.string hvori selve teksten ligger. Enkelt deler inni avsnittet kan også behandles som i eksemplet under, der funksjonen "Replace(fra,til)" blir brukt til erstatting.
Dim alleTekster As Object Dim alleDeler As Object Dim tekst As Object Dim tekstDel As Object alleTekster = ThisComponent.Text.createEnumeration() While alleTekster.hasMoreElements() tekst = alleTekster.nextElement() If tekst.supportsService("com.sun.star.text.Paragraph") Then alleDeler = tekst.createEnumeration While alleDeler.hasMoreElements() tekstDel = alleDeler.nextElement() tekstDel.String = Replace(tekstDel.String, "you", "U") tekstDel.String = Replace(tekstDel.String, "too", "2") tekstDel.String = Replace(tekstDel.String, "for", "4") Wend End If Wend
Utseendet endres interaktivt ved at brukeren velger et område og angir utseendet, helst ved å velge en stil. I et program skjer det samme med bruk av en "cursor".
Tegn (character properties)
- CharFontName (String)
- name of font type selected.
- CharColor (Long)
- text color.
- CharHeight (Float)
- character height in points (pt).
- CharUnderline (Constant group)
- type of underscore (constants in accordance with com.sun.star.awt.FontUnderline ).
- CharWeight (Constant group)
- font weight (constants in accordance with com.sun.star.awt.FontWeight).
- CharBackColor (Long)
- background color.
- CharKeepTogether (Boolean)
- suppression of automatic line break.
- CharStyleName (String)
- name of character template.
Avsnitt (paragraph properties)
- ParaAdjust (enum)
- vertical text orientation (constants in accordance with com.sun.star.style.ParagraphAdjust ).
- ParaLineSpacing (struct)
- line spacing (structure in accordance with com.sun.star.style.LineSpacing).
- ParaBackColor (Long)
- background color.
- ParaLeftMargin (Long)
- left margin in 100ths of a millimeter.
- ParaRightMargin (Long)
- right margin in 100ths of a millimeter.
- ParaTopMargin (Long)
- top margin in 100ths of a millimeter.
- ParaBottomMargin (Long)
- bottom margin in 100ths of a millimeter.
- ParaTabStops (Array of struct)
- type and position of tabs (array with structures of the type com.sun.star.style.TabStop ).
- ParaStyleName (String)
- name of the paragraph template.
Eksempel: Konverter til HTML
Følgende program lager HTML-kode av tekstdokumentet.
Teksten i hvert avsnitt blir plassert innenfor-tagger. Uthevet skrift blir også konvertert.
Dim FileNo As Integer, Filename As String, CurLine As String Dim Enum1 As Object, Enum2 As Object Dim TextElement As Object, TextPortion As Object Filename = "c:\text.html" FileNo = Freefile Open Filename For Output As #FileNo Print #FileNo, "<HTML><BODY>" Enum1 = ThisDocument.Text.createEnumeration While Enum1.hasMoreElements TextElement = Enum1.nextElement If TextElement.supportsService("com.sun.star.text.Paragraph") Then Enum2 = TextElement.createEnumeration CurLine = "<P>" While Enum2.hasMoreElements TextPortion = Enum2.nextElement If TextPortion.CharWeight = com.sun.star.awt.FontWeight.BOLD THEN CurLine = CurLine & "<B>" & TextPortion.String & "</B>" Else CurLine = CurLine & TextPortion.String End If Wend CurLine = CurLine & "</P>" ' avsnitt slutt Print #FileNo, CurLine End If Wend Print #FileNo, "</BODY></HTML>" ' avslutningskode Close #FileNo
Prioritert formattering
Direkte formattering har høyere prioritet en den indirekte (der man bruker stiler). En egenskap p har metoden p.getPropertyState() som viser om den ble satt direkte eller ikke. Mulige svar er:
- com.sun.star.beans.PropertyState.DIRECT_VALUE
- Direkte formattert
- com.sun.star.beans.PropertyState.DEFAULT_VALUE
- Indirekte formattert (av en mal)
- com.sun.star.beans.PropertyState.AMBIGUOUS_VALUE
- Uklart.
I eksemplet under endres egenskapen "CharWeight" fra "Bold" til "MyBold" hvis den er endret med direkte formattering.
Dim Enum1 As Object Dim Enum2 As Object Dim TextElement As Object Dim TextPortion As Object Enum1 = ThisComponent.Text.createEnumeration While Enum1.hasMoreElements TextElement = Enum1.nextElement If TextElement.supportsService("com.sun.star.text.Paragraph") Then Enum2 = TextElement.createEnumeration While Enum2.hasMoreElements TextPortion = Enum2.nextElement If TextPortion.CharWeight = _ com.sun.star.awt.FontWeight.BOLD AND _ TextPortion.getPropertyState("CharWeight") = _ com.sun.star.beans.PropertyState.DIRECT_VALUE Then TextPortion.setPropertyToDefault("CharWeight") TextPortion.CharStyleName = "MyBold" End If Wend End If Wend
Content on this page is licensed under the Public Documentation License (PDL). |