Gerenciar caixas de texto em apresentações usando C++
Introdução
Os textos em slides normalmente existem em caixas de texto ou formas. Portanto, para adicionar texto a um slide, você precisa adicionar uma caixa de texto e então colocar algum texto dentro da caixa. Aspose.Slides for C++ fornece a interface IAutoShape que permite adicionar uma forma contendo texto.
Info
Aspose.Slides também fornece a interface IShape que permite adicionar formas aos slides. Contudo, nem todas as formas adicionadas através da interfaceIShape podem conter texto. Mas as formas adicionadas através da interface IAutoShape podem conter texto.
Note
Portanto, ao lidar com uma forma à qual você deseja adicionar texto, pode ser necessário verificar e confirmar que ela foi convertida através da interfaceIAutoShape. Só então você poderá trabalhar com TextFrame, que é uma propriedade de IAutoShape. Consulte a seção Update Text nesta página.
Criar uma Caixa de Texto em um Slide
Para criar uma caixa de texto em um slide, siga estas etapas:
- Crie uma instância da classe Presentation.
- Obtenha uma referência para o primeiro slide da apresentação recém‑criada.
- Adicione um objeto IAutoShape com ShapeType definido como
Rectangleem uma posição especificada no slide e obtenha a referência para o objetoIAutoShaperecém‑adicionado. - Adicione a propriedade
TextFrameao objetoIAutoShapeque conterá texto. No exemplo abaixo, adicionamos este texto: Aspose TextBox - Finalmente, grave o arquivo PPTX através do objeto
Presentation.
Este código C++ — uma implementação dos passos acima — mostra como adicionar texto a um slide:
// Instancia a Presentation
// Obtém o primeiro slide da apresentação
// Adiciona um AutoShape com o tipo definido como Rectangle
// Adiciona TextFrame ao retângulo
// Acessa o quadro de texto
// Cria o objeto Paragraph para o quadro de texto
// Cria um objeto Portion para o parágrafo
// Define o texto
// Salva a apresentação no disco
auto pres = System::MakeObject<Presentation>();
auto sld = pres->get_Slides()->idx_get(0);
auto ashp = sld->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150.0f, 75.0f, 150.0f, 50.0f);
ashp->AddTextFrame(u" ");
auto txtFrame = ashp->get_TextFrame();
auto para = txtFrame->get_Paragraphs()->idx_get(0);
auto portion = para->get_Portions()->idx_get(0);
portion->set_Text(u"Aspose TextBox");
pres->Save(u"TextBox_out.pptx", SaveFormat::Pptx);
Verificar se uma Forma é Caixa de Texto
Aspose.Slides fornece o método get_IsTextBox da interface IAutoShape que permite examinar formas e identificar caixas de texto.

Este código C++ mostra como verificar se uma forma foi criada como caixa de texto:
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();
Observe que se você simplesmente adicionar uma autoshape usando o método AddAutoShape da interface IShapeCollection , o método get_IsTextBox da autoshape retornará false. Contudo, depois de adicionar texto à autoshape usando o método AddTextFrame ou o método set_Text, o método get_IsTextBox retornará 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() retorna false
shape1->AddTextFrame(u"shape 1");
// shape1->get_IsTextBox() retorna true
auto shape2 = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 10, 110, 100, 40);
// shape2->get_IsTextBox() retorna false
shape2->get_TextFrame()->set_Text(u"shape 2");
// shape2->get_IsTextBox() retorna true
auto shape3 = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 10, 210, 100, 40);
// shape3->get_IsTextBox() retorna false
shape3->AddTextFrame(u"");
// shape3->get_IsTextBox() retorna false
auto shape4 = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 10, 310, 100, 40);
// shape4->get_IsTextBox() retorna false
shape4->get_TextFrame()->set_Text(u"");
// shape4->get_IsTextBox() retorna false
Adicionar Colunas a uma Caixa de Texto
Aspose.Slides fornece os métodos set_ColumnCount e set_ColumnSpacing (da interface ITextFrameFormat e da classe TextFrameFormat) que permitem adicionar colunas a caixas de texto. Você pode especificar o número de colunas em uma caixa de texto e definir o espaçamento entre colunas em pontos.
Este código em C++ demonstra a operação descrita:
auto presentation = System::MakeObject<Presentation>();
// Obtém o primeiro slide da apresentação
auto slide = presentation->get_Slides()->idx_get(0);
// Adiciona um AutoShape com o tipo definido como Rectangle
auto aShape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 100.0f, 100.0f, 300.0f, 300.0f);
// Adiciona TextFrame ao retângulo
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!");
// Obtém o formato de texto do TextFrame
auto format = aShape->get_TextFrame()->get_TextFrameFormat();
// Especifica o número de colunas no TextFrame
format->set_ColumnCount(3);
// Especifica o espaçamento entre colunas
format->set_ColumnSpacing(10);
// Salva a apresentação
presentation->Save(u"ColumnCount.pptx", SaveFormat::Pptx);
Adicionar Colunas a um Quadro de Texto
Aspose.Slides for C++ fornece o método set_ColumnCount (da interface ITextFrameFormat) que permite adicionar colunas em quadros de texto. Através deste método, você pode especificar o número desejado de colunas em um quadro de texto.
Este código C++ mostra como adicionar uma coluna dentro de um quadro de texto:
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());
}
Atualizar Texto
Aspose.Slides permite mudar ou atualizar o texto contido em uma caixa de texto ou todo o texto contido em uma apresentação.
Este código C++ demonstra uma operação onde todo o texto de uma apresentação é atualizado ou alterado:
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())
{
//Altera o texto
portion->set_Text(portion->get_Text().Replace(u"years", u"months"));
//Altera a formatação
portion->get_PortionFormat()->set_FontBold(NullableBool::True);
}
}
}
}
}
//Salva a apresentação modificada
pres->Save(u"text-changed.pptx", SaveFormat::Pptx);
Adicionar uma Caixa de Texto com Hyperlink
Você pode inserir um link dentro de uma caixa de texto. Quando a caixa de texto for clicada, os usuários são direcionados para abrir o link.
Para adicionar uma caixa de texto contendo um link, siga estes passos:
- Crie uma instância da classe
Presentation. - Obtenha uma referência para o primeiro slide da apresentação recém‑criada.
- Adicione um objeto
AutoShapecomShapeTypedefinido comoRectangleem uma posição especificada no slide e obtenha a referência do objeto AutoShape recém‑adicionado. - Adicione um
TextFrameao objetoAutoShapeque contenha Aspose TextBox como texto padrão. - Instancie a classe
IHyperlinkManager. - Atribua o objeto
IHyperlinkManagerao método set_HyperlinkClick associado à sua parte preferida doTextFrame. - Finalmente, grave o arquivo PPTX através do objeto
Presentation.
Este código C++ — uma implementação dos passos acima — mostra como adicionar uma caixa de texto com hyperlink a um slide:
// Instancia uma classe Presentation que representa um PPTX
auto presentation = System::MakeObject<Presentation>();
// Obtém o primeiro slide da apresentação
auto slide = presentation->get_Slides()->idx_get(0);
// Adiciona um objeto AutoShape com o tipo definido como Rectangle
auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150.0f, 150.0f, 150.0f, 50.0f);
// Converte a forma para AutoShape
auto autoShape = System::ExplicitCast<IAutoShape>(shape);
// Acessa a propriedade ITextFrame associada ao AutoShape
autoShape->AddTextFrame(u"");
auto textFrame = autoShape->get_TextFrame();
// Adiciona algum texto ao quadro
textFrame->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)->set_Text(u"Aspose.Slides");
// Define o Hyperlink para o texto da porção
auto linkManager = textFrame->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)->get_PortionFormat()->get_HyperlinkManager();
linkManager->SetExternalHyperlinkClick(u"http://www.aspose.com");
// Salva a apresentação PPTX
presentation->Save(u"hLinkPPTX_out.pptx", SaveFormat::Pptx);
FAQ
Qual a diferença entre uma caixa de texto e um placeholder de texto ao trabalhar com slides mestres?
Um placeholder herda estilo/posição do master e pode ser sobrescrito nos layouts, enquanto uma caixa de texto regular é um objeto independente em um slide específico e não muda quando você troca de layout.
Como posso realizar uma substituição em massa de texto em toda a apresentação sem alterar o texto dentro de gráficos, tabelas e SmartArt?
Limite sua iteração às auto‑shapes que possuam quadros de texto e exclua objetos incorporados (charts, tables, SmartArt) percorrendo suas coleções separadamente ou ignorando esses tipos de objeto.