Jak formátovat text v C++

Jak formátovat text v C++

Aspose.Slides FOSS for C++ provides fine-grained text formatting through the PortionFormat třída. A Portion je nejmenší nezávislou jednotkou textu; mapuje se na jeden formátovací běh v odstavci. Tento průvodce ukazuje, jak použít tučné, kurzívu, velikost písma a barevné formátování na text v prezentaci.

Průvodce krok za krokem

Krok 1: Sestavte a propojte knihovnu

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 .

Krok 2: Přidejte tvar s textovým rámcem

Před formátováním textu přidejte tvar a nastavte jeho textový obsah pomocí 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;
}

Krok 3: Získejte přístup k TextFrame

shape.text_frame() vrací ukazatel na tvarův TextFrame. Použijte -> k volání metod na něm.

auto* tf = shape.text_frame();          // pointer to the shape's text frame
tf->set_text("your text here");

A TextFrame obsahuje Paragraph objekty (tf->paragraphs()). Každý Paragraph obsahuje Portion objekty (paragraph.portions()).


Krok 4: Použijte tučné a kurzívní formátování

Použijte portion_format().set_font_bold() a portion_format().set_font_italic(). Tyto metody přijímají NullableBool::TRUE, NullableBool::FALSE, nebo NullableBool::NOT_DEFINED (zdědit z 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;
}

Krok 5: Nastavte velikost písma a barvu

Nastavit portion_format().set_font_height() pro velikost (v bodech) a použijte fill_format() pro barvu.

#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) přijímá hodnoty 0‑255 pro každý kanál.


Krok 6: Více částí v jednom odstavci

Jeden odstavec může obsahovat více částí s různým formátováním. Přidejte novou Portion do odstavce portions() kolekci:

#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;
}

Časté problémy a opravy

Text se zobrazuje černě i po nastavení barvy

Zajistěte fill_format().set_fill_type(FillType::SOLID) je nastaveno před přiřazením barvy. Bez nastavení typu výplně se změna barvy může neprojevit.

NullableBool::TRUE vs true

portion_format().set_font_bold() očekává NullableBool::TRUE, nikoli C++ true. Předání true přímo se nekompiluje nebo bude mít nedefinované chování v závislosti na řešení přetížení.

Písmo se v uloženém souboru neobjeví

Tento set_latin_font() metoda nastavuje latinskou rodinu písma. Pokud není nastavena, použije se písmo motivu prezentace. Vlastní písma musí být vložena nebo dostupná na zobrazovacím počítači.


Často kladené otázky

Jak změním rodinu písma?

Nastavte portion_format().set_latin_font():

fmt.set_latin_font(asf::FontData("Arial"));

FontData přijímá název rodiny písma jako řetězec.

Jak nastavit zarovnání odstavce?

Použijte paragraph_format().set_alignment():

tf.paragraphs()[0].paragraph_format().set_alignment(asf::TextAlignment::CENTER);

Podporované hodnoty: LEFT, CENTER, RIGHT, JUSTIFY.

Jak nastavit řádkování?

Použít paragraph_format().set_space_before() (tečky před odstavcem) nebo paragraph_format().set_space_after() (tečky za odstavcem):

tf.paragraphs()[0].paragraph_format().set_space_before(12); // 12pt before
tf.paragraphs()[0].paragraph_format().set_space_after(6);   // 6pt after

Viz také

 Čeština