Alakzatok átméretezése a prezentációs diákon
Áttekintés
Az Aspose.Slides for Java ügyfelei leggyakrabban azt kérdezik, 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 lehet ezt megvalósítani.
Alakzatok átméretezése
Az alakzatok eltolódásának elkerülése érdekében, amikor a dia mérete változik, frissíteni kell minden alakzat pozícióját és méreteit, hogy azok megfeleljenek az új diaelrendezésnek.
// Töltsd be a prezentációs fájlt.
Presentation presentation = new Presentation("sample.ppt");
try {
// Szerezd meg az eredeti dia méretét.
float currentHeight = (float) presentation.getSlideSize().getSize().getHeight();
float currentWidth = (float) presentation.getSlideSize().getSize().getWidth();
// Módosítsd a dia méretét a meglévő alakzatok skálázása nélkül.
presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale);
// Szerezd meg az új dia méretét.
float newHeight = (float) presentation.getSlideSize().getSize().getHeight();
float newWidth = (float) presentation.getSlideSize().getSize().getWidth();
float heightRatio = newHeight / currentHeight;
float widthRatio = newWidth / currentWidth;
// Átméretezd és áthelyezd az alakzatokat minden dián.
for (ISlide slide : presentation.getSlides()) {
for (IShape shape : slide.getShapes()) {
// Skálázd az alakzat méretét.
shape.setHeight(shape.getHeight() * heightRatio);
shape.setWidth(shape.getWidth() * widthRatio);
// Skálázd az alakzat pozícióját.
shape.setY(shape.getY() * heightRatio);
shape.setX(shape.getX() * widthRatio);
}
}
presentation.save("output.pptx", SaveFormat.Pptx);
}
finally {
presentation.dispose();
}
Használja a következő kódot a saját oldalon 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 speciális eset: egyedi sormagasságokat és oszlopszélességeket kell módosítani a táblázat teljes méretének megváltoztatásához.
Presentation presentation = new Presentation("sample.pptx");
try {
// Szerezd meg az eredeti dia méretét.
float currentHeight = (float) presentation.getSlideSize().getSize().getHeight();
float currentWidth = (float) presentation.getSlideSize().getSize().getWidth();
// Módosítsd a dia méretét a meglévő alakzatok skálázása nélkül.
presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale);
// presentation.getSlideSize().setOrientation(SlideOrientation.Portrait);
// Szerezd meg az új dia méretét.
float newHeight = (float) presentation.getSlideSize().getSize().getHeight();
float newWidth = (float) presentation.getSlideSize().getSize().getWidth();
float heightRatio = newHeight / currentHeight;
float widthRatio = newWidth / currentWidth;
for (IMasterSlide master : presentation.getMasters()) {
for (IShape shape : master.getShapes()) {
// Skálázd az alakzat méretét.
shape.setHeight(shape.getHeight() * heightRatio);
shape.setWidth(shape.getWidth() * widthRatio);
// Skálázd az alakzat pozícióját.
shape.setY(shape.getY() * heightRatio);
shape.setX(shape.getX() * widthRatio);
}
for (ILayoutSlide layoutSlide : master.getLayoutSlides()) {
for (IShape shape : layoutSlide.getShapes()) {
// Skálázd az alakzat méretét.
shape.setHeight(shape.getHeight() * heightRatio);
shape.setWidth(shape.getWidth() * widthRatio);
// Skálázd az alakzat pozícióját.
shape.setY(shape.getY() * heightRatio);
shape.setX(shape.getX() * widthRatio);
}
}
}
for (ISlide slide : presentation.getSlides()) {
for (IShape shape : slide.getShapes()) {
// Skálázd az alakzat méretét.
shape.setHeight(shape.getHeight() * heightRatio);
shape.setWidth(shape.getWidth() * widthRatio);
// Skálázd az alakzat pozícióját.
shape.setY(shape.getY() * heightRatio);
shape.setX(shape.getX() * widthRatio);
if (shape instanceof ITable) {
ITable table = (ITable) shape;
for (int i = 0; i < table.getRows().size(); i++) {
IRow row = table.getRows().get_Item(i);
row.setMinimalHeight(row.getMinimalHeight() * heightRatio);
}
for (int j = 0; j < table.getColumns().size(); j++) {
IColumn column = table.getColumns().get_Item(j);
column.setWidth(column.getWidth() * widthRatio);
}
}
}
}
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?
A dia átméretezésekor az alakzatok megtartják eredeti pozíciójukat és méretüket, hacsak a méretezést nem módosítják kifejezetten. Ez tartalomlevágáshoz vagy alakzatok eltolódásához vezethet.
Működik a megadott kód minden alakzattípusra?
Az egyszerű példa a legtöbb alakzattípusra (szövegdobozok, képek, diagramok stb.) alkalmazható. Azonban táblázatok esetén a sorokat és oszlopokat külön kell kezelni, mivel a táblázat magassága és szélessége az egyes cellák méreteiből adódik.
Hogyan lehet átméretezni a táblázatokat a dia átméretezésekor?
A táblázat összes sorát és oszlopát át kell iterálni, és a magasságukat illetve szélességüket arányosan kell átméretezni, ahogyan a második kódrészletben látható.
Ez az átméretezés működik-e mesterdiákon és elrendezési diákon?
Igen, de a Mesterek és a Elrendezési diák is be kell járni, és ugyanazt a méretezési logikát alkalmazni kell az ő alakzataikra is, hogy a teljes bemutató konzisztens maradjon.
Megváltoztathatom a dia tájolását (álló/landscape) az átméretezés közben?
Igen. Használhatja a presentation.getSlideSize().setOrientation metódust a tájolás módosításához. Győződjön meg róla, hogy a méretezési logikát ennek megfelelően állítja be a layout megőrzéséhez.
Van korlátozás a beállítható dia méretre?
Az Aspose.Slides egyéni méreteket támogat, de a nagyon nagy méretek befolyásolhatják a teljesítményt vagy a kompatibilitást egyes PowerPoint-verziókkal.
Hogyan akadályozhatom meg, hogy a rögzített képarányú alakzatok torzuljanak?
A méretezés előtt ellenőrizze a forma getAspectRatioLocked metódusát. Ha zárolt, a szélességet vagy magasságot arányosan kell módosítani, ahelyett, hogy egyenként skálázná őket.