Hoe tekst opmaken in C++
Aspose.Slides FOSS for C++ provides fine-grained text formatting through the PortionFormat klasse. A Portion is de kleinste onafhankelijke eenheid van tekst; het komt overeen met een enkele opmaakrun binnen een alinea. Deze gids laat zien hoe je vet, cursief, lettergrootte en kleuropmaak op tekst in een presentatie toepast.
Stapsgewijze handleiding
Stap 1: Bouw en link de bibliotheek
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 .Stap 2: Voeg een vorm toe met een tekstframe
Voeg vóór het opmaken van tekst een vorm toe en stel de tekstinhoud in 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;
}Stap 3: Toegang tot het TextFrame
shape.text_frame() geeft een pointer naar de vorm TextFrame. Gebruik -> om methoden erop aan te roepen.
auto* tf = shape.text_frame(); // pointer to the shape's text frame
tf->set_text("your text here");A TextFrame bevat Paragraph objecten (tf->paragraphs()). Elke Paragraph bevat Portion objecten (paragraph.portions()).
Stap 4: Vet‑ en cursiefopmaak toepassen
Gebruik portion_format().set_font_bold() en portion_format().set_font_italic(). Deze methoden accepteren NullableBool::TRUE, NullableBool::FALSE, of NullableBool::NOT_DEFINED (erven van 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;
}Stap 5: Lettergrootte en kleur instellen
Instellen portion_format().set_font_height() voor grootte (in punten) en gebruik fill_format() voor kleur.
#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) accepteert waarden 0-255 voor elk kanaal.
Stap 6: Meerdere delen in één alinea
Een enkele alinea kan meerdere delen met verschillende opmaak bevatten. Voeg een nieuwe Portion aan een alinea portions() collectie:
#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;
}Veelvoorkomende problemen en oplossingen
Tekst blijft zwart, zelfs na het instellen van de kleur
Zorg ervoor fill_format().set_fill_type(FillType::SOLID) is ingesteld voordat de kleur wordt toegewezen. Zonder het instellen van het vultype heeft de kleurverandering mogelijk geen effect.
NullableBool::TRUE vs true
portion_format().set_font_bold() verwacht NullableBool::TRUE, niet de C++ true. Door true directly zal niet compileren of zal, afhankelijk van de overloadresolutie, ongedefinieerd gedrag vertonen.
Lettertype verschijnt niet in het opgeslagen bestand
De set_latin_font() methode stelt de Latijnse lettertypefamilie in. Als deze niet is ingesteld, wordt het lettertype van het presentatiethema gebruikt. Aangepaste lettertypen moeten worden ingesloten of beschikbaar zijn op de weergavemachine.
Veelgestelde vragen
Hoe wijzig ik de lettertypefamilie?
Instellen portion_format().set_latin_font():
fmt.set_latin_font(asf::FontData("Arial"));FontData accepteert de naam van de lettertypefamilie als een string.
Hoe stel ik alinea-uitlijning in?
Gebruik paragraph_format().set_alignment():
tf.paragraphs()[0].paragraph_format().set_alignment(asf::TextAlignment::CENTER);Ondersteunde waarden: LEFT, CENTER, RIGHT, JUSTIFY.
Hoe stel ik regelafstand in?
Gebruik paragraph_format().set_space_before() (punten vóór alinea) of paragraph_format().set_space_after() (punten na alinea):
tf.paragraphs()[0].paragraph_format().set_space_before(12); // 12pt before
tf.paragraphs()[0].paragraph_format().set_space_after(6); // 6pt after