Как да форматираме текст в C++
Aspose.Slides FOSS for C++ provides fine-grained text formatting through the PortionFormat клас. A Portion е най-малката независима единица текст; тя съответства на един единствен форматен участък в рамките на абзац. Това ръководство показва как да приложите удебеляване, курсив, размер на шрифта и цветово форматиране към текста в презентация.
Ръководство стъпка по стъпка
Стъпка 1: Сглобете и свържете библиотеката
git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .Стъпка 2: Добавете форма с текстова рамка
Преди да форматирате текста, добавете форма и задайте нейното текстово съдържание чрез shape.text_frame()->set_text().
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
auto& shape = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 50, 500, 150);
shape.text_frame()->set_text("Default text: will be formatted");
prs.save("output.pptx", asf::SaveFormat::PPTX);
return 0;
}Стъпка 3: Достъп до TextFrame
shape.text_frame() връща указател към shape’s TextFrame. Използвайте -> за да извикате методи върху него.
auto* tf = shape.text_frame(); // pointer to the shape's text frame
tf->set_text("your text here");A TextFrame съдържа Paragraph обекти (tf->paragraphs()). Всеки Paragraph съдържа Portion обекти (paragraph.portions()).
Стъпка 4: Прилагане на удебеляване и курсив
Използвайте portion_format().set_font_bold() и portion_format().set_font_italic(). Тези методи приемат NullableBool::TRUE, NullableBool::FALSE, или NullableBool::NOT_DEFINED (наследява се от master).
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
auto& shape = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 50, 500, 150);
shape.text_frame()->set_text("Bold and italic text");
auto* tf = shape.text_frame();
auto& fmt = tf->paragraphs()[0].portions()[0].portion_format();
fmt.set_font_bold(asf::NullableBool::TRUE);
fmt.set_font_italic(asf::NullableBool::TRUE);
prs.save("bold-italic.pptx", asf::SaveFormat::PPTX);
return 0;
}Стъпка 5: Задаване на размер на шрифта и цвят
Задайте portion_format().set_font_height() за размер (в точки) и използвайте fill_format() за цвят.
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
auto& shape = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 50, 500, 150);
shape.text_frame()->set_text("Large corporate-blue heading");
auto* tf = shape.text_frame();
auto& fmt = tf->paragraphs()[0].portions()[0].portion_format();
fmt.set_font_height(32); // 32pt font
fmt.set_font_bold(asf::NullableBool::TRUE);
fmt.fill_format().set_fill_type(asf::FillType::SOLID);
fmt.fill_format().solid_fill_color().set_color(
asf::Color::from_argb(255, 0, 70, 127));
prs.save("colored-text.pptx", asf::SaveFormat::PPTX);
return 0;
}Color::from_argb(alpha, red, green, blue) приема стойности 0-255 за всеки канал.
Стъпка 6: Множество части в един абзац
Един абзац може да съдържа множество части с различно форматиране. Добавете нов Portion към абзаца portions() колекция:
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
auto& shape = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 50, 600, 100);
shape.text_frame()->set_text(""); // start with empty text
auto* tf = shape.text_frame();
auto& paragraph = tf->paragraphs()[0];
// First portion: normal text
auto& portion1 = paragraph.portions()[0];
portion1.set_text("Normal text followed by ");
portion1.portion_format().set_font_height(20);
// Second portion: bold red text
asf::Portion portion2;
portion2.set_text("bold red text");
portion2.portion_format().set_font_height(20);
portion2.portion_format().set_font_bold(asf::NullableBool::TRUE);
portion2.portion_format().fill_format().set_fill_type(asf::FillType::SOLID);
portion2.portion_format().fill_format().solid_fill_color().set_color(
asf::Color::from_argb(255, 200, 0, 0));
paragraph.portions().add(portion2);
prs.save("mixed-format.pptx", asf::SaveFormat::PPTX);
return 0;
}Чести проблеми и решения
Текстът остава черен, дори след задаване на цвят
Уверете се fill_format().set_fill_type(FillType::SOLID) е зададено преди задаване на цвета. Без задаване на типа на запълване, промяната на цвета може да няма ефект.
NullableBool::TRUE против true
portion_format().set_font_bold() очаква NullableBool::TRUE, а не C++ true. Предаване true директно няма да се компилира или ще има неопределено поведение в зависимост от резолюцията на претоварването.
Шрифтът не се появява в запазения файл
Този set_latin_font() методът задава латинското семейство шрифтове. Ако не е зададено, се използва шрифтът от темата на презентацията. Персонализираните шрифтове трябва да бъдат вградени или налични на машината за преглед.
Често задавани въпроси
Как да променя семейството на шрифта?
Задай portion_format().set_latin_font():
fmt.set_latin_font(asf::FontData("Arial"));FontData приема името на семейството шрифтове като низ.
Как да зададете подравняване на абзац?
Използвай paragraph_format().set_alignment():
tf.paragraphs()[0].paragraph_format().set_alignment(asf::TextAlignment::CENTER);Поддържани стойности: LEFT, CENTER, RIGHT, JUSTIFY.
Как да зададете междуредово разстояние?
Използвай paragraph_format().set_space_before() (точки преди абзац) или paragraph_format().set_space_after() (точки след абзац):
tf.paragraphs()[0].paragraph_format().set_space_before(12); // 12pt before
tf.paragraphs()[0].paragraph_format().set_space_after(6); // 6pt after