Alakzatok átméretezése a bemutató diákon Pythonon keresztül Java-val

Áttekintés

Amikor megváltoztatod egy bemutató diavetületének méretét, előfordulhat, hogy át kell méretezni és újra kell helyezni a benne lévő alakzatokat, hogy illeszkedjenek az új méretekhez. Ez a cikk bemutatja, hogyan skálázhatók manuálisan az alakzatok, és hogyan kell kezelni a táblázatokat a diákon, a mesterdiákon és az elrendezéseken.

Alakzatok átméretezése

Az egyes alakzatok relatív helyzetének és méretének megőrzéséhez szorozd meg a vízszintes koordinátáit és szélességét az új dia szélességének és az eredeti szélességnek arányával. A megfelelő magasságarányt alkalmazd a függőleges koordinátákra és a magasságra.

Az első példa betölt egy bemutatót, amely diáiban nincsenek táblázatok, A4-re változtatja a dia méretét, és elmenti az eredményt. A SlideSize.setSize függvényt a SlideSizeScaleType.DoNotScale beállítással használja, hogy az ezt követő ciklus szabályozza a skálázást. Az arányok egység nélküli értékek; az alakzatok pozíciói és méretei pontokban vannak megadva. A különböző szélesség- és magasságarányok torzíthatják az alakzatokat, és egy alakzat méretének megváltoztatása nem méretezi át a betűméreteket.

import jpype
import asposeslides

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

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

presentation = Presentation("sample.pptx")
try:
    # Számítsa ki a független vízszintes és függőleges skálázási tényezőket.
    original_size = presentation.getSlideSize().getSize()
    presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale)
    target_size = presentation.getSlideSize().getSize()
    width_ratio = target_size.getWidth() / original_size.getWidth()
    height_ratio = target_size.getHeight() / original_size.getHeight()

    for slide in presentation.getSlides():
        for shape in slide.getShapes():
            shape.setWidth(shape.getWidth() * width_ratio)
            shape.setHeight(shape.getHeight() * height_ratio)
            shape.setX(shape.getX() * width_ratio)
            shape.setY(shape.getY() * height_ratio)

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

A második példa támogatja a táblázatokat, és a mesterek és elrendezések, valamint az egyes diák alakzatait is feldolgozza, mielőtt elmentené az átméretezett bemutatót. A segédprogram a Table minden egyes példányát a Column.setWidth segítségével skálázza az oszlopszélességekkel, és a Row.setMinimalHeight segítségével a minimális sormagasságokkal. Ezután a táblázat pozícióját méretezi, anélkül, hogy külön méretezné a teljes dimenzióit.

import jpype
import asposeslides

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

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


def resize_shapes(shapes, width_ratio, height_ratio):
    for shape in shapes:
        if isinstance(shape, Table):
            # A táblázat méreteit az oszlopszélességek és a sormagasságok szabályozzák.
            for column in shape.getColumns():
                column.setWidth(column.getWidth() * width_ratio)

            for row in shape.getRows():
                row.setMinimalHeight(row.getMinimalHeight() * height_ratio)
        else:
            shape.setWidth(shape.getWidth() * width_ratio)
            shape.setHeight(shape.getHeight() * height_ratio)

        shape.setX(shape.getX() * width_ratio)
        shape.setY(shape.getY() * height_ratio)


presentation = Presentation("sample.pptx")
try:
    # Számítsa ki a független vízszintes és függőleges skálázási tényezőket.
    original_size = presentation.getSlideSize().getSize()
    presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale)
    target_size = presentation.getSlideSize().getSize()
    width_ratio = target_size.getWidth() / original_size.getWidth()
    height_ratio = target_size.getHeight() / original_size.getHeight()

    # Átméretezze a mestereken és elrendezéseken, valamint az egyes diákon definiált alakzatokat.
    for master in presentation.getMasters():
        resize_shapes(master.getShapes(), width_ratio, height_ratio)

        for layout_slide in master.getLayoutSlides():
            resize_shapes(layout_slide.getShapes(), width_ratio, height_ratio)

    for slide in presentation.getSlides():
        resize_shapes(slide.getShapes(), width_ratio, height_ratio)

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

GYIK

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

Ha a dia méretét skálázás nélkül változtatod, az alakzatok megtartják eredeti pozíciójukat és méretüket, és kikerülhetnek a diából. A szélesség és magasság különböző arányokkal való skálázása szintén torzíthatja az alakzatokat.

A megadott kód minden alakzattípusra működik?

Az első példa közvetlenül módosítja az alakzat határait, és táblázat nélküli diákra van szánva. A második példa külön kezeli a táblázatokat. Ellenőrizd a kapott elrendezést, különösen a szöveget és a táblázatokat, mivel ezek a példák nem méretezik át a betűméreteket, és a táblázat tartalma korlátozhatja a sormagasságokat.

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

Skálázd az oszlopszélességeket a szélesség arányával, a minimális sormagasságokat a magasság arányával, majd a táblázat pozícióját, ahogyan a második példában is látható.

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

Igen. A második példa végigiterál a Presentation.getMasters és minden mester MasterSlide.getLayoutSlides elemein, és ugyanazt az átméretezési logikát alkalmazza az alakzataikra.

Módosíthatom a dia tájolását (álló/fekvő) az átméretezés során?

Igen. Hívd meg a SlideSize.setOrientation függvényt a dia méretének módosítása után, és még a célméretek lekérdezése előtt, hogy a skála tényezők a végső tájolást tükrözzék.

Van korlátozás a beállítható dia méretre?

Egyéni dia méreteket adhat meg a SlideSize.setSize segítségével. A támogatott méretek a bemutató formátumától és a fájlt megnyitó alkalmazástól is függenek.

Hogyan akadályozhatom meg, hogy a rögzített képarányú alakzatok torzuljanak?

Használd ugyanazt a skála tényezőt a szélesség és magasság esetén. Az eredeti elrendezés az új dia méreteihez való igazításához használd a szélességi és magassági arányok közül a kisebbet mindkét dimenzióra és pozícióra. Ez megőrzi az arányokat, de előfordulhat, hogy egy szélén üres hely marad.