Как форматировать текст в .NET

Как форматировать текст в .NET

Aspose.Slides FOSS for .NET предоставляет детальное форматирование текста через класс PortionFormat. Portion — это наименьшая независимая единица текста; она соответствует одному запуску форматирования внутри абзаца. В этом руководстве показано, как применить полужирное, курсивное, размер шрифта и цветовое форматирование к тексту в презентации.

Пошаговое руководство

Шаг 1: Установить пакет

dotnet add package Aspose.Slides.Foss

Шаг 2: Добавить форму с текстовым фреймом

Перед форматированием текста форма должна содержать TextFrame. Используйте shape.AddTextFrame(), чтобы создать её.

using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;

using var prs = new Presentation();
var slide = prs.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50, 500, 150);
var tf = shape.AddTextFrame("Default text: will be formatted");
prs.Save("output.pptx", SaveFormat.Pptx);

Шаг 3: Доступ к TextFrame

shape.AddTextFrame() возвращает объект TextFrame. Вы также можете получить его позже через shape.TextFrame.

var tf = shape.TextFrame;          // if the frame already exists
var tf = shape.AddTextFrame("");   // creates a new frame

TextFrame содержит список объектов Paragraph (tf.Paragraphs). Каждый Paragraph содержит объекты Portion (paragraph.Portions).


Шаг 4: Применить полужирное и курсивное форматирование

Используйте PortionFormat.FontBold и PortionFormat.FontItalic. Эти свойства принимают NullableBool.True, NullableBool.False или NullableBool.NotDefined (наследуются от мастера).

using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;

using var prs = new Presentation();
var slide = prs.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50, 500, 150);
var tf = shape.AddTextFrame("Bold and italic text");

var fmt = tf.Paragraphs[0].Portions[0].PortionFormat;
fmt.FontBold = NullableBool.True;
fmt.FontItalic = NullableBool.True;

prs.Save("bold-italic.pptx", SaveFormat.Pptx);

Шаг 5: Установить размер шрифта и цвет

Установите PortionFormat.FontHeight для размера (в пунктах) и используйте FillFormat для цвета.

using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Drawing;
using Aspose.Slides.Foss.Export;

using var prs = new Presentation();
var slide = prs.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50, 500, 150);
var tf = shape.AddTextFrame("Large corporate-blue heading");

var fmt = tf.Paragraphs[0].Portions[0].PortionFormat;
fmt.FontHeight = 32;                          // 32pt font
fmt.FontBold = NullableBool.True;
fmt.FillFormat.FillType = FillType.Solid;
fmt.FillFormat.SolidFillColor.Color = Color.FromArgb(255, 0, 70, 127);

prs.Save("colored-text.pptx", SaveFormat.Pptx);

Color.FromArgb(alpha, red, green, blue) принимает значения от 0 до 255 для каждого канала.


Шаг 6: Несколько частей в одном абзаце

Один абзац может содержать несколько частей с разным форматированием. Добавьте новый Portion в коллекцию Portions абзаца:

using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Drawing;
using Aspose.Slides.Foss.Export;

using var prs = new Presentation();
var slide = prs.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50, 600, 100);
var tf = shape.AddTextFrame("");  // start with empty frame

var paragraph = tf.Paragraphs[0];

// First portion: normal text
var portion1 = paragraph.Portions[0];
portion1.Text = "Normal text followed by ";
portion1.PortionFormat.FontHeight = 20;

// Second portion: bold red text
var portion2 = new Portion();
portion2.Text = "bold red text";
portion2.PortionFormat.FontHeight = 20;
portion2.PortionFormat.FontBold = NullableBool.True;
portion2.PortionFormat.FillFormat.FillType = FillType.Solid;
portion2.PortionFormat.FillFormat.SolidFillColor.Color = Color.FromArgb(255, 200, 0, 0);
paragraph.Portions.Add(portion2);

prs.Save("mixed-format.pptx", SaveFormat.Pptx);

Распространённые проблемы и их решения

Текст отображается черным, даже после установки цвета

Убедитесь, что FillFormat.FillType = FillType.Solid установлен перед назначением цвета. Без установки типа заливки изменение цвета может не дать эффекта.

NullableBool.True против true

PortionFormat.FontBold ожидает NullableBool.True, а не C# true. Присваивание C# true не скомпилируется, потому что типы несовместимы.

Шрифт не отображается в сохранённом файле

Свойство LatinFont задает семейство латинских шрифтов. Если не задано, используется шрифт темы презентации. Пользовательские шрифты должны быть встроены или доступны на машине просмотра.


Часто задаваемые вопросы

Как изменить семейство шрифтов?

Установить PortionFormat.LatinFont:

fmt.LatinFont = new FontData("Arial");

FontData принимает имя семейства шрифтов в виде строки.

Как установить выравнивание абзаца?

Используйте ParagraphFormat.Alignment:

tf.Paragraphs[0].ParagraphFormat.Alignment = TextAlignment.Center;

Поддерживаемые значения: Left, Center, Right, Justify.

Как установить межстрочный интервал?

Используйте ParagraphFormat.SpaceBefore (точки перед абзацем) или ParagraphFormat.SpaceAfter (точки после абзаца):

tf.Paragraphs[0].ParagraphFormat.SpaceBefore = 12;   // 12pt before
tf.Paragraphs[0].ParagraphFormat.SpaceAfter = 6;     // 6pt after

См. также

 Русский