Como formatar texto em C++
Aspose.Slides FOSS for C++ provides fine-grained text formatting through the PortionFormat classe. A Portion é a menor unidade independente de texto; corresponde a uma única execução de formatação dentro de um parágrafo. Este guia mostra como aplicar formatação em negrito, itálico, tamanho de fonte e cor ao texto em uma apresentação.
Guia passo a passo
Etapa 1: Compilar e Vincular a Biblioteca
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 .Etapa 2: Adicionar uma Forma com um Quadro de Texto
Antes de formatar o texto, adicione uma forma e defina seu conteúdo de texto via 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;
}Etapa 3: Acessar o TextFrame
shape.text_frame() retorna um ponteiro para o shape’s TextFrame. Use -> para chamar métodos nele.
auto* tf = shape.text_frame(); // pointer to the shape's text frame
tf->set_text("your text here");Um TextFrame contém Paragraph objetos (tf->paragraphs()) Paragraph contém Portion objetos (paragraph.portions()).
Etapa 4: Aplicar Formatação em Negrito e Itálico
Use portion_format().set_font_bold() e portion_format().set_font_italic(). Esses métodos aceitam NullableBool::TRUE, NullableBool::FALSE, ou NullableBool::NOT_DEFINED (herda de 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;
}Etapa 5: Definir Tamanho da Fonte e Cor
Defina portion_format().set_font_height() para tamanho (em pontos) e use fill_format() para cor.
#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) aceita valores 0-255 para cada canal.
Etapa 6: Múltiplas Porções em um Único Parágrafo
Um único parágrafo pode conter várias partes com formatação diferente. Adicione um novo Portion para o parágrafo portions() coleção:
#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;
}Problemas comuns e correções
O texto aparece preto mesmo após definir a cor
Garanta fill_format().set_fill_type(FillType::SOLID) é definido antes de atribuir a cor. Sem definir o tipo de preenchimento, a mudança de cor pode não ter efeito.
NullableBool::TRUE vs true
portion_format().set_font_bold() espera NullableBool::TRUE, não o C++ true. Passando true diretamente não compilará ou terá comportamento indefinido dependendo da resolução de sobrecarga.
A fonte não aparece no arquivo salvo
O set_latin_font() método define a família de fontes Latin. Se não for definido, a fonte do tema da apresentação será usada. Fontes personalizadas devem ser incorporadas ou estar disponíveis na máquina de visualização.
Perguntas Frequentes
Como altero a família de fontes?
Definir portion_format().set_latin_font():
fmt.set_latin_font(asf::FontData("Arial"));FontData aceita o nome da família de fontes como uma string.
Como defino o alinhamento do parágrafo?
Usar paragraph_format().set_alignment():
tf.paragraphs()[0].paragraph_format().set_alignment(asf::TextAlignment::CENTER);Valores suportados: LEFT, CENTER, RIGHT, JUSTIFY.
Como defino o espaçamento entre linhas?
Usar paragraph_format().set_space_before() (pontos antes do parágrafo) ou paragraph_format().set_space_after() (pontos depois do parágrafo):
tf.paragraphs()[0].paragraph_format().set_space_before(12); // 12pt before
tf.paragraphs()[0].paragraph_format().set_space_after(6); // 6pt after