Alakzatok átméretezése a bemutató diákon Java-ban
Áttekintés
Ha megváltoztatja a bemutató dia méretét, előfordulhat, hogy át kell méretezni és újra kell helyezni az alakzatokat az új méretekhez igazodva. Ez a cikk bemutatja, hogyan méretezhetőek kézzel az alakzatok, és hogyan kezelhetők a táblák a diákon, mesterdiákon és elrendezésekben.
Alakzatok átméretezése
Az egyes alakzatok relatív pozíciójának és méretének megőrzése érdekében szorozza meg a vízszintes koordinátákat és a szélességet az új dia szélességének és az eredeti szélességnek az 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ölti azt a bemutatót, amely diái nem tartalmaznak táblákat, A4-re változtatja a dia méretét, majd elmenti az eredményt. A SlideSize.setSize metódust használja a SlideSizeScaleType.DoNotScale értékkel, hogy a későbbi ciklus vezérelje a méretezést. Az arányok mértékegysé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 com.aspose.slides.*;
import java.awt.geom.Dimension2D;
Presentation presentation = new Presentation("sample.pptx");
try {
// Számítsa ki a független vízszintes és függőleges méretezési tényezőket.
Dimension2D originalSize = presentation.getSlideSize().getSize();
presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale);
Dimension2D targetSize = presentation.getSlideSize().getSize();
float widthRatio = (float) (targetSize.getWidth() / originalSize.getWidth());
float heightRatio = (float) (targetSize.getHeight() / originalSize.getHeight());
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();
}
Note
A táblákat külön kell kezelni: a oszlopok szélességét és a sorok magasságát kell méretezni a tábla teljes szélességének és magasságának hozzárendelése helyett. A sormagasságok nagyobbak lehetnek a kért értéknél, ha a cella tartalma több helyet igényel.A második példa támogatja a táblákat, és a mester- és elrendezési dia alakzatait, valamint az egyedi diák alakzatait is feldolgozza az átméretezett bemutató mentése előtt. A segítője minden ITable esetén az oszlopszélességeket a IColumn.setWidth metódussal, a minimális sormagasságokat pedig az IRow.setMinimalHeight metódussal méretezi. Ezután a tábla pozícióját méretezi, anélkül, hogy külön méretezné a teljes dimenziókat.
import com.aspose.slides.*;
import java.awt.geom.Dimension2D;
class ShapeResizer {
void resizeShapes(IShapeCollection shapes, float widthRatio, float heightRatio) {
for (IShape shape : shapes) {
if (shape instanceof ITable) {
ITable table = (ITable) shape;
// A tábla méreteit az oszlopszélességek és sormagasságok határozzák meg.
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ámítsa ki a független vízszintes és függőleges méretezési tényezőket.
Dimension2D originalSize = presentation.getSlideSize().getSize();
presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale);
Dimension2D targetSize = presentation.getSlideSize().getSize();
float widthRatio = (float) (targetSize.getWidth() / originalSize.getWidth());
float heightRatio = (float) (targetSize.getHeight() / originalSize.getHeight());
ShapeResizer resizer = new ShapeResizer();
// Átméretezze a mesterek és elrendezések, valamint az egyéni diák által definiált alakzatokat.
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 a alakzatok méretezése nélkül változtatja, azok megőrzik eredeti pozíciójukat és méretüket, és a dia határain túlnyúlhatnak. A szélesség és magasság különböző arányokkal való méretezése 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 alakzatok korlátait, és olyan diákra van szánva, amelyek nem tartalmaznak táblákat. A második példa külön kezeli a táblákat. Ellenőrizze az eredményes elrendezést, különösen a szöveget és a táblákat, mivel ezek a példák nem méreteznek betűméreteket, és a tábla tartalma korlátozhatja a sormagasságokat.
Hogyan méretezhetem át a táblákat, amikor egy diát átméretezek?
A szélességarány segítségével méretezze az oszlopszélességeket, a magasságarány segítségével a minimális sormagasságokat, majd a tábla pozícióját méretezze, ahogy a második példában látható.
Ez az átméretezés működik a mesterdiák és az elrendezésdiák esetén?
Igen. A második példa végigiterál a Presentation.getMasters és az egyes mesterdiák IMasterSlide.getLayoutSlides metódusain, majd ugyanazt az átméretezési logikát alkalmazza az alakzataikra.
Megváltoztathatom egy dia tájolását (álló/fekvő) az átméretezéssel együtt?
Igen. Hívja a SlideSize.setOrientation metódust a dia méretének megváltoztatása után, és a célméretek beolvasása előtt, hogy a méretezési tényezők a végső tájolást tükrözzék.
Van korláta a beállítható dia méretnek?
A SlideSize.setSize metódussal egyedi dia méreteket adhat 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 méretarányú alakzatok torzuljanak?
Használja ugyanazt a méretezési tényezőt a szélességhez és a magassághoz. Az eredeti elrendezés új dia méretekhez való illesztéséhez a szélesség és magasság arányai közül a kisebbet alkalmazza mind a méretekre, mind a pozíciókra. Ez megőrzi az arányokat, de előfordulhat, hogy az egyik élén üres hely marad.