Formen auf Folie Größenänderung
Contents
[
Hide
]
Größenänderung von Formen auf Folie
Eine der häufigsten Fragen von Kunden von Aspose.Slides für C++ ist, wie man Formen so ändert, dass die Daten beim Ändern der Foliengröße nicht abgeschnitten werden. Dieser kurze technische Tipp zeigt, wie man das erreichen kann.
Um eine Desorientierung der Formen zu vermeiden, muss jede Form auf der Folie entsprechend der neuen Foliengröße aktualisiert werden.
// Präsentation laden
SharedPtr<Presentation> presentation = System::MakeObject<Presentation>(u"D:\\TestResize.ppt");
// Alte Foliengröße
float currentHeight = presentation->get_SlideSize()->get_Size().get_Height();
float currentWidth = presentation->get_SlideSize()->get_Size().get_Width();
// Ändern der Foliengröße
presentation->get_SlideSize()->SetSize(SlideSizeType::A4Paper, SlideSizeScaleType::DoNotScale);
// Neue Foliengröße
float newHeight = presentation->get_SlideSize()->get_Size().get_Height();
float newWidth = presentation->get_SlideSize()->get_Size().get_Width();
float ratioHeight = newHeight / currentHeight;
float ratioWidth = newWidth / currentWidth;
for (auto slide : presentation->get_Slides())
{
for (auto shape : slide->get_Shapes())
{
// Position anpassen
shape->set_Height(shape->get_Height() * ratioHeight);
shape->set_Width(shape->get_Width() * ratioWidth);
// Formgröße anpassen, wenn erforderlich
shape->set_Y(shape->get_Y() * ratioHeight);
shape->set_X(shape->get_X() * ratioWidth);
}
}
presentation->Save(u"Resize.pptx", Export::SaveFormat::Pptx);
Wenn es eine Tabelle auf der Folie gibt, funktioniert der oben stehende Code nicht perfekt. In diesem Fall muss jede Zelle der Tabelle angepasst werden.
Sie müssen den folgenden Code verwenden, wenn Sie die Folien mit Tabellen anpassen möchten. Das Festlegen der Tabellenbreite oder -höhe ist ein Sonderfall bei Formen, bei dem die individuelle Zeilenhöhe und Spaltenbreite geändert werden müssen, um die Tabellenhöhe und -breite zu ändern.
SharedPtr<Presentation> presentation = System::MakeObject<Presentation>(u"D:\\Test.pptx");
// Alte Foliengröße
float currentHeight = presentation->get_SlideSize()->get_Size().get_Height();
float currentWidth = presentation->get_SlideSize()->get_Size().get_Width();
// Ändern der Foliengröße
presentation->get_SlideSize()->SetSize(SlideSizeType::A4Paper, SlideSizeScaleType::DoNotScale);
//presentation.SlideSize.Orientation = SlideOrienation.Portrait;
// Neue Foliengröße
float newHeight = presentation->get_SlideSize()->get_Size().get_Height();
float newWidth = presentation->get_SlideSize()->get_Size().get_Width();
float ratioHeight = newHeight / currentHeight;
float ratioWidth = newWidth / currentWidth;
for (auto master : presentation->get_Masters())
{
for (auto shape : master->get_Shapes())
{
// Position anpassen
shape->set_Height(shape->get_Height() * ratioHeight);
shape->set_Width(shape->get_Width() * ratioWidth);
// Formgröße anpassen, wenn erforderlich
shape->set_Y(shape->get_Y() * ratioHeight);
shape->set_X(shape->get_X() * ratioWidth);
}
for (auto layoutslide : master->get_LayoutSlides())
{
for (auto shape : layoutslide->get_Shapes())
{
//Position anpassen
shape->set_Height(shape->get_Height() * ratioHeight);
shape->set_Width(shape->get_Width() * ratioWidth);
//Formgröße anpassen, wenn erforderlich
shape->set_Y(shape->get_Y() * ratioHeight);
shape->set_X(shape->get_X() * ratioWidth);
}
}
}
for (auto slide : presentation->get_Slides())
{
for (auto shape : slide->get_Shapes())
{
// Position anpassen
shape->set_Height(shape->get_Height() * ratioHeight);
shape->set_Width(shape->get_Width() * ratioWidth);
// Formgröße anpassen, wenn erforderlich
shape->set_Y(shape->get_Y() * ratioHeight);
shape->set_X(shape->get_X() * ratioWidth);
if (ObjectExt::Is<ITable>(shape))
{
SharedPtr<ITable> table = System::ExplicitCast<ITable>(shape);
for (auto row : table->get_Rows())
{
row->set_MinimalHeight(row->get_MinimalHeight() * ratioHeight);
// row.Height = row.Height * ratioHeight;
}
for (auto col : table->get_Columns())
{
col->set_Width(col->get_Width() * ratioWidth);
}
}
}
}
presentation->Save(u"D:\\Resize.pptx", Export::SaveFormat::Pptx);