Aplicar ou Alterar Layouts de Slides em C++
Visão geral
Um layout de slide define as posições e a formatação de marcadores de posição, como títulos, texto, imagens, gráficos e tabelas. Aplicar um layout fornece aos slides uma estrutura consistente, permitindo que cada slide contenha seu próprio conteúdo.
Os layouts mais comuns incluem:
- Slide de Título: Contém marcadores de posição de título e subtítulo.
- Título e Conteúdo: Contém um marcador de posição de título e um marcador de posição de conteúdo de uso geral.
- Em branco: Não contém marcadores de posição de conteúdo e é útil quando cada forma será posicionada manualmente.
Entender a Herança de Layout
Uma apresentação tem três níveis relacionados:
- Um slide mestre define o tema, formatação compartilhada, fundos e objetos comuns.
- Um slide de layout pertence a um mestre e define um arranjo específico de marcadores de posição.
- Um slide normal usa um layout e armazena o conteúdo inserido para esse slide.
Um slide normal herda o tema e a formatação do seu layout, e o layout herda do seu mestre. Um valor definido diretamente em um slide normal sobrescreve o valor herdado naquele nível. Quando um slide normal é criado, suas formas de marcador de posição são geradas a partir do layout selecionado, enquanto o conteúdo inserido nesses marcadores pertence ao slide normal.
Adicione os marcadores de posição necessários a um layout antes de criar slides a partir dele. Adicionar outro marcador de posição a um layout posteriormente não adiciona automaticamente a forma de marcador correspondente aos slides normais existentes.
Esse relacionamento tem duas consequências importantes:
- Alterar a formatação herdada ou a geometria de marcadores de posição existentes em um layout pode atualizar todos os slides que dependem dele. Antes de editar um layout que já está em uso, inspecione seus slides dependentes e revise a apresentação resultante.
- Um layout que ainda é usado por um slide não pode ser removido. Reatribua seus slides dependentes a outro layout primeiro, ou remova apenas os layouts não utilizados.
Para mais informações sobre o nível superior desta hierarquia, veja Mestre do Slide.
Para ocultar logos herdados ou formas decorativas do mestre em um slide ou através de um layout compartilhado, veja Controlar a Visibilidade de Gráficos Mestres. O exemplo compara dois slides usando o mesmo mestre.
Selecionar e Aplicar um Layout de Slide
Use um tipo de layout quando a apresentação segue definições padrão de layout do PowerPoint. Os nomes dos layouts são editáveis pelo usuário e podem ser localizados, portanto a seleção baseada em nome é menos confiável a menos que você controle o modelo de origem.
O exemplo a seguir procura Título e Conteúdo no primeiro mestre. Se esse layout não estiver disponível, ele recorre deliberadamente a Em branco. A segunda verificação de nulo é necessária porque uma apresentação pode conter apenas layouts personalizados. O layout selecionado é então aplicado ao primeiro slide normal através do método ISlide::set_LayoutSlide.
#include <DOM/ILayoutSlide.h>
#include <DOM/IMasterLayoutSlideCollection.h>
#include <DOM/IMasterSlide.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/SlideLayoutType.h>
#include <Export/SaveFormat.h>
#include <system/exceptions.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"input.pptx");
auto layoutSlides = presentation->get_Master(0)->get_LayoutSlides();
auto targetLayout = layoutSlides->GetByType(SlideLayoutType::TitleAndObject);
if (targetLayout == nullptr)
{
targetLayout = layoutSlides->GetByType(SlideLayoutType::Blank);
}
if (targetLayout == nullptr)
{
throw InvalidOperationException(u"The first master does not contain a suitable layout slide.");
}
presentation->get_Slide(0)->set_LayoutSlide(targetLayout);
presentation->Save(u"output-with-new-layout.pptx", SaveFormat::Pptx);
presentation->Dispose();
Alterar o layout de um slide não remove formas comuns adicionadas diretamente ao slide. No entanto, as posições dos marcadores, a formatação herdada e a correspondência entre os marcadores existentes e o novo layout podem mudar, portanto, verifique a saída ao trocar entre layouts substancialmente diferentes.
Adicionar um Slide de Layout
Seleção e criação são operações separadas. O exemplo anterior seleciona um layout existente; ele não cria um. Para criar um layout, chame o método IMasterLayoutSlideCollection::Add na coleção de layouts do mestre de destino.
O exemplo a seguir sempre adiciona um novo layout Título e Conteúdo chamado Report Title and Content, depois adiciona um slide normal baseado nele. Os nomes dos layouts devem ser exclusivos dentro da coleção.
#include <DOM/ILayoutSlide.h>
#include <DOM/IMasterLayoutSlideCollection.h>
#include <DOM/IMasterSlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <DOM/SlideLayoutType.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"input.pptx");
auto masterSlide = presentation->get_Master(0);
auto reportLayout = masterSlide->get_LayoutSlides()->Add(SlideLayoutType::TitleAndObject, u"Report Title and Content");
presentation->get_Slides()->AddEmptySlide(reportLayout);
presentation->Save(u"output-with-report-layout.pptx", SaveFormat::Pptx);
presentation->Dispose();
Adicione um layout somente quando o modelo realmente precisar de outra estrutura reutilizável. Se um layout adequado já existir, selecione‑o e reutilize‑o em vez de criar um duplicado.
Adicionar Marcadores de Posição a um Slide de Layout
O método ILayoutSlide::get_PlaceholderManager fornece um ILayoutPlaceholderManager para adicionar formas de marcador de posição a um layout.
O exemplo a seguir verifica se o layout Em branco existe, adiciona quatro marcadores a ele e, em seguida, cria um slide normal que usa o layout modificado. A ordem é intencional: os marcadores são adicionados antes que o slide normal seja criado, para que o Aspose.Slides possa gerar as formas de marcador correspondentes naquele slide.
#include <DOM/IGlobalLayoutSlideCollection.h>
#include <DOM/ILayoutPlaceholderManager.h>
#include <DOM/ILayoutSlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <DOM/SlideLayoutType.h>
#include <Export/SaveFormat.h>
#include <system/exceptions.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto blankLayout = presentation->get_LayoutSlides()->GetByType(SlideLayoutType::Blank);
if (blankLayout == nullptr)
{
throw InvalidOperationException(u"The presentation does not contain a Blank layout slide.");
}
auto placeholderManager = blankLayout->get_PlaceholderManager();
placeholderManager->AddContentPlaceholder(20.0f, 20.0f, 310.0f, 270.0f);
placeholderManager->AddVerticalTextPlaceholder(350.0f, 20.0f, 350.0f, 270.0f);
placeholderManager->AddChartPlaceholder(20.0f, 310.0f, 310.0f, 180.0f);
placeholderManager->AddTablePlaceholder(350.0f, 310.0f, 350.0f, 180.0f);
presentation->get_Slides()->AddEmptySlide(blankLayout);
presentation->Save(u"output-with-placeholders.pptx", SaveFormat::Pptx);
presentation->Dispose();
O resultado:

Warning
Alterar a formatação herdada ou a geometria de marcadores de posição existentes em um layout pode afetar os slides dependentes. Um marcador de posição de layout recém‑adicionado não é retroalimentado nos slides normais existentes. Teste alterações de layout em uma cópia da apresentação e inspecione cada slide dependente.Remover Slides de Layout Não Utilizados
Use o método Compress::RemoveUnusedLayoutSlides para remover layouts que nenhum slide normal referencia. O método deixa intactos os layouts que ainda estão em uso.
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <LowCode/Compress.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::LowCode;
using namespace System;
auto presentation = MakeObject<Presentation>(u"input.pptx");
Compress::RemoveUnusedLayoutSlides(presentation);
presentation->Save(u"output-without-unused-layouts.pptx", SaveFormat::Pptx);
presentation->Dispose();
Para remover um layout específico, primeiro use seu método get_HasDependingSlides ou GetDependingSlides. Reatribua quaisquer slides dependentes antes de chamar ILayoutSlide::Remove. Tentar remover um layout em uso gera uma PptxEditException.
Controlar a Visibilidade do Rodapé em um Slide de Layout
Um layout tem seus próprios marcadores de rodapé, número do slide e data/hora. Use o método ILayoutSlide::get_HeaderFooterManager para controlar esses marcadores em um layout. Isso é útil quando, por exemplo, layouts de conteúdo devem mostrar rodapés, mas layouts de título não.
#include <DOM/IGlobalLayoutSlideCollection.h>
#include <DOM/ILayoutSlide.h>
#include <DOM/ILayoutSlideHeaderFooterManager.h>
#include <DOM/Presentation.h>
#include <DOM/SlideLayoutType.h>
#include <Export/SaveFormat.h>
#include <system/exceptions.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"input.pptx");
auto layoutSlide = presentation->get_LayoutSlides()->GetByType(SlideLayoutType::TitleAndObject);
if (layoutSlide == nullptr)
{
layoutSlide = presentation->get_LayoutSlides()->GetByType(SlideLayoutType::Blank);
}
if (layoutSlide == nullptr)
{
throw InvalidOperationException(u"The presentation does not contain a suitable layout slide.");
}
auto headerFooterManager = layoutSlide->get_HeaderFooterManager();
headerFooterManager->SetFooterVisibility(true);
headerFooterManager->SetSlideNumberVisibility(true);
headerFooterManager->SetDateTimeVisibility(true);
headerFooterManager->SetFooterText(u"Footer text");
headerFooterManager->SetDateTimeText(u"Date and time text");
presentation->Save(u"output-with-layout-footers.pptx", SaveFormat::Pptx);
presentation->Dispose();
Controlar a Visibilidade do Rodapé em um Mestre e seus Layouts Filho
Para aplicar configurações de rodapé consistentes em toda a hierarquia de mestres, use o método IMasterSlide::get_HeaderFooterManager. Os métodos de propagação de IMasterSlideHeaderFooterManager operam no mestre e em seus slides de layout e slides normais dependentes; eles não visam apenas um slide normal.
#include <DOM/IMasterSlide.h>
#include <DOM/IMasterSlideHeaderFooterManager.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"input.pptx");
auto headerFooterManager = presentation->get_Master(0)->get_HeaderFooterManager();
headerFooterManager->SetFooterAndChildFootersVisibility(true);
headerFooterManager->SetSlideNumberAndChildSlideNumbersVisibility(true);
headerFooterManager->SetDateTimeAndChildDateTimesVisibility(true);
headerFooterManager->SetFooterAndChildFootersText(u"Footer text");
headerFooterManager->SetDateTimeAndChildDateTimesText(u"Date and time text");
presentation->Save(u"output-with-master-footers.pptx", SaveFormat::Pptx);
presentation->Dispose();
FAQ
Qual é a diferença entre um Slide Mestre e um Slide de Layout?
Um slide mestre define o tema da apresentação e a formatação compartilhada. Um slide de layout pertence a um mestre e define um arranjo reutilizável de marcadores de posição. Slides normais utilizam esses layouts e armazenam o conteúdo específico de cada slide.
Posso copiar um Slide de Layout de uma apresentação para outra?
Sim. Adicione uma cópia à coleção de destino com o método IGlobalLayoutSlideCollection::AddClone. Ao copiar entre apresentações, verifique também fontes, temas, imagens e outros recursos usados pelo layout de origem.
O que acontece quando modifico um layout que já está em uso?
Slides dependentes herdam as alterações do layout, a menos que sobrescrevam localmente a formatação ou os objetos afetados. A geometria dos marcadores e o estilo herdado podem, portanto, mudar em muitos slides de uma só vez. Use GetDependingSlides para identificar os slides afetados antes de editar o layout.
O que acontece se eu remover um layout que ainda está em uso?
O Aspose.Slides lança uma PptxEditException. Reatribua primeiro os slides dependentes ou use RemoveUnusedLayoutSlides para remover apenas os layouts não referenciados.









