Manage Text Boxes in Presentations Using C++
Wprowadzenie
Teksty na slajdach zazwyczaj istnieją w polach tekstowych lub kształtach. Dlatego, aby dodać tekst do slajdu, musisz dodać pole tekstowe i następnie umieścić w nim tekst. Aspose.Slides for C++ udostępnia interfejs IAutoShape, który pozwala dodać kształt zawierający tekst.
Info
Aspose.Slides udostępnia również interfejs IShape, który pozwala dodawać kształty do slajdów. Jednak nie wszystkie kształty dodane poprzez interfejsIShape mogą zawierać tekst. Natomiast kształty dodane poprzez interfejs IAutoShape mogą zawierać tekst.
Note
Dlatego, pracując z kształtem, do którego chcesz dodać tekst, możesz chcieć sprawdzić i potwierdzić, że został rzutowany przy użyciu interfejsuIAutoShape. Dopiero wtedy będziesz mógł pracować z TextFrame, które jest właściwością w IAutoShape. Zobacz sekcję Update Text na tej stronie.
Utworzenie pola tekstowego na slajdzie
Aby utworzyć pole tekstowe na slajdzie, wykonaj następujące kroki:
- Utwórz instancję klasy Presentation.
- Uzyskaj referencję do pierwszego slajdu w nowo utworzonej prezentacji.
- Dodaj obiekt IAutoShape z ShapeType ustawionym na
Rectanglew określonej pozycji na slajdzie i uzyskaj referencję do nowo dodanego obiektuIAutoShape. - Dodaj właściwość
TextFramedo obiektuIAutoShape, która będzie zawierać tekst. W poniższym przykładzie dodaliśmy tekst: Aspose TextBox - Na koniec zapisz plik PPTX przy użyciu obiektu
Presentation.
Ten kod C++ — implementacja powyższych kroków — pokazuje, jak dodać tekst do slajdu:
// Tworzy instancję Presentation
auto pres = System::MakeObject<Presentation>();
// Pobiera pierwszy slajd w prezentacji
auto sld = pres->get_Slides()->idx_get(0);
// Dodaje AutoShape z typem ustawionym na Rectangle
auto ashp = sld->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150.0f, 75.0f, 150.0f, 50.0f);
// Dodaje TextFrame do Rectangle
ashp->AddTextFrame(u" ");
// Uzyskuje dostęp do ramki tekstowej
auto txtFrame = ashp->get_TextFrame();
// Tworzy obiekt Paragraph dla ramki tekstowej
auto para = txtFrame->get_Paragraphs()->idx_get(0);
// Tworzy obiekt Portion dla akapitu
auto portion = para->get_Portions()->idx_get(0);
// Ustawia tekst
portion->set_Text(u"Aspose TextBox");
// Zapisuje prezentację na dysk
pres->Save(u"TextBox_out.pptx", SaveFormat::Pptx);
Sprawdzenie, czy kształt jest polem tekstowym
Aspose.Slides udostępnia metodę get_IsTextBox z interfejsu IAutoShape, umożliwiającą badanie kształtów i identyfikację pól tekstowych.

Ten kod C++ pokazuje, jak sprawdzić, czy kształt został utworzony jako pole tekstowe:
auto presentation = MakeObject<Presentation>(u"sample.pptx");
for (auto&& slide : presentation->get_Slides())
{
for (auto&& shape : slide->get_Shapes())
{
if (ObjectExt::Is<IAutoShape>(shape))
{
auto autoShape = ExplicitCast<IAutoShape>(shape);
Console::WriteLine(autoShape->get_IsTextBox() ? u"shape is a text box" : u"shape is not a text box");
}
}
}
presentation->Dispose();
Zauważ, że jeśli po prostu dodasz autokształt metodą AddAutoShape z interfejsu IShapeCollection, metoda get_IsTextBox tego autokształtu zwróci false. Jednak po dodaniu tekstu do autokształtu metodą AddTextFrame lub metodą set_Text, metoda get_IsTextBox zwróci true.
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto shape1 = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 10, 10, 100, 40);
// shape1->get_IsTextBox() zwraca false
shape1->AddTextFrame(u"shape 1");
// shape1->get_IsTextBox() zwraca true
auto shape2 = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 10, 110, 100, 40);
// shape2->get_IsTextBox() zwraca false
shape2->get_TextFrame()->set_Text(u"shape 2");
// shape2->get_IsTextBox() zwraca true
auto shape3 = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 10, 210, 100, 40);
// shape3->get_IsTextBox() zwraca false
shape3->AddTextFrame(u"");
// shape3->get_IsTextBox() zwraca false
auto shape4 = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 10, 310, 100, 40);
// shape4->get_IsTextBox() zwraca false
shape4->get_TextFrame()->set_Text(u"");
// shape4->get_IsTextBox() zwraca false
Dodawanie kolumn do pola tekstowego
Aspose.Slides udostępnia metody set_ColumnCount i set_ColumnSpacing (z interfejsu ITextFrameFormat oraz klasy TextFrameFormat), które pozwalają dodać kolumny do pól tekstowych. Możesz określić liczbę kolumn w polu tekstowym oraz ustawić odstęp w punktach między kolumnami.
Ten kod w C++ demonstruje opisaną operację:
auto presentation = System::MakeObject<Presentation>();
// Pobiera pierwszy slajd w prezentacji
auto slide = presentation->get_Slides()->idx_get(0);
// Dodaje AutoShape z typem ustawionym na Rectangle
auto aShape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100.0f, 100.0f, 300.0f, 300.0f);
// Dodaje TextFrame do prostokąta
aShape->AddTextFrame(String(u"All these columns are limited to be within a single text container -- ")
+ u"you can add or delete text and the new or remaining text automatically adjusts "
+ u"itself to flow within the container. You cannot have text flow from one container "
+ u"to other though -- we told you PowerPoint's column options for text are limited!");
// Pobiera format tekstu z TextFrame
auto format = aShape->get_TextFrame()->get_TextFrameFormat();
// Określa liczbę kolumn w TextFrame
format->set_ColumnCount(3);
// Określa odstęp między kolumnami
format->set_ColumnSpacing(10);
// Zapisuje prezentację
presentation->Save(u"ColumnCount.pptx", SaveFormat::Pptx);
Dodawanie kolumn do ramki tekstowej
Aspose.Slides for C++ udostępnia metodę set_ColumnCount (z interfejsu ITextFrameFormat), która pozwala dodać kolumny w ramkach tekstowych. Dzięki tej metodzie możesz określić preferowaną liczbę kolumn w ramce tekstowej.
Ten kod C++ pokazuje, jak dodać kolumnę wewnątrz ramki tekstowej:
String outPptxFileName = u"ColumnsTest.pptx";
auto pres = System::MakeObject<Presentation>();
auto shape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100.0f, 100.0f, 300.0f, 300.0f);
auto format = System::ExplicitCast<TextFrameFormat>(shape->get_TextFrame()->get_TextFrameFormat());
format->set_ColumnCount(2);
shape->get_TextFrame()->set_Text(String(u"All these columns are forced to stay within a single text container -- ")
+ u"you can add or delete text - and the new or remaining text automatically adjusts "
+ u"itself to stay within the container. You cannot have text spill over from one container "
+ u"to other, though -- because PowerPoint's column options for text are limited!");
pres->Save(outPptxFileName, SaveFormat::Pptx);
{
auto test = System::MakeObject<Presentation>(outPptxFileName);
auto format1 = System::ExplicitCast<AutoShape>(test->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0))->get_TextFrame()->get_TextFrameFormat();
CODEPORTING_DEBUG_ASSERT1(2 == format1->get_ColumnCount());
CODEPORTING_DEBUG_ASSERT1(std::numeric_limits<double>::quiet_NaN() == format1->get_ColumnSpacing());
}
format->set_ColumnSpacing(20);
pres->Save(outPptxFileName, SaveFormat::Pptx);
{
auto test = System::MakeObject<Presentation>(outPptxFileName);
auto format2 = System::ExplicitCast<AutoShape>(test->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0))->get_TextFrame()->get_TextFrameFormat();
CODEPORTING_DEBUG_ASSERT1(2 == format2->get_ColumnCount());
CODEPORTING_DEBUG_ASSERT1(20 == format2->get_ColumnSpacing());
}
format->set_ColumnCount(3);
format->set_ColumnSpacing(15);
pres->Save(outPptxFileName, SaveFormat::Pptx);
{
auto test = System::MakeObject<Presentation>(outPptxFileName);
auto format3 = System::ExplicitCast<AutoShape>(test->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0))->get_TextFrame()->get_TextFrameFormat();
CODEPORTING_DEBUG_ASSERT1(3 == format3->get_ColumnCount());
CODEPORTING_DEBUG_ASSERT1(15 == format3->get_ColumnSpacing());
}
Aktualizacja tekstu
Aspose.Slides pozwala zmienić lub zaktualizować tekst zawarty w polu tekstowym lub wszystkie teksty w prezentacji.
Ten kod C++ demonstruje operację, w której wszystkie teksty w prezentacji są aktualizowane lub zmieniane:
auto pres = System::MakeObject<Presentation>(u"text.pptx");
for (const auto& slide : pres->get_Slides())
{
for (const auto& shape : slide->get_Shapes())
{
if (ObjectExt::Is<IAutoShape>(shape))
{
auto autoShape = System::AsCast<IAutoShape>(shape);
for (const auto& paragraph : autoShape->get_TextFrame()->get_Paragraphs())
{
for (const auto& portion : paragraph->get_Portions())
{
//Modyfikuje tekst
portion->set_Text(portion->get_Text().Replace(u"years", u"months"));
//Modyfikuje formatowanie
portion->get_PortionFormat()->set_FontBold(NullableBool::True);
}
}
}
}
}
//Zapisuje zmodyfikowaną prezentację
pres->Save(u"text-changed.pptx", SaveFormat::Pptx);
Dodanie pola tekstowego z hiperłączem
Możesz wstawić link wewnątrz pola tekstowego. Po kliknięciu pola tekstowego użytkownicy są kierowani do otwarcia linku.
Aby dodać pole tekstowe zawierające link, wykonaj następujące kroki:
- Utwórz instancję klasy
Presentation. - Uzyskaj referencję do pierwszego slajdu w nowo utworzonej prezentacji.
- Dodaj obiekt
AutoShapezShapeTypeustawionym naRectanglew określonej pozycji na slajdzie i uzyskaj referencję do nowo dodanego obiektu AutoShape. - Dodaj
TextFramedo obiektuAutoShape, który zawiera Aspose TextBox jako domyślny tekst. - Zainstaluj klasę
IHyperlinkManager. - Przypisz obiekt
IHyperlinkManagerdo metody set_HyperlinkClick powiązanej z wybraną częściąTextFrame. - Na koniec zapisz plik PPTX przy użyciu obiektu
Presentation.
Ten kod C++ — implementacja powyższych kroków — pokazuje, jak dodać pole tekstowe z hiperłączem do slajdu:
// Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
auto presentation = System::MakeObject<Presentation>();
// Pobiera pierwszy slajd w prezentacji
auto slide = presentation->get_Slides()->idx_get(0);
// Dodaje obiekt AutoShape z typem ustawionym na Rectangle
auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150.0f, 150.0f, 150.0f, 50.0f);
// Rzutuje kształt na AutoShape
auto autoShape = System::ExplicitCast<IAutoShape>(shape);
// Uzyskuje dostęp do własności ITextFrame powiązanej z AutoShape
autoShape->AddTextFrame(u"");
auto textFrame = autoShape->get_TextFrame();
// Dodaje tekst do ramki
textFrame->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)->set_Text(u"Aspose.Slides");
// Ustawia hiperłącze dla tekstu części
auto linkManager = textFrame->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)->get_PortionFormat()->get_HyperlinkManager();
linkManager->SetExternalHyperlinkClick(u"http://www.aspose.com");
// Zapisuje prezentację PPTX
presentation->Save(u"hLinkPPTX_out.pptx", SaveFormat::Pptx);
FAQ
Jaka jest różnica między polem tekstowym a symbolem zastępczym tekstu podczas pracy z master slajdami?
placeholder dziedziczy styl/pozycję z master i może być nadpisany na layouts, podczas gdy zwykłe pole tekstowe jest niezależnym obiektem na konkretnym slajdzie i nie zmienia się przy przełączaniu układów.
Jak mogę wykonać masową zamianę tekstu w całej prezentacji bez modyfikacji tekstu wewnątrz wykresów, tabel i SmartArt?
Ogranicz iterację do autokształtów, które mają ramki tekstowe, i wyklucz osadzone obiekty (charts, tables, SmartArt) poprzez przeglądanie ich kolekcji osobno lub pomijanie tych typów obiektów.