Open XML SDK в C#. Класс Run — работа с участками текста

В предыдущей части мы изучили вопросы, связанные с оформлением абзацев текста в 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"},
        }
    }
    )
 );

В результате выполнения этого примера, мы получим документ со следующим содержимым:

Класс RunРассмотрим другой пример: как сделать в одном абзаце несколько фрагментов текста с различным оформлением?

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"}
        }
    }
    )
 );

Теперь при выводе текста в первом фрагменте все начальные и конечные пробелы будут выводиться как есть:

RunProperties

Итого

Для того, чтобы в Open XML настроить оформление текста в абзаце используется свойство RunProperties объекта Run. Чтобы сохранить начальные и конечные пробелы в строке текста необходимо использовать свойство Space в объекте Text со значением SpaceProcessingModeValues.Preserve.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии