Hur man formaterar text i C++
Aspose.Slides FOSS for C++ provides fine-grained text formatting through the PortionFormat klass. En Portion är den minsta oberoende enheten av text; den motsvarar ett enda formateringsintervall 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 textram
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 formens 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: Applicera 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 (ärva 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 portioner i ett stycke
Ett enda stycke kan innehålla flera delar med olika formatering. Lägg till en ny Portion till ett stycke 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
Texten visas svart även efter att färgen har ställts in
Säkerställ fill_format().set_fill_type(FillType::SOLID) är inställd innan färgen tilldelas. Utan att sätta 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
Den set_latin_font() metoden sätter den latinska teckensnittsfamiljen. Om den inte är inställd används presentationens temateckensnitt. Anpassade teckensnitt måste vara inbäddade eller tillgängliga på visningsmaskinen.
Vanliga frågor
Hur ändrar jag typsnittsfamiljen?
Ställ in 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