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). |