Alakzatok átméretezése prezentációs diákon Python via Java

Áttekintés

Az Aspose.Slides for Python via Java felhasználói egyik leggyakoribb kérdése, 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 kell ezt megtenni.

Alakzatok átméretezése

Annak érdekében, hogy a dia méretének változása során az alakzatok ne torzuljanak, frissítsd minden alakzat helyzetét és méretét úgy, hogy azok illeszkedjenek az új diaelrendezéshez.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, SlideSizeType, SlideSizeScaleType, SlideOrientation

# Töltsük be a prezentáció fájlt.
presentation = Presentation("sample.ppt")
try:
    # Szerezze meg az eredeti dia méretét.
    current_height = presentation.getSlideSize().getSize().getHeight()
    current_width = presentation.getSlideSize().getSize().getWidth()

    # Módosítsa a dia méretét a meglévő alakzatok átméretezése nélkül.
    presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale)

    # Szerezze meg az új dia méretét.
    new_height = presentation.getSlideSize().getSize().getHeight()
    new_width = presentation.getSlideSize().getSize().getWidth()

    height_ratio = new_height / current_height
    width_ratio = new_width / current_width

    # Átméretezze és átpozícionálja az alakzatokat minden dián.
    for slide in presentation.getSlides():
        for shape in slide.getShapes():

            # Méretezze az alakzat méretét.
            shape.setHeight(shape.getHeight() * height_ratio)
            shape.setWidth(shape.getWidth() * width_ratio)

            # Méretezze az alakzat pozícióját.
            shape.setY(shape.getY() * height_ratio)
            shape.setX(shape.getX() * width_ratio)

    presentation.save("output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

A fenti kód csak a diákon lévő alakzatokat módosítja. A mesterdiák és az elrendezési diák saját alakzatokkal rendelkeznek, ezért ha az egész prezentációt az új dia mérethez szeretnéd igazítani, ezeket is méretezd át:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, SlideSizeType, SlideSizeScaleType, SlideOrientation

presentation = Presentation("sample.pptx")
try:
    # Szerezze meg az eredeti dia méretét.
    current_height = presentation.getSlideSize().getSize().getHeight()
    current_width = presentation.getSlideSize().getSize().getWidth()

    # Módosítsa a dia méretét a meglévő alakzatok átméretezése nélkül.
    presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale)
    # presentation.getSlideSize().setOrientation(SlideOrientation.Portrait)

    # Szerezze meg az új dia méretét.
    new_height = presentation.getSlideSize().getSize().getHeight()
    new_width = presentation.getSlideSize().getSize().getWidth()

    height_ratio = new_height / current_height
    width_ratio = new_width / current_width

    for master in presentation.getMasters():
        for shape in master.getShapes():
            # Méretezze az alakzat méretét.
            shape.setHeight(shape.getHeight() * height_ratio)
            shape.setWidth(shape.getWidth() * width_ratio)

            # Méretezze az alakzat pozícióját.
            shape.setY(shape.getY() * height_ratio)
            shape.setX(shape.getX() * width_ratio)

        for layout_slide in master.getLayoutSlides():
            for shape in layout_slide.getShapes():
                # Méretezze az alakzat méretét.
                shape.setHeight(shape.getHeight() * height_ratio)
                shape.setWidth(shape.getWidth() * width_ratio)

                # Méretezze az alakzat pozícióját.
                shape.setY(shape.getY() * height_ratio)
                shape.setX(shape.getX() * width_ratio)

    for slide in presentation.getSlides():
        for shape in slide.getShapes():
            # Méretezze az alakzat méretét.
            shape.setHeight(shape.getHeight() * height_ratio)
            shape.setWidth(shape.getWidth() * width_ratio)

            # Méretezze az alakzat pozícióját.
            shape.setY(shape.getY() * height_ratio)
            shape.setX(shape.getX() * width_ratio)

    presentation.save("output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

GYIK

Miért torzulnak vagy vágódnak le az alakzatok a dia átméretezése után?

Amikor átméretezed a diát, az alakzatok megtartják eredeti pozíciójukat és méretüket, hacsak a méretezést nem módosítod kifejezetten. Ez a tartalom levágásához vagy az alakzatok elcsúszásához vezethet.

Működik a megadott kód minden alakzattípusra?

Igen. A magasság és szélesség beállítása szövegdobozokra, képekre, diagramokra és táblázatokra egyaránt működik.

Hogyan méretezhetem át a táblázatokat a dia átméretezésekor?

Méretezze a táblázat alakzatot magát, ugyanúgy, mint a többi alakzatot. Sorai és oszlopai arányosan követik, ezért ne méretezd újra őket később.

Működik ez az átméretezés a mesterdiákon és elrendezési diákon is?

Igen, de a Presentation.getMasters és a Presentation.getLayoutSlides elemeket is be kell járni, és ugyanazt a méretezési logikát alkalmazni kell az ő alakzataikra is, hogy a teljes prezentáció következetes legyen.

Megváltoztathatom a dia tájolását (álló/fekvő) az átméretezéssel együtt?

Igen. Használhatod a SlideSize.setOrientation metódust a tájolás megváltoztatásához. Győződj meg róla, hogy a méretezési logikát ennek megfelelően állítod be a elrendezés megőrzéséhez.

Van korlátja a beállítható dia méretnek?

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

Hogyan kerülhetem el, hogy a rögzített képarányú alakzatok torzuljanak?

Mielőtt méreteznél, ellenőrizd az alakzat zárolásánál a getAspectRatioLocked metódust. Ha zárolva van, akkor a szélességet vagy magasságot arányosan módosítsd, a különálló méretezés helyett.