Struktur i et tekstdokument

From Apache OpenOffice Wiki
Jump to: navigation, search

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



Personal tools