Alakzatok átméretezése prezentációs diákon Androidon

Áttekintés

Amikor módosítja a bemutató dia méretét, előfordulhat, hogy át kell méretezni és újra kell pozicionálni az alakzatokat, hogy illeszkedjenek az új méretekhez. Ez a cikk bemutatja, hogyan lehet kézzel méretezni az alakzatokat, és hogyan kell kezelni a táblázatokat diákon, mester diákon és elrendezéseken.

Alakzatok átméretezése

A minden alakzat relatív pozíciójának és méretének megőrzéséhez szorozza meg a vízszintes koordinátákat és a szélességet az új dia szélessége és az eredeti szélesség arányával. A megfelelő magasságarányt alkalmazza a függőleges koordinátákra és a magasságra.

Az első példa betölt egy bemutatót, amely diái nem tartalmaznak táblázatokat, A4-re változtatja a dia méretét, és elmenti az eredményt. A SlideSize.setSize metódust a SlideSizeScaleType.DoNotScale értékkel használja, hogy a későbbi ciklus szabályozza a méretezést. Az arányok dimenzió nélküli értékek; az alakzat pozíciói és méretei pontban vannak mérve. 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 com.aspose.slides.*;

Presentation presentation = new Presentation("sample.pptx");
try {
    // Számolja ki a független vízszintes és függőleges méretezési tényezőket.
    float originalWidth = (float) presentation.getSlideSize().getSize().getWidth();
    float originalHeight = (float) presentation.getSlideSize().getSize().getHeight();
    presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale);
    float widthRatio = (float) presentation.getSlideSize().getSize().getWidth() / originalWidth;
    float heightRatio = (float) presentation.getSlideSize().getSize().getHeight() / originalHeight;

    for (ISlide slide : presentation.getSlides()) {
        for (IShape shape : slide.getShapes()) {
            shape.setWidth(shape.getWidth() * widthRatio);
            shape.setHeight(shape.getHeight() * heightRatio);
            shape.setX(shape.getX() * widthRatio);
            shape.setY(shape.getY() * heightRatio);
        }
    }

    presentation.save("output.pptx", SaveFormat.Pptx);
}
finally {
    presentation.dispose();
}

A második példa támogatja a táblázatokat, és a méretezett bemutató mentése előtt a mestereken, elrendezéseken és az egyedi diákon lévő alakzatokat is feldolgozza. Segédfüggvénye minden ITable elemet úgy kezel, hogy az oszlopszélességeket a IColumn.setWidth metódussal, a minimális sormagasságokat pedig a IRow.setMinimalHeight metódussal méretezi. Ezután a táblázat pozícióját méretezi anélkül, hogy külön méretezné a táblázat teljes méreteit.

import com.aspose.slides.*;

class ShapeResizer {
    void resizeShapes(IShapeCollection shapes, float widthRatio, float heightRatio) {
        for (IShape shape : shapes) {
            if (shape instanceof ITable) {
                ITable table = (ITable) shape;
                // A táblázat méreteit az oszlopszélességek és a sormagasságok szabályozzák.
                for (IColumn column : table.getColumns()) {
                    column.setWidth(column.getWidth() * widthRatio);
                }

                for (IRow row : table.getRows()) {
                    row.setMinimalHeight(row.getMinimalHeight() * heightRatio);
                }
            }
            else {
                shape.setWidth(shape.getWidth() * widthRatio);
                shape.setHeight(shape.getHeight() * heightRatio);
            }

            shape.setX(shape.getX() * widthRatio);
            shape.setY(shape.getY() * heightRatio);
        }
    }
}

Presentation presentation = new Presentation("sample.pptx");
try {
    // Számolja ki a független vízszintes és függőleges méretezési tényezőket.
    float originalWidth = (float) presentation.getSlideSize().getSize().getWidth();
    float originalHeight = (float) presentation.getSlideSize().getSize().getHeight();
    presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale);
    float widthRatio = (float) presentation.getSlideSize().getSize().getWidth() / originalWidth;
    float heightRatio = (float) presentation.getSlideSize().getSize().getHeight() / originalHeight;

    ShapeResizer resizer = new ShapeResizer();

    // A mestereken és elrendezéseken, valamint az egyedi diákon definiált alakzatok átméretezése.
    for (IMasterSlide master : presentation.getMasters()) {
        resizer.resizeShapes(master.getShapes(), widthRatio, heightRatio);

        for (ILayoutSlide layoutSlide : master.getLayoutSlides()) {
            resizer.resizeShapes(layoutSlide.getShapes(), widthRatio, heightRatio);
        }
    }

    for (ISlide slide : presentation.getSlides()) {
        resizer.resizeShapes(slide.getShapes(), widthRatio, heightRatio);
    }

    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 az alakzatok méretezése nélkül változtatja, azok megtartják eredeti pozíciójukat és méretüket, és túlnyúlhatnak a diához. A szélesség és magasság eltérő arányokkal való méretezése szintén torzíthatja az alakzatokat.

Működik a megadott kód minden alakzattípus esetén?
Az első példa közvetlenül módosítja az alakzat határait, és olyan diákra vonatkozik, amelyek nem tartalmaznak táblázatokat. A második példa külön kezeli a táblázatokat. Ellenőrizze 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?
Méretezze az oszlopszélességeket a szélességarány szerint, a minimális sormagasságokat a magasságarány szerint, majd méretezze a táblázat pozícióját, ahogy a második példában látható.

Ez az átméretezés működik-e a mesterdiákon és elrendezésdiákon?
Igen. A második példa bejárja a Presentation.getMasters és minden mester IMasterSlide.getLayoutSlides elemeit, és ugyanazt az átméretezési logikát alkalmazza az alakzatokra.

Megváltoztathatom a dia orientációját (álló/fekvő) az átméretezés során?
Igen. Hívja meg a SlideSize.setOrientation metódust a dia méretének módosítása után és a célméretek beolvasása előtt, hogy a méretezési tényezők tükrözzék a végső orientációt.

Van korlát a beállítható dia méretre?
Az egyéni dia méreteket a SlideSize.setSize metódussal adhatja meg. 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álja ugyanazt a méretezési tényezőt a szélességre és a magasságra. Az eredeti elrendezés új dia méretekhez való igazításához a szélesség- és magasságarányok közül a kisebbet alkalmazza mindkét dimenzióra és pozícióra. Ez megőrzi az arányokat, de egyes széleken üres helyet hagyhat.