Apply or Change Slide Layouts in Python via Java

ภาพรวม

เค้าโครงสไลด์กำหนดตำแหน่งและการจัดรูปแบบของตัวยึดต่าง ๆ เช่น ชื่อเรื่อง, ข้อความ, รูปภาพ, แผนภูมิ, และตาราง การใช้เค้าโครงทำให้สไลด์มีโครงสร้างที่สอดคล้องกันในขณะเดียวกันยังให้แต่ละสไลด์สามารถมีเนื้อหาเฉพาะของตนได้

  • สไลด์หัวข้อ: มีตัวยึดหัวเรื่องและหัวเรื่องย่อย
  • หัวเรื่องและเนื้อหา: มีตัวยึดหัวเรื่องและตัวยึดเนื้อหาทั่วไป
  • ว่าง: ไม่มีตัวยึดเนื้อหาและมีประโยชน์เมื่อทุกรูปทรงจะถูกจัดตำแหน่งด้วยตนเอง

ทำความเข้าใจการสืบทอดเค้าโครง

งานนำเสนอมีระดับที่เกี่ยวข้องสามระดับ:

  1. A สไลด์แม่ กำหนดธีม, การจัดรูปแบบร่วม, พื้นหลัง, และออบเจ็กต์ที่ใช้ร่วมกัน
  2. A สไลด์เค้าโครง อยู่ภายใต้สไลด์แม่และกำหนดการจัดเรียงตัวยึดเฉพาะ
  3. A สไลด์ปกติ ใช้เค้าโครงหนึ่งแบบและเก็บเนื้อหาที่ป้อนเข้ามาสำหรับสไลด์นั้น

สไลด์ปกติสืบทอดธีมและการจัดรูปแบบจากเค้าโครงของมัน, ส่วนเค้าโครงสืบทอดจากสไลด์แม่ ค่าที่ตั้งโดยตรงบนสไลด์ปกติจะลบค่าที่สืบทอดไว้ในระดับนั้นออก เมื่อสไลด์ปกติถูกสร้างขึ้น, รูปทรงตัวยึดของมันจะถูกสร้างจากเค้าโครงที่เลือก, ในขณะที่เนื้อหาที่ป้อนเข้าไปในตัวยึดเหล่านั้นเป็นของสไลด์ปกติ

เพิ่มตัวยึดที่จำเป็นลงในเค้าโครงก่อนสร้างสไลด์จากมัน การเพิ่มตัวยึดใหม่ในเค้าโครงภายหลังจะไม่เพิ่มรูปทรงตัวยึดที่สอดคล้องบนสไลด์ปกติที่มีอยู่โดยอัตโนมัติ

ความสัมพันธ์นี้มีผลสำคัญสองประการ:

  • การเปลี่ยนแปลงการจัดรูปแบบที่สืบทอดหรือรูปทรงตัวยึดที่มีอยู่บนเค้าโครงสามารถอัปเดตสไลด์ทั้งหมดที่พึ่งพาได้ ก่อนแก้ไขเค้าโครงที่กำลังใช้อยู่, ตรวจสอบสไลด์ที่พึ่งพาและตรวจทานผลลัพธ์ของการนำเสนอ
  • เค้าโครงที่ยังคงถูกสไลด์ใช้ไม่สามารถลบได้ ต้องกำหนดสไลด์ที่พึ่งพาไปยังเค้าโครงอื่นก่อน, หรือทำการลบเฉพาะเค้าโครงที่ไม่ได้ใช้

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับระดับบนสุดของลำดับชั้นนี้, ดูที่ Slide Master

เพื่อซ่อนโลโก้หรือรูปแบบสไลด์แม่ที่สืบทอดบนสไลด์หนึ่งหรือผ่านเค้าโครงที่ใช้ร่วมกัน, ดูที่ Control the Visibility of Master Graphics ตัวอย่างเปรียบเทียบสองสไลด์ที่ใช้สไลด์แม่เดียวกัน

เลือกและใช้เค้าโครงสไลด์

ใช้ประเภทเค้าโครงเมื่อการนำเสนอปฏิบัติตามคำนิยามเค้าโครง PowerPoint มาตรฐาน ชื่อเค้าโครงสามารถแก้ไขได้โดยผู้ใช้และสามารถแปลเป็นภาษาอื่นได้, ดังนั้นการเลือกโดยอิงชื่อจะน่าเชื่อถือน้อยกว่าถ้าคุณไม่ควบคุมเทมเพลตต้นฉบับ

ตัวอย่างต่อไปมองหา Title and Content บนสไลด์แม่แรก หากเค้าโครงนั้นไม่มีอยู่, จะย้อนกลับไปใช้ Blank อย่างตั้งใจ การตรวจสอบครั้งที่สองสำหรับ None จำเป็นเพราะงานนำเสนออาจมีเฉพาะเค้าโครงที่กำหนดเองเท่านั้น เค้าโครงที่เลือกจะถูกนำไปใช้กับสไลด์ปกติแรกผ่านเมธอด Slide.setLayoutSlide

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, SlideLayoutType

presentation = Presentation("input.pptx")
try:
    layout_slides = presentation.getMasters().get_Item(0).getLayoutSlides()
    target_layout = layout_slides.getByType(SlideLayoutType.TitleAndObject)

    if target_layout is None:
        target_layout = layout_slides.getByType(SlideLayoutType.Blank)

    if target_layout is None:
        print("The first master does not contain a suitable layout slide.")
    else:
        presentation.getSlides().get_Item(0).setLayoutSlide(target_layout)
        presentation.save("output-with-new-layout.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

การเปลี่ยนเค้าโครงของสไลด์ไม่ทำลายรูปทรงทั่วไปที่เพิ่มโดยตรงบนสไลด์ อย่างไรก็ตามตำแหน่งตัวยึด, การจัดรูปแบบที่สืบทอด, และความสอดคล้องระหว่างตัวยึดที่มีอยู่กับเค้าโครงใหม่อาจเปลี่ยนแปลงได้ ดังนั้นควรตรวจสอบผลลัพธ์เมื่อสลับระหว่างเค้าโครงที่แตกต่างอย่างมาก

เพิ่มสไลด์เค้าโครง

การเลือกและการสร้างเป็นการดำเนินการแยกจากกัน ตัวอย่างก่อนหน้านี้เลือกเค้าโครงที่มีอยู่; มันไม่ได้สร้างเค้าโครงใหม่ เพื่อสร้างเค้าโครง, เรียกเมธอด MasterLayoutSlideCollection.add บนคอลเลกชันเค้าโครงของสไลด์แม่เป้าหมาย

ตัวอย่างต่อไปนี้จะเพิ่มเค้าโครง Title and Content ใหม่ที่ชื่อ Report Title and Content เสมอ, จากนั้นเพิ่มสไลด์ปกติที่อิงจากเค้าโครงนั้น ชื่อเค้าโครงต้องเป็นเอกลักษณ์ภายในคอลเลกชัน

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, SlideLayoutType

presentation = Presentation("input.pptx")
try:
    master_slide = presentation.getMasters().get_Item(0)
    report_layout = master_slide.getLayoutSlides().add(SlideLayoutType.TitleAndObject, "Report Title and Content")
    presentation.getSlides().addEmptySlide(report_layout)

    presentation.save("output-with-report-layout.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

เพิ่มเค้าโครงเฉพาะเมื่อเทมเพลตต้องการโครงสร้างที่ใช้ซ้ำได้จริง หากมีเค้าโครงที่เหมาะสมอยู่แล้ว, ให้เลือกและใช้ซ้ำแทนการสร้างสำเนา

เพิ่มตัวยึดในสไลด์เค้าโครง

เมธอด LayoutSlide.getPlaceholderManager ให้บริการ LayoutPlaceholderManager สำหรับการเพิ่มรูปทรงตัวยึดลงในเค้าโครง

ตัวยึด PowerPoint เมธอด LayoutPlaceholderManager
เนื้อหา addContentPlaceholder
เนื้อหา (แนวตั้ง) addVerticalContentPlaceholder
ข้อความ addTextPlaceholder
ข้อความ (แนวตั้ง) addVerticalTextPlaceholder
รูปภาพ addPicturePlaceholder
แผนภูมิ addChartPlaceholder
ตาราง addTablePlaceholder
SmartArt addSmartArtPlaceholder
สื่อ addMediaPlaceholder
รูปภาพออนไลน์ addOnlineImagePlaceholder

ตัวอย่างต่อไปนี้ตรวจสอบว่าเค้าโครง Blank มีอยู่, เพิ่มตัวยึดสี่รายการลงในมัน, แล้วสร้างสไลด์ปกติที่ใช้เค้าโครงที่แก้ไขแล้ว ลำดับนี้ตั้งใจให้เพิ่มตัวยึดก่อนสร้างสไลด์ปกติ เพื่อให้ Aspose.Slides สามารถสร้างรูปทรงตัวยึดที่สอดคล้องบนสไลด์นั้น

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, SlideLayoutType

presentation = Presentation()
try:
    blank_layout = presentation.getLayoutSlides().getByType(SlideLayoutType.Blank)

    if blank_layout is None:
        print("The presentation does not contain a Blank layout slide.")
    else:
        placeholder_manager = blank_layout.getPlaceholderManager()
        placeholder_manager.addContentPlaceholder(20, 20, 310, 270)
        placeholder_manager.addVerticalTextPlaceholder(350, 20, 350, 270)
        placeholder_manager.addChartPlaceholder(20, 310, 310, 180)
        placeholder_manager.addTablePlaceholder(350, 310, 350, 180)

        presentation.getSlides().addEmptySlide(blank_layout)
        presentation.save("output-with-placeholders.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

ผลลัพธ์:

ตัวยึดบนสไลด์เค้าโครง

ลบสไลด์เค้าโครงที่ไม่ได้ใช้

ใช้เมธอด Compress.removeUnusedLayoutSlides เพื่อลบเค้าโครงที่ไม่มีสไลด์ปกติอ้างอิง เมธอดจะทิ้งเค้าโครงที่ยังคงใช้งานอยู่ไว้ไม่ถูกแก้ไข

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Compress, Presentation, SaveFormat

presentation = Presentation("input.pptx")
try:
    Compress.removeUnusedLayoutSlides(presentation)
    presentation.save("output-without-unused-layouts.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

เพื่อทำการลบเค้าโครงหนึ่งเฉพาะ, ก่อนอื่นใช้เมธอด hasDependingSlides หรือ getDependingSlides จากนั้นกำหนดสไลด์ที่พึ่งพาใหม่ก่อนเรียกเมธอด LayoutSlide.remove. การพยายามลบเค้าโครงที่ถูกใช้จะทำให้เกิด PptxEditException

ควบคุมการมองเห็นส่วนท้ายบนสไลด์เค้าโครง

เค้าโครงมีตัวยึดส่วนท้าย, หมายเลขสไลด์, และวันที่-เวลาเป็นของตนเอง ใช้เมธอด LayoutSlide.getHeaderFooterManager เพื่อควบคุมตัวยึดเหล่านี้สำหรับเค้าโครงหนึ่ง ซึ่งเป็นประโยชน์เมื่อตัวอย่างเช่น เค้าโครงเนื้อหาควรแสดงส่วนท้ายแต่เค้าโครงหัวเรื่องไม่ควรแสดง

ตัวอย่างต่อไปนี้เลือกเค้าโครงอย่างปลอดภัยและทำให้ส่วนท้ายของมันแสดงผล

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, SlideLayoutType

presentation = Presentation("input.pptx")
try:
    layout_slide = presentation.getLayoutSlides().getByType(SlideLayoutType.TitleAndObject)

    if layout_slide is None:
        layout_slide = presentation.getLayoutSlides().getByType(SlideLayoutType.Blank)

    if layout_slide is None:
        print("The presentation does not contain a suitable layout slide.")
    else:
        header_footer_manager = layout_slide.getHeaderFooterManager()
        header_footer_manager.setFooterVisibility(True)
        header_footer_manager.setSlideNumberVisibility(True)
        header_footer_manager.setDateTimeVisibility(True)
        header_footer_manager.setFooterText("Footer text")
        header_footer_manager.setDateTimeText("Date and time text")

        presentation.save("output-with-layout-footers.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

ควบคุมการมองเห็นส่วนท้ายบนสไลด์แม่และเค้าโครงลูกของมัน

เพื่อใช้การตั้งค่าส่วนท้ายอย่างสอดคล้องทั่วทั้งลำดับชั้นสไลด์แม่, ใช้เมธอด MasterSlide.getHeaderFooterManager วิธีการกระจายของ MasterSlideHeaderFooterManager ทำงานบนสไลด์แม่และสไลด์เค้าโครงและสไลด์ปกติที่พึ่งพา; ไม่ได้มุ่งเป้าแค่สไลด์ปกติหนึ่งสไลด์

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation("input.pptx")
try:
    header_footer_manager = presentation.getMasters().get_Item(0).getHeaderFooterManager()
    header_footer_manager.setFooterAndChildFootersVisibility(True)
    header_footer_manager.setSlideNumberAndChildSlideNumbersVisibility(True)
    header_footer_manager.setDateTimeAndChildDateTimesVisibility(True)
    header_footer_manager.setFooterAndChildFootersText("Footer text")
    header_footer_manager.setDateTimeAndChildDateTimesText("Date and time text")

    presentation.save("output-with-master-footers.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

คำถามที่พบบ่อย

ความแตกต่างระหว่างสไลด์แม่และสไลด์เค้าโครงคืออะไร?

สไลด์แม่กำหนดธีมและการจัดรูปแบบร่วมของงานนำเสนอ สไลด์เค้าโครงเป็นส่วนหนึ่งของสไลด์แม่และกำหนดการจัดเรียงตัวยึดที่สามารถใช้ซ้ำได้ สไลด์ปกติใช้เค้าโครงเหล่านั้นและเก็บเนื้อหาที่เฉพาะเจาะจงของสไลด์

ฉันสามารถคัดลอกสไลด์เค้าโครงจากงานนำเสนอหนึ่งไปยังอีกงานนำเสนอได้หรือไม่?

ได้ เพิ่มสำเนาเข้าไปในคอลเลกชันเป้าหมายด้วยเมธอด addClone เมื่อคัดลอกจากงานนำเสนอหนึ่งไปยังอีกงานนำเสนอหนึ่ง, ควรตรวจสอบฟอนต์, ธีม, รูปภาพ, และทรัพยากรอื่น ๆ ที่ใช้โดยเค้าโครงต้นฉบับด้วย

จะเกิดอะไรขึ้นเมื่อฉันแก้ไขเค้าโครงที่กำลังใช้งานอยู่?

สไลด์ที่พึ่งพาจะสืบทอดการเปลี่ยนแปลงของเค้าโครง เว้นแต่จะมีการเขียนทับการจัดรูปแบบหรือออบเจ็กต์ที่เกี่ยวข้องในระดับสไลด์เอง รูปทรงตัวยึดและสไตล์ที่สืบทอดอาจเปลี่ยนแปลงบนหลายสไลด์พร้อมกัน ใช้เมธอด getDependingSlides เพื่อตรวจสอบสไลด์ที่ได้รับผลกระทบก่อนแก้ไขเค้าโครง

จะเกิดอะไรขึ้นหากฉันลบเค้าโครงที่ยังคงถูกใช้งาน?

Aspose.Slides จะโยน PptxEditException ต้องกำหนดสไลด์ที่พึ่งพาไปยังเค้าโครงอื่นก่อน, หรือใช้เมธอด removeUnusedLayoutSlides เพื่อลบเฉพาะเค้าโครงที่ไม่มีการอ้างอิง