Alakzatok átméretezése a bemutató diákon

Overview

Az Aspose.Slides for C++ ügyfelei gyakran felteszik a kérdést, hogyan lehet átméretezni az alakzatokat úgy, hogy a dia méretének változása esetén az adatok ne vágódjanak le. Ez a rövid technikai cikk bemutatja, hogyan hajtható végre ez.

Resize Shapes

Az alakzatok elcsúszásának megakadályozása érdekében a dia méretének változása során frissíteni kell minden alakzat pozícióját és méretét, hogy azok illeszkedjenek az új diaelrendezéshez.

// Töltsük be a bemutatófájlt.
auto presentation = MakeObject<Presentation>(u"sample.ppt");

// Szerezzük meg az eredeti dia méretét.
float currentHeight = presentation->get_SlideSize()->get_Size().get_Height();
float currentWidth = presentation->get_SlideSize()->get_Size().get_Width();

// Módosítsuk a dia méretét a meglévő alakzatok méretezése nélkül.
presentation->get_SlideSize()->SetSize(SlideSizeType::A4Paper, SlideSizeScaleType::DoNotScale);

// Szerezzük meg az új dia méretét.
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;

// Resize and reposition shapes on every slide.
for (auto&& slide : presentation->get_Slides())
{
    for (auto&& shape : slide->get_Shapes())
    {
        // Méretezzük az alakzat méretét.
        shape->set_Height(shape->get_Height() * heightRatio);
        shape->set_Width(shape->get_Width() * widthRatio);

        // Méretezzük az alakzat pozícióját.
        shape->set_Y(shape->get_Y() * heightRatio);
        shape->set_X(shape->get_X() * widthRatio);
    }
}

presentation->Save(u"output.pptx", SaveFormat::Pptx);
presentation->Dispose();

Használja a következő kódot saját környezetében a táblázatot tartalmazó diák átméretezéséhez. A táblázatoknál a szélesség vagy magasság beállítása külön eset: egyedi sormagasságokat és oszlopszélességeket kell módosítani a táblázat teljes méretének megváltoztatásához.

auto presentation = MakeObject<Presentation>(u"sample.pptx");

// Szerezze meg az eredeti dia méretét.
float currentHeight = presentation->get_SlideSize()->get_Size().get_Height();
float currentWidth = presentation->get_SlideSize()->get_Size().get_Width();

// Módosítsa a dia méretét a meglévő alakzatok méretezése nélkül.
presentation->get_SlideSize()->SetSize(SlideSizeType::A4Paper, SlideSizeScaleType::DoNotScale);
//presentation.SlideSize.Orientation = SlideOrienation.Portrait;

// Szerezze meg az új dia méretét.
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())
    {
        // Méretezze az alakzat méretét.
        shape->set_Height(shape->get_Height() * heightRatio);
        shape->set_Width(shape->get_Width() * widthRatio);

        // Méretezze az alakzat pozícióját.
        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())
        {
            // Méretezze az alakzat méretét.
            shape->set_Height(shape->get_Height() * heightRatio);
            shape->set_Width(shape->get_Width() * widthRatio);

            // Méretezze az alakzat pozícióját.
            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())
    {
        // Méretezze az alakzat méretét.
        shape->set_Height(shape->get_Height() * heightRatio);
        shape->set_Width(shape->get_Width() * widthRatio);

        // Méretezze az alakzat pozícióját.
        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();

FAQ

Why are shapes distorted or cut off after resizing a slide?

A dia átméretezésekor az alakzatok megtartják eredeti pozíciójukat és méretüket, hacsak a méretezést kifejezetten nem módosítják. Ennek következtében a tartalom levágódhat vagy az alakzatok elcsúszhatnak.

Does the provided code work for all shape types?

Az alap példa a legtöbb alakzattípusra (szövegdobozok, képek, diagramok stb.) működik. Azonban táblázatok esetén a sorokat és oszlopokat külön kell kezelni, mivel egy táblázat magasságát és szélességét az egyes cellák méretei határozzák meg.

How do I resize tables when resizing a slide?

A táblázat összes sorát és oszlopát végig kell járni, majd a magasságukat és szélességüket arányosan átméretezni, ahogyan a második kódrészletben látható.

Will this resizing work for master slides and layout slides?

Igen, de a Masters és a Layout slides elemein is végig kell menni, és ugyanazt a méretezési logikát alkalmazni kell az alakzataikra, hogy a bemutató egységes maradjon.

Can I change the orientation of a slide (portrait/landscape) along with the resizing?

Igen. A presentation->get_SlideSize()->set_Orientation metódussal megváltoztatható a tájolás. Ügyeljen arra, hogy a méretezési logikát ennek megfelelően állítsa be a kialakítás megőrzése érdekében.

Is there a limit to the slide size I can set?

Az Aspose.Slides támogatja az egyedi méreteket, de a nagyon nagy méretek befolyásolhatják a teljesítményt vagy a kompatibilitást néhány PowerPoint verzióval.

How can I prevent fixed aspect ratio shapes from becoming distorted?

A méretezés előtt ellenőrizhető az alakzat get_AspectRatioLocked metódusa. Ha zárolt, a szélességet vagy magasságot arányosan kell módosítani, ahelyett, hogy külön-külön skálázná őket.