ปรับขนาดรูปทรงบนสไลด์การนำเสนอใน Python ผ่าน Java

ภาพรวม

หนึ่งในคำถามที่พบบ่อยที่สุดจากลูกค้า 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 ของการล็อกรูปทรงก่อนทำการสเกล หากมันล็อกอยู่ ให้ปรับความกว้างหรือความสูงโดยอัตราส่วนเทียบกันแทนการสเกลแยกกัน