Содержание
В предыдущей части мы изучили вопросы, связанные с оформлением абзацев текста в Open XML с использованием класса Paragraph. В этой части мы рассмотрим вопросы, связанные с оформлением отдельных участков текста в абзаце. Класс Run в Open XML представляет собой участок текста с одним оформлением.
Класс Run
Класс Run в Open XML — это относительно простой класс, который сериализуется в узел <w:r>и представляет собой отдельный участок текста внутри абзаца. Так, абзац в документе Word может содержать набор объектов типа Run, каждый из которых оформлен по своему. Вся функциональность, связанная с оформлением текста, сосредоточена в одном свойстве — RunProperties, которое представляется объектом одноименного типа и именно этот класс содержит множество свойств, отвечающих за стиль оформления текста внутри одного элемента Run. Рассмотрим, какие свойства мы можем использовать в работе.
Свойство RunProperties
Свойство RunProperties представляется объектом одноименного типа — RunProperties.Все свойства в этом объекте, определяющие оформление текста относятся к прямому форматированию. То есть, вначале применяются свойства форматирования на уровне документа, а затем — перечисленные в RunProperties.
| Свойство | Тип | Описание |
Bold |
Bold? |
Определяет, должно ли к тексту применяться «полужирное» начертание. |
Border |
Border? |
Определяет внешний вид и цвет границы текста |
Caps |
Caps? |
Использовать ли все прописные буквы для начертания текста (КАПС) |
CharacterScale |
CharacterScale? |
Определяет величину, на которую должен быть расширен каждый символ при отображении в документе. Это свойство позволяет растягивать или сжимать каждый символ в строке, в отличие от элемента Spacing, который расширяет/сжимает текст, добавляя дополнительную высоту символа, но не изменяя ширину самих символов, отображаемых в строке. |
Color |
Color? |
Цвет текста |
DoubleStrike |
DoubleStrike? |
Определяет, должно ли к тексту применяться двойное зачеркивание |
Emboss |
Emboss? |
Указывает, что текст должен отображаться рельефно (текст как бы приподнимается над страницей) |
Emphasis |
Emphasis? |
Определяет символ, который будет отображаться над каждым символом кроме пробела |
FillTextEffect |
FillTextEffect? |
Определяет заливку текста. В отличие от Color, позволяет сделать градиентную заливку. Используется в версиях Word 2010 и выше |
FitText |
FitText? |
Определяет ширину текста. Текст должен полностью вписываться в указанную ширину. Ширина указывается в dxa (одна двадцатая точки) |
FontSize |
FontSize? |
Размер шрифта. Указывается в единицах Half-points (половина точки). То есть, чтобы написать строку 14-м (14pt) шрифтом, мы должны задать значение 28. |
Glow |
Glow? |
Добавляет для текста эффект свечения. Используется в версиях Word 2010 и выше |
Highlight |
Highlight? |
Определяет цвет выделения текста |
Imprint |
Imprint? |
Указывает на то, что к тексту должен применяться эффект «гравировка» (текст как будто вдавлен в страницу) |
Italic |
Italic? |
Определяет, должно ли к тексту применяться «курсивное» начертание |
Kern |
Kern? |
Определяет должен ли применяться к символам кернинг. |
NoProof |
NoProof? |
Отключает проверку грамматики и орфографии для текста |
Outline |
Outline? |
Вокруг внутренней и внешней границ каждого символа в фрагменте рисуется рамка шириной в один пиксель. |
Shading |
Shading? |
Определяет стиль затенения текста. Аналогичное свойство мы рассматривали при работе с абзацами |
Shadow |
Shadow? |
Указывает, что содержимое этого фрагмента должно отображаться так, как если бы у каждого символа была тень |
SmallCaps |
SmallCaps? |
Весь текст должен быть написан малыми прописными буквами |
Spacing |
Spacing? |
Определяет разряжение/уплотнение символов в строке. |
Strike |
Strike? |
Определяет, должно ли к тексту применяться зачеркивание |
Underline |
Underline? |
Определяет, должно ли к тексту применяться подчеркивание |
Как можно видеть, RunProperties, содержит достаточно много свойств для оформления текста (и это только основные свойства, по факту — их ещё больше). Однако, используются они, практически все идентично. Например, ниже представлен фрагмент кода в котором строка текста будет написана полужирным курсивом:
using WordprocessingDocument doc = WordprocessingDocument.Create("hello.docx", DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
MainDocumentPart mainPart = doc.AddMainDocumentPart();
mainPart.Document = new Document();
Body body = mainPart.Document.AppendChild(new Body());
Paragraph para = body.AppendChild(new Paragraph(
new Run(
new Text("Это строка текста с написана полужирным курсивом. Размер шрифта - 14pt Это пример работы с Open XML и документов Word"))
{
RunProperties = new RunProperties()
{
Bold = new Bold(),
Italic = new Italic(),
FontSize = new FontSize() { Val="28"},
}
}
)
);
В результате выполнения этого примера, мы получим документ со следующим содержимым:
Рассмотрим другой пример: как сделать в одном абзаце несколько фрагментов текста с различным оформлением?
using WordprocessingDocument doc = WordprocessingDocument.Create("hello.docx", DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
MainDocumentPart mainPart = doc.AddMainDocumentPart();
mainPart.Document = new Document();
Body body = mainPart.Document.AppendChild(new Body());
Paragraph para = body.AppendChild(new Paragraph(
new Run(
new Text("Это строка текста с написана полужирным курсивом. "))
{
RunProperties = new RunProperties()
{
Bold = new Bold(),
Italic = new Italic(),
FontSize = new FontSize() { Val="28"},
}
},
new Run(new Text("Этот текст красного цвета"))
{
RunProperties= new RunProperties()
{
Color = new Color() { Val="ff0000"}
}
}
)
);
В примере выше мы создаем абзац, состоящий из двух фрагментов текста: первый фрагмент полужирный курсив, второй — красного цвета. Но обратите внимание на то, как будет выглядеть текст в Word:
Несмотря на то, что в конце первой строки стоит пробел, в итоговом документе этот пробел был убран в результате чего Word сообщает нам об орфографической ошибке. Чтобы такого не происходило и строка текста выводилась в документ как есть, необходимо использовать настройки текста в строке. Перепишем наш пример следующим образом:
using WordprocessingDocument doc = WordprocessingDocument.Create("hello.docx", DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
MainDocumentPart mainPart = doc.AddMainDocumentPart();
mainPart.Document = new Document();
Body body = mainPart.Document.AppendChild(new Body());
Paragraph para = body.AppendChild(new Paragraph(
new Run(
//в этой строке будут сохраняться начальные и конечные пробелы
new Text("Это строка текста с написана полужирным курсивом. ") { Space = SpaceProcessingModeValues.Preserve})
{
RunProperties = new RunProperties()
{
Bold = new Bold(),
Italic = new Italic(),
FontSize = new FontSize() { Val="28"},
}
},
new Run(new Text("Этот текст красного цвета"))
{
RunProperties= new RunProperties()
{
Color = new Color() { Val="ff0000"}
}
}
)
);
Теперь при выводе текста в первом фрагменте все начальные и конечные пробелы будут выводиться как есть:
Итого
Для того, чтобы в Open XML настроить оформление текста в абзаце используется свойство RunProperties объекта Run. Чтобы сохранить начальные и конечные пробелы в строке текста необходимо использовать свойство Space в объекте Text со значением SpaceProcessingModeValues.Preserve.

