Ridimensionare le forme nelle diapositive di presentazione
Panoramica
Una delle domande più comuni dei clienti di Aspose.Slides per C++ è come ridimensionare le forme in modo che, quando le dimensioni della diapositiva cambiano, i dati non vengano tagliati. Questo breve articolo tecnico mostra come farlo.
Ridimensionare le forme
Per impedire che le forme vengano disallineate quando le dimensioni della diapositiva cambiano, aggiorna la posizione e le dimensioni di ogni forma affinché si conformino al nuovo layout della diapositiva.
// Carica il file di presentazione.
auto presentation = MakeObject<Presentation>(u"sample.ppt");
// Ottieni le dimensioni originali della diapositiva.
float currentHeight = presentation->get_SlideSize()->get_Size().get_Height();
float currentWidth = presentation->get_SlideSize()->get_Size().get_Width();
// Modifica le dimensioni della diapositiva senza ridimensionare le forme esistenti.
presentation->get_SlideSize()->SetSize(SlideSizeType::A4Paper, SlideSizeScaleType::DoNotScale);
// Ottieni le nuove dimensioni della diapositiva.
float newHeight = presentation->get_SlideSize()->get_Size().get_Height();
float newWidth = presentation->get_SlideSize()->get_Size().get_Width();
float heightRatio = newHeight / currentHeight;
float widthRatio = newWidth / currentWidth;
// Ridimensiona e riposiziona le forme su ogni diapositiva.
for (auto&& slide : presentation->get_Slides())
{
for (auto&& shape : slide->get_Shapes())
{
// Ridimensiona le dimensioni della forma.
shape->set_Height(shape->get_Height() * heightRatio);
shape->set_Width(shape->get_Width() * widthRatio);
// Ridimensiona la posizione della forma.
shape->set_Y(shape->get_Y() * heightRatio);
shape->set_X(shape->get_X() * widthRatio);
}
}
presentation->Save(u"output.pptx", SaveFormat::Pptx);
presentation->Dispose();
Utilizza il codice seguente per ridimensionare le diapositive che contengono tabelle. Per le tabelle, impostare la larghezza o l’altezza è un caso speciale: è necessario regolare le altezze delle righe e le larghezze delle colonne individuali per modificare le dimensioni complessive della tabella.
auto presentation = MakeObject<Presentation>(u"sample.pptx");
// Ottieni le dimensioni originali della diapositiva.
float currentHeight = presentation->get_SlideSize()->get_Size().get_Height();
float currentWidth = presentation->get_SlideSize()->get_Size().get_Width();
// Modifica le dimensioni della diapositiva senza ridimensionare le forme esistenti.
presentation->get_SlideSize()->SetSize(SlideSizeType::A4Paper, SlideSizeScaleType::DoNotScale);
//presentation.SlideSize.Orientation = SlideOrienation.Portrait;
// Ottieni le nuove dimensioni della diapositiva.
float newHeight = presentation->get_SlideSize()->get_Size().get_Height();
float newWidth = presentation->get_SlideSize()->get_Size().get_Width();
float heightRatio = newHeight / currentHeight;
float widthRatio = newWidth / currentWidth;
for (auto&& master : presentation->get_Masters())
{
for (auto&& shape : master->get_Shapes())
{
// Ridimensiona le dimensioni della forma.
shape->set_Height(shape->get_Height() * heightRatio);
shape->set_Width(shape->get_Width() * widthRatio);
// Ridimensiona la posizione della forma.
shape->set_Y(shape->get_Y() * heightRatio);
shape->set_X(shape->get_X() * widthRatio);
}
for (auto&& layoutSlide : master->get_LayoutSlides())
{
for (auto&& shape : layoutSlide->get_Shapes())
{
// Ridimensiona le dimensioni della forma.
shape->set_Height(shape->get_Height() * heightRatio);
shape->set_Width(shape->get_Width() * widthRatio);
// Ridimensiona la posizione della forma.
shape->set_Y(shape->get_Y() * heightRatio);
shape->set_X(shape->get_X() * widthRatio);
}
}
}
for (auto&& slide : presentation->get_Slides())
{
for (auto&& shape : slide->get_Shapes())
{
// Ridimensiona le dimensioni della forma.
shape->set_Height(shape->get_Height() * heightRatio);
shape->set_Width(shape->get_Width() * widthRatio);
// Ridimensiona la posizione della forma.
shape->set_Y(shape->get_Y() * heightRatio);
shape->set_X(shape->get_X() * widthRatio);
if (ObjectExt::Is<ITable>(shape))
{
SharedPtr<ITable> table = ExplicitCast<ITable>(shape);
for (auto&& row : table->get_Rows())
{
row->set_MinimalHeight(row->get_MinimalHeight() * heightRatio);
}
for (auto&& column : table->get_Columns())
{
column->set_Width(column->get_Width() * widthRatio);
}
}
}
}
presentation->Save(u"output.pptx", SaveFormat::Pptx);
presentation->Dispose();
Domande frequenti
Perché le forme risultano distorte o tagliate dopo il ridimensionamento di una diapositiva?
Durante il ridimensionamento di una diapositiva, le forme mantengono la loro posizione e dimensione originali a meno che la scala non venga modificata esplicitamente. Questo può far sì che il contenuto venga ritagliato o che le forme risultino disallineate.
Il codice fornito funziona per tutti i tipi di forma?
L’esempio di base funziona per la maggior parte dei tipi di forma (caselle di testo, immagini, grafici, ecc.). Tuttavia, per le tabelle è necessario gestire righe e colonne separatamente, poiché l’altezza e la larghezza di una tabella sono determinate dalle dimensioni delle singole celle.
Come ridimensionare le tabelle durante il ridimensionamento di una diapositiva?
È necessario iterare tutte le righe e le colonne della tabella e ridimensionare proporzionalmente altezza e larghezza, come mostrato nel secondo esempio di codice.
Questo ridimensionamento funziona per le diapositive master e le diapositive layout?
Sì, ma è necessario iterare anche su Masters e Layout slides e applicare la stessa logica di ridimensionamento alle loro forme per garantire la coerenza nella presentazione.
Posso modificare l’orientamento di una diapositiva (ritratto/paesaggio) insieme al ridimensionamento?
Sì. È possibile utilizzare presentation->get_SlideSize()->set_Orientation per cambiare l’orientamento. Assicurati di impostare la logica di scala di conseguenza per preservare il layout.
Esiste un limite alle dimensioni della diapositiva che posso impostare?
Aspose.Slides supporta dimensioni personalizzate, ma dimensioni molto grandi possono influire sulle prestazioni o sulla compatibilità con alcune versioni di PowerPoint.
Come posso impedire che le forme con rapporto d’aspetto fisso diventino distorte?
È possibile verificare il metodo get_AspectRatioLocked della forma prima di ridimensionare. Se è bloccato, regola la larghezza o l’altezza proporzionalmente invece di scalarle singolarmente.