Spis treści:

Kategoria:WordXML


Word XML - style globalne i lokalne

Cztery kategorie stylów

W poprzednim wpisie wspomniałem o wadach i zaletach stylów globalnych w Word (wpis można zobaczyć tutaj: Word w C# - style globalne. To samo można powiedzieć o wersji XML, więc zainteresowanych odsyłam pod zamieszczony wcześniej adres. W tym wpisie rozszerzę nieco zakres informacji, które warto sobie przyswoić.

Interfejsy COM dla pakietu Office mają tę właściwość, że ukrywają przed nami część skomplikowanych zagadnień. Kusiło mnie, żeby napisać zaletę, ale zdałem sobie sprawę, że nie zawsze jest to zaleta. Dopóki wszystko działa, jest to zaleta. Gdy przestanie, pojawia się problem. Ale o co chodzi?

Tak jak napisałem w nagłówku - istnieją cztery kategorie stylów i nie są one kompatybilne. Poniżej zamieszczam krótki opis każdej z grup:

Typ styluOpis
paragraphStyl zawiera formatowanie blisko związane z paragrafem, między innymi wcięcia, odstępy, ale także typowe formatowanie tekstu, który znajduje się w tym paragrafie. Dozwolone są więc definicje czcionki, kolorów, pogrubień. Ten styl określa sposób formatowania całego paragrafu i wszystkich elementów wewnątrz.
characterStyl zawiera formatowanie związane z elementem run, czyli bloków, które reprezentują najmniejszą jednostkę z jednolitym formatowaniem. W jednym paragrafie można zawrzeć nieograniczoną liczbę elementów run. Jak łatwo się domyślić, nie można tutaj stosować atrybutów typowych dla paragrafu, takich jak wcięcia i wyrównania. Dostępne są za to wszystkie atrybuty związane z czcionką, kolorowaniem, pogrubieniami, pochyleniami indeksami dolnymi, górnymi - wszystko, co może być unikatowe i niepowtarzalne dla różnych bloków w ramach obiektu nadrzędnego, np. paragrafu, komórki tabeli.
tableStyl zawiera formatowanie tabeli i komórek tej tabeli, zawiera podzbiór różnych atrybutów paragrafu (odstępy), czcionki (rozmiary, kolory), ale także atrybuty typowe dla tabeli, niedostępne w innych stylach. Styl używany jest między innymi do określenia obramowań
numberingStyl zawiera formatowanie dla wszelkiego rodzaju list, wypunktowań. Definicja może obejmować dziewięć poziomów zagłębienia. Co ważne, styl numbering określa tylko elementy przynależne do listy - wnętrze i treść mogą być dowolne, a ich formatowanie określa się przez typ paragraph i character.

Są dwie wiadomości - dobra i zła. Zła to taka, że style nie są kompatybilne. Nie można użyć stylu paragraph w zastępstwie stylu character, nie można też użyć stylu tabeli na paragrafie ani żadnych innych podobnych konfiguracji. Dobra wiadomość jest taka, że konstrukcja jest bardzo podobna, o czym się za chwilę przekonamy.

Style globalne dla paragrafu w Word XML

Przykład stylu globalnego dla paragrafu pokazany jest na poniższym listingu:

<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
  <w:styles>
    <w:style w:type="paragraphw:styleId="IdNiebieskiePogrubienie">
      <w:name w:val="NiebieskiePogrubienie/>
      <w:rPr>
        <w:b />
        <w:u w:val="single/>
        <w:color w:val="0000FF"/>
      </w:rPr>
    </w:style>
    <w:style w:type="paragraphw:styleId="IdZielonePochylenie">
      <w:name w:val="ZielonePochylenie/>
      <w:rPr>
        <w:i/>
        <w:color w:val="008000"/>
      </w:rPr>
    </w:style>
  </w:styles>
  <w:body>
    <w:p>
      <w:r>
        <w:rPr>
          <w:color w:val="FF0000"/>
          <w:strike/>
        </w:rPr>
        <w:t>Linia 1</w:t>
      </w:r>
    </w:p>
    <w:p>
      <w:pPr>
        <w:pStyle w:val="IdNiebieskiePogrubienie/>
      </w:pPr>
      <w:r>
        <w:t>Linia 2</w:t>
      </w:r>
    </w:p>
    <w:p>
      <w:pPr>
        <w:pStyle w:val="IdZielonePochylenie/>
      </w:pPr>
      <w:r>
        <w:t>Linia 3</w:t>
      </w:r>
    </w:p>
    <w:p>
      <w:pPr>
        <w:pStyle w:val="IdNiebieskiePogrubienie/>
      </w:pPr>
      <w:r>
        <w:t>Linia 4</w:t>
      </w:r>
    </w:p>
  </w:body>
</w:wordDocument>

Gdy Word otworzy powyższy plik, wyświetli dokument podobny do zaprezentowanego na poniższej ilustracji:

Styl paragrafu w Word XML
Rys. 1. Styl paragrafu w Word XML.

Różnice pomiędzy ilustracją i stanem faktycznym dotyczą pewnych domyślnych atrybutów (patrz też Word - style i kolory, XML.

Styl znakowy i dziedziczenie stylu paragrafowego

Zanim przejdę do wyjaśnień, przedstawię przykład. Przyjrzyjmy się zaprezentowanemu poniżej listingowi:

<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
  <w:styles>
    <w:style w:type="characterw:styleId="IdNiebieskiePogrubienie">
      <w:name w:val="NiebieskiePogrubienie/>
      <w:rPr>
        <w:b />
        <w:u w:val="single/>
        <w:color w:val="0000FF"/>
      </w:rPr>
    </w:style>
    <w:style w:type="paragraphw:styleId="IdZielonePochylenie">
      <w:name w:val="ZielonePochylenie/>
      <w:rPr>
        <w:i/>
        <w:color w:val="008000"/>
      </w:rPr>
    </w:style>
  </w:styles>
  <w:body>
    <w:p>
      <w:pPr>
        <w:pStyle w:val="IdZielonePochylenie/>
      </w:pPr>
      <w:r>
        <w:t xml:space="preserve">Przyk&#322;ad </w:t>
      </w:r>
      <w:r>
        <w:rPr>
          <w:rStyle w:val="IdNiebieskiePogrubienie/>
        </w:rPr>
        <w:t>stylu</w:t>
      </w:r>
      <w:r>
        <w:rPr>
          <w:b/>
        </w:rPr>
        <w:t xml:space="preserve"> znakowego.</w:t>
      </w:r>
    </w:p>
  </w:body>
</w:wordDocument>

Tym razem pokazane są dwa różne style - jeden typu character, drugi typu parapraph. Należy tutaj zwrócić uwagę na miejsce użycia tych definicji. Typ paragraph użyty jest w znaczniku praragrafu w:p, otoczony atrybutem w:pPr (ang. paragraph property - właściwość paragrafu) i umieszczony w atrybucie w:pStyle. Konsekwencja stosowania przedrostka p (pPr, pStyle) nie jest przypadkowa! Typ character użyty jest w znaczniku w:r, otoczony atrybutem rPr (ang. run property - właściwość obszaru) i umieszczony w atrybucie w:rStyle. I znów - onsekwencja stosowania przedrostka r (rPr, rStyle) nie jest przypadkowa!

Word zinterpretuje powyższy plik XML w sposób następujący:

Przykład stylu znakowego.

Wszystkie obszary (run) wewnątrz paragrafu przejmują styl paragrafu. Styl character może nadpisać wybrane właściwości lub dodać nowe, tak jak w przykładzie. Kolor zielony został nadpisany niebieskim (ta sama właściwość), a z nowych właściwości pojawiło się pogrubienie i podkreślenie. Słowa "stylu" będzie zatem niebieskie (nadpisanie), pochylone (dziedziczenie, nie wykonano nadpisania), pogrubione i podkreślone.

Word XML, spacje i polskie znaki

Dociekliwi zwrócili już pewnie uwagę na atrybut xml:space="preserve". Domyślnie parser Word XML usuwa znaki spacji przed i po wartości elementu. Aby zatem zachować spację po słowie "Przykład" i przed "znakowego.", należy użyć tego atrybutu.

Problem może się też pojawić ze znakami, które wykraczają poza zdefiniowane w standardzie ASCII. Jednym z takich znaków jest ł. W zestawie UNICODE ł ma numer 322 (większy niż 127), więc należy go zamienić na ł. Więcej na temat kodowania znaków UNICODE w XML można znaleźć w standardach XML/HTML pod hasłem "numeric character references". Word jest na tyle miły, że wskaże nam dokładnie numer linii i numer znaku, który mu się nie spodoba.

Kategoria:WordXML

, 2013-12-20

Brak komentarzy - bądź pierwszy

Dodaj komentarz
Wyślij
Ostatnie komentarze
Dzieki za rozjasnienie zagadnienia upsert. wlasnie sie ucze programowania :).
Co się stanie gdy spróbuję wyszukać:
SELECT * FROM NV_Airport WHERE Code='SVO'
SELECT * FROM V_Airport WHERE Code=N'SVO'
(odwrotnie są te N-ki)
Będzie konwersja czy nie znajdzie żadnego rekordu?