Chciałbym powrócić do tematyki związanej z tworzeniem dokumentów aplikacji MS Word (docx) zgodnych z formatem OpenXML z wykorzystniem pakietu Open XML Format SDK 2.0 i zająć się zawartością tworzonych dokumentów a dokładnie dokumentów napisanych w XML'u zgodnym z "językiem" WordProcessingML.
Proste Hello World!
Na początek zobaczmy jak wygląda proste "Hello World!" (przykładowy kod funkcji generującej taki dokument jest: tutaj)
<?xml version="1.0" encoding="utf-8"?> <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> <w:body> <w:p> <w:r> <w:t>Hello World!</w:t> </w:r> </w:p> </w:body> </w:document>
Jak widać w powyższym kodzie XML widać duże powiązanie pomiędzy kodem napisanym w C#, a powyższym. Zadeklarowany jest dokument (document = WordprocessingDocument) wewnąrz którego jest część Body (body), w niej znajduje się paragraf (p = Paragraph) z elementem typu Run (r) i odpowiednim tekstem (t = Text).
Style
W przypadku styli (przykładowy kod funkcji tutaj), generowane są dwa pliki, jeden zawierający definicję stylu:
<?xml version="1.0" encoding="utf-8"?> <w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> <w:style w:styleId="MyHeading1"> <w:name w:val="My Heading 1" /> <w:basedOn w:val="Heading1" /> <w:next w:val="Normal" /> <w:rPr> <w:color w:val="FF0000" /> <w:rFonts w:ascii="Arial" /> <w:b /> <w:sz w:val="28" /> </w:rPr> </w:style> </w:styles>
oraz drugi z definicją z konkretnym dokumentem:
<?xml version="1.0" encoding="utf-8"?> <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> <w:body> <w:p> <w:pPr> <w:pStyle w:val="MyHeading1" /> </w:pPr> <w:r> <w:t>This is Heading</w:t> </w:r> </w:p> </w:body> </w:document>
Jak widać w tym przypadku otrzymujemy kod WordProcessingML bardzo podobny do tego z poprzedniego przykładu, jednak dodana została specjalna właściwość (pPr = ParagraphProperties), w której został wybrany odpowiedni styl (pStyle = ParagraphStyleId), który jest zdefiniowany w innym pliku.
Tabele
Ostatni przykład dotyczyć będzie tabeli (której tworzący ją kod jest tutaj):
<?xml version="1.0" encoding="utf-8" ?> <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> <w:body> <w:tbl> <w:tblpr> <w:tblborders> <w:top w:val="single" /> <w:left w:val="single" /> <w:bottom w:val="single" /> <w:right w:val="single" /> <w:insideh w:val="single" /> <w:insidev w:val="single" /> </w:tblborders> </w:tblpr> <w:tr> <w:tc> <w:p> <w:r> <w:t>Multiplication table</w:t> </w:r> </w:p> <w:tcpr> <w:gridspan w:val="11" /> </w:tcpr> </w:tc> </w:tr> <w:tr> <w:tc> <w:p> <w:r> <w:t>*</w:t> </w:r> </w:p> </w:tc> <w:tc> <w:p> <w:r> <w:t>1</w:t> </w:r> </w:p> </w:tc> <!—- many cells and rows declarations --> </w:tr> </w:tbl> </w:body> </w:document>
Czyli mamy tutaj takie elementy jak tabela (tbl = Table ) z odpowiednimi właściwościami (tblpr = TableProperties ) i ramkami (tblborders = TableBorders ), w której znajdują się wiersze (tr = TableRow ) i kolumny (tc = TableCell ).
Podsumowanie
Jak widać na powyższych przykłach jest duży związek pomiędzy wykorzystywanymi elementami pakietu Open Document Format SDK a konkretnym elementami zapisywanymi w języku WordProcessingML, dlatego jeżli nie wiemy jak coś przygotować przy pomocy SDK, można zawsze przygotować odpowiedni plik przy pomocy edytora tekstu (np. Word), a następnie sprawdzić, co rzeczywiście zostało w nim utworzone (jeżeli ktoś nie wie jak to zrobić, to zapraszam do przeczytania posta:Kierunek: w głąb formatu "docx".
Brak komentarzy:
Prześlij komentarz