在 Python via Java 中調整簡報投影片的形狀大小
Contents
[
Hide
]
概覽
Aspose.Slides for Python via Java 客戶最常問的問題之一是如何調整形狀大小,使得在投影片尺寸變更時,資料不會被截斷。本文簡短技術說明將展示如何做到這一點。
調整形狀大小
為防止投影片尺寸變更時形狀位置錯位,請更新每個形狀的位置與尺寸,使其符合新的投影片佈局。
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SlideSizeType, SlideSizeScaleType, SlideOrientation
# 載入簡報檔案。
presentation = Presentation("sample.ppt")
try:
# 取得原始投影片尺寸。
current_height = presentation.getSlideSize().getSize().getHeight()
current_width = presentation.getSlideSize().getSize().getWidth()
# 在不縮放現有形狀的情況下變更投影片尺寸。
presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale)
# 取得新的投影片尺寸。
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 slide in presentation.getSlides():
for shape in slide.getShapes():
# 縮放形狀尺寸。
shape.setHeight(shape.getHeight() * height_ratio)
shape.setWidth(shape.getWidth() * width_ratio)
# 縮放形狀位置。
shape.setY(shape.getY() * height_ratio)
shape.setX(shape.getX() * width_ratio)
presentation.save("output.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
注意
表格不需要特別處理:設定表格的寬度與高度會按比例重新縮放其行與列,因此再度縮放行高與列寬會使比例套用兩次。上面的程式碼僅會變更投影片上的形狀。母片與版面配置投影片保有自己的形狀,若希望整個簡報遵循新的投影片尺寸,亦需同時對它們的形狀進行縮放:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SlideSizeType, SlideSizeScaleType, SlideOrientation
presentation = Presentation("sample.pptx")
try:
# 取得原始投影片尺寸。
current_height = presentation.getSlideSize().getSize().getHeight()
current_width = presentation.getSlideSize().getSize().getWidth()
# 在不縮放現有形狀的情況下變更投影片尺寸。
presentation.getSlideSize().setSize(SlideSizeType.A4Paper, SlideSizeScaleType.DoNotScale)
# presentation.getSlideSize().setOrientation(SlideOrientation.Portrait)
# 取得新的投影片尺寸。
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():
# 縮放形狀尺寸。
shape.setHeight(shape.getHeight() * height_ratio)
shape.setWidth(shape.getWidth() * width_ratio)
# 縮放形狀位置。
shape.setY(shape.getY() * height_ratio)
shape.setX(shape.getX() * width_ratio)
for layout_slide in master.getLayoutSlides():
for shape in layout_slide.getShapes():
# 縮放形狀尺寸。
shape.setHeight(shape.getHeight() * height_ratio)
shape.setWidth(shape.getWidth() * width_ratio)
# 縮放形狀位置。
shape.setY(shape.getY() * height_ratio)
shape.setX(shape.getX() * width_ratio)
for slide in presentation.getSlides():
for shape in slide.getShapes():
# 縮放形狀尺寸。
shape.setHeight(shape.getHeight() * height_ratio)
shape.setWidth(shape.getWidth() * width_ratio)
# 縮放形狀位置。
shape.setY(shape.getY() * height_ratio)
shape.setX(shape.getX() * width_ratio)
presentation.save("output.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
常見問題
為何在調整投影片大小後形狀會被扭曲或截斷?
在調整投影片尺寸時,形狀會保留原始位置與大小,除非明確改變縮放比例。這可能導致內容被裁切或形狀錯位。
提供的程式碼是否適用於所有形狀類型?
是的。設定高度與寬度同樣適用於文字方塊、影像、圖表以及表格等。
在調整投影片時,如何調整表格大小?
直接縮放表格形狀本身,和其他形狀一樣。其行列會比例跟隨縮放,請勿在之後再次分別縮放行高或列寬。
此調整方式是否適用於母片與版面配置投影片?
是的,但您也應該遍歷 Presentation.getMasters 與 Presentation.getLayoutSlides,對它們的形狀套用相同的縮放邏輯,以確保簡報全體一致。
我可以在調整尺寸的同時更改投影片的方向(直式/橫式)嗎?
可以。您可以使用 SlideSize.setOrientation 變更方向,並確保相應調整縮放邏輯以維持版面配置。
投影片尺寸有上限嗎?
Aspose.Slides 支援自訂尺寸,但過大的尺寸可能會影響效能或與某些 PowerPoint 版本的相容性。
如何避免固定長寬比的形狀被扭曲?
在縮放前可檢查形狀鎖定的 getAspectRatioLocked 方法。若已鎖定,請比例調整寬度或高度,而非分別縮放。