Поделиться через


Установить шрифт для запуска текста

В этом разделе показано, как использовать классы в пакете SDK Open XML для Office для установки шрифта для части текста в текстовом документе программным способом.


Пакеты и части документов

Документ Open XML хранится в виде пакета, формат которого определяется стандартом ISO/IEC 29500. Пакет может содержать несколько частей, между которыми существуют связи. Связь между частями определяет категорию документа. Документ может быть определен как текстовый, если его элемент связи пакета содержит связь с основной частью документа. Если элемент связи пакета содержит связь с частью презентации, документ может быть определен как документ презентации. Если элемент связи пакета содержит связь с частью книги, документ определяется как электронная таблица. В данном практическом руководстве рассматривается пакет текстового документа.


Структура элемента шрифта пробега

Следующий текст из спецификации ISO/IEC 29500 может быть полезен при работе с rFonts элементом.

Этот элемент определяет шрифты, используемые для отображения текста этого пробега. В одном пробеге может быть до четырех разных типов содержимого, каждый из которых может использовать уникальный шрифт:

  • ASCII

  • High ANSI

  • Сложные знаки

  • Восточно-азиатский

Использование каждого из этих шрифтов определяется значениями символа Юникода содержимого пробега, если он вручную не перегружен с помощью элемента cs.

Если этот элемент не существует, по умолчанию сохраняется форматирование, примененное на предыдущем уровне в иерархии стилей. Если этот элемент не применяется в иерархии стилей, текст отображается со шрифтом по умолчанию, который поддерживает любой тип содержимого.

Рассмотрим один пробег текста с арабским и английским текстом:

Английский العربية

Это содержимое можно выразить одним пробегом WordprocessingML:

    <w:r>
      <w:t>English العربية</w:t>
    </w:r>

Хотя текст размещен в одном пробеге, для содержимого используются разные шрифты за счет того, что для символов ASCII и CS в пробеге выбирается разный шрифт:

    <w:r>
      <w:rPr>
        <w:rFonts w:ascii="Courier New" w:cs="Times New Roman" />
      </w:rPr>
      <w:t>English العربية</w:t>
    </w:r>

Поэтому этот пробег текста будет использовать шрифт для всех символов в диапазоне ASCII и шрифт Times New Roman для всех символов в диапазоне сложных знаков.

© ISO/IEC 29500: 2016


Механизм работы примера кода

После открытия файла пакета для чтения и записи код создает RunProperties объект, содержащий объект с Ascii свойством RunFonts Arial. RunProperties объекты и RunFonts представляют элементы свойств rPr выполнения и элементы rFontшрифтов выполнения соответственно в схеме Open XML Wordprocessing. Используйте объект , RunProperties чтобы указать свойства заданного текстового выполнения. В этом случае, чтобы задать для шрифта выполнения значение Arial, код создает RunFonts объект, а затем задает Ascii значение Arial.

// Set the font to Arial to the first Run.
// Use an object initializer for RunProperties and rPr.
RunProperties rPr = new RunProperties(
    new RunFonts()
    {
        Ascii = "Arial"
    });

Затем код создает Run объект, представляющий первый текстовый запуск документа. Код создает Run экземпляр и задает для него первый текстовый запуск документа. Затем код добавляет объект в RunProperties объект с Run помощью PrependChild метода . Метод PrependChild добавляет элемент в качестве первого дочернего элемента к указанному элементу в структуре XML в памяти. В этом случае при выполнении примера кода создается структура XML в памяти, в которой RunProperties элемент добавляется в качестве первого дочернего Run элемента элемента. Нет необходимости вызывать Save напрямую, так как мы находимся внутри оператора using.

if (package.MainDocumentPart is null)
{
    throw new ArgumentNullException("MainDocumentPart is null.");
}

Run r = package.MainDocumentPart.Document.Descendants<Run>().First();
r.PrependChild<RunProperties>(rPr);

Примечание.

В этом примере кода предполагается, что тестовый текстовый документ по пути fileName содержит по крайней мере один текстовый запуск.

Далее представлен полный пример кода на языках C# и Visual Basic.

static void SetRunFont(string fileName)
{
    // Open a Wordprocessing document for editing.
    using (WordprocessingDocument package = WordprocessingDocument.Open(fileName, true))
    {
        // Set the font to Arial to the first Run.
        // Use an object initializer for RunProperties and rPr.
        RunProperties rPr = new RunProperties(
            new RunFonts()
            {
                Ascii = "Arial"
            });

        if (package.MainDocumentPart is null)
        {
            throw new ArgumentNullException("MainDocumentPart is null.");
        }

        Run r = package.MainDocumentPart.Document.Descendants<Run>().First();
        r.PrependChild<RunProperties>(rPr);
    }
}

См. также