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()
Megjegyzés
A táblázatoknak nincs különleges kezelése: a táblázat szélességének és magasságának beállítása arányosan átméretezi az oszlopait és sorait, így ezek újraméretezése ugyanazt a hányadost alkalmazná kétszer.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.