Установить шрифт для запуска текста
В этом разделе показано, как использовать классы в пакете 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);
}
}