Πώς να μορφοποιήσετε κείμενο σε C++
Το Aspose.Slides FOSS for C++ παρέχει λεπτομερή μορφοποίηση κειμένου μέσω της κλάσης PortionFormat. Ένα 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() επιστρέφει έναν δείκτη στο TextFrame του σχήματος. Χρησιμοποιήστε -> για να καλέσετε μεθόδους σε αυτό.
auto* tf = shape.text_frame(); // pointer to the shape's text frame
tf->set_text("your text here");Ένα 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() ορίζει την οικογένεια γραμματοσειρών Latin. Εάν δεν οριστεί, χρησιμοποιείται η γραμματοσειρά του θέματος παρουσίασης. Οι προσαρμοσμένες γραμματοσειρές πρέπει να ενσωματωθούν ή να είναι διαθέσιμες στο μηχάνημα προβολής.
Συχνές Ερωτήσεις
Πώς αλλάζω την οικογένεια γραμματοσειράς;
Ορισμός 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