Hur man formaterar text i C++
Aspose.Slides FOSS för C++ erbjuder finmaskig textformatering via PortionFormat-klassen. En Portion är den minsta oberoende enheten av text; den motsvarar ett enda formateringssegment inom ett stycke. Denna guide visar hur man applicerar fetstil, kursiv, teckenstorlek och färgformatering på text i en presentation.
Steg-för-steg-guide
Steg 1: Bygg och länka biblioteket
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 .Steg 2: Lägg till en form med en textruta
Innan du formaterar text, lägg till en form och ange dess textinnehåll 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;
}Steg 3: Åtkomst till TextFrame
shape.text_frame() returnerar en pekare till figurens TextFrame. Använd -> för att anropa metoder på den.
auto* tf = shape.text_frame(); // pointer to the shape's text frame
tf->set_text("your text here");En TextFrame innehåller Paragraph objekt (tf->paragraphs()). Varje Paragraph innehåller Portion objekt (paragraph.portions()).
Steg 4: Tillämpa fetstil och kursiv formatering
Använd portion_format().set_font_bold() och portion_format().set_font_italic(). Dessa metoder accepterar NullableBool::TRUE, NullableBool::FALSE eller NullableBool::NOT_DEFINED (ärver från 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;
}Steg 5: Ställ in teckenstorlek och färg
Ange portion_format().set_font_height() för storlek (i punkter) och använd fill_format() för färg.
#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) accepterar värden 0‑255 för varje kanal.
Steg 6: Flera delar i ett stycke
Ett enda stycke kan innehålla flera delar med olika formatering. Lägg till en ny Portion i ett stycke’s portions()-samling:
#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;
}Vanliga problem och lösningar
Text visas svart även efter att färgen har ställts in
Se till att fill_format().set_fill_type(FillType::SOLID) är inställd innan färgen tilldelas. Utan att ange fyllningstypen kan färgändringen ha ingen effekt.
NullableBool::TRUE vs true
portion_format().set_font_bold() förväntar sig NullableBool::TRUE, inte C++ true. Att skicka true direkt kommer inte att kompilera eller kan ha odefinierat beteende beroende på överlagringsupplösningen.
Typsnitt visas inte i den sparade filen
Metoden set_latin_font() anger den latinska teckensnittsfamiljen. Om den inte är angiven används presentationens temateckensnitt. Anpassade teckensnitt måste vara inbäddade eller tillgängliga på visningsdatorn.
Vanliga frågor
Hur ändrar jag teckensnittsfamiljen?
Ange portion_format().set_latin_font():
fmt.set_latin_font(asf::FontData("Arial"));FontData accepterar teckensnittsfamiljens namn som en sträng.
Hur ställer jag in styckejustering?
Använd paragraph_format().set_alignment():
tf.paragraphs()[0].paragraph_format().set_alignment(asf::TextAlignment::CENTER);Stödda värden: LEFT, CENTER, RIGHT, JUSTIFY.
Hur ställer jag in radavstånd?
Använd paragraph_format().set_space_before() (punkter före stycket) eller paragraph_format().set_space_after() (punkter efter stycket):
tf.paragraphs()[0].paragraph_format().set_space_before(12); // 12pt before
tf.paragraphs()[0].paragraph_format().set_space_after(6); // 6pt after