บันทึกงานพรีเซนเทชันใน Python ผ่าน Java

ภาพรวม

หลังจากคุณสร้างงานพรีเซนเทชันหรือเปิดงานที่มีอยู่แล้ว, ให้ใช้เมธอดPresentation.saveเพื่อเขียนผลลัพธ์ Aspose.Slides สำหรับ Python ผ่าน Java สามารถบันทึกงานพรีเซนเทชันไปยังไฟล์หรือสตรีมในรูปแบบ PowerPoint, OpenDocument, PDF และรูปแบบอื่น ๆ ส่วนต่อไปนี้จะครอบคลุมการบันทึกมาตรฐานและตัวเลือกที่มีสำหรับการส่งออกเป็น PPTX

บันทึกงานพรีเซนเทชันไปยังไฟล์

เพื่อบันทึกงานพรีเซนเทชันไปยังไฟล์ ให้ส่งพาธของไฟล์ผลลัพธ์และค่าSaveFormatไปยังเมธอดPresentation.save ค่ารูปแบบจะกำหนดชนิดของไฟล์ที่ Aspose.Slides สร้างขึ้น

ตัวอย่างต่อไปนี้สร้างงานพรีเซนเทชันและบันทึกเป็นไฟล์ PPTX:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    # เพิ่มหรือแก้ไขเนื้อหางานพรีเซนเทชันที่นี่.

    presentation.save("Output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

บันทึกงานพรีเซนเทชันในรูปแบบเดิมของมัน

ในแอปพลิเคชันการประมวลผลแบบแบตช์ รูปแบบอินพุตอาจไม่ทราบล่วงหน้า หลังจากโหลดไฟล์ ให้อ่านรูปแบบเดิมจากเมธอดPresentation.getSourceFormat ส่งค่าที่ได้ของSourceFormatไปยังเมธอดSlideUtil.toSaveFormatเพื่อรับค่าSaveFormatที่สอดคล้องกัน แล้วใช้เมธอดPresentation.saveเพื่อเขียนงานพรีเซนเทชันที่แก้ไขแล้ว

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

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SlideUtil
from pathlib import Path

IllegalArgumentException = jpype.JClass("java.lang.IllegalArgumentException")
input_directory = Path("Input")
output_directory = Path("Output")

try:
    output_directory.mkdir(parents=True, exist_ok=True)
except OSError:
    print("Cannot create the output directory.")

if input_directory.is_dir() and output_directory.is_dir():
    for input_file in input_directory.iterdir():
        if input_file.is_file():
            try:
                presentation = Presentation(str(input_file))
                try:
                    save_format = SlideUtil.toSaveFormat(presentation.getSourceFormat())
                    presentation.getDocumentProperties().setTitle("Processed by the batch application")

                    output_file = output_directory / input_file.name
                    presentation.save(str(output_file), save_format)
                finally:
                    presentation.dispose()
            except IllegalArgumentException as exception:
                print(f"Cannot map the source format of '{input_file}': {exception}")
            except Exception as exception:
                print(f"Cannot process '{input_file}': {exception}")

SlideUtil.toSaveFormat จะแมป PPT, PPTX, ODP, PPTM, PPSX, PPSM, POTX, POTM, PPS, POT, OTP, FODP และ PowerPoint XML ไปยังรูปแบบการบันทึกงานพรีเซนเทชันที่สอดคล้องกัน มันแมปเฉพาะรูปแบบแหล่งของงานพรีเซนเทชันเท่านั้น; ไม่ได้ออกแบบให้เลือกรูปแบบการส่งออกเช่น PDF, HTML, TIFF หรือรูปภาพ การส่งค่SourceFormatที่ไม่รองรับหรือไม่ถูกต้องจะทำให้เกิดIllegalArgumentException

ไฟล์ PPT, PPS, และ POT รุ่นเก่าใช้คอนเทนเนอร์ไบนารีเดียวกัน เมื่อโหลดงานพรีเซนเทชันแบบดังกล่าวจากสตรีมที่ไม่มีส่วนขยายของไฟล์, ไฟล์ PPS หรือ POT อาจถูกระบุว่าเป็น PPT หากต้องการรักษาชนิดย่อยรุ่นเก่าเหล่านี้ไว้ ควรเก็บชื่อไฟล์เดิมหรือเมทาดาต้ารูปแบบแยกจากกันและใช้เมื่อตั้งค่าชื่อไฟล์และรูปแบบเอาต์พุต

บันทึกงานพรีเซนเทชันไปยังสตรีม

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

ตัวอย่างต่อไปนี้บันทึกงานพรีเซนเทชันใหม่ไปยังสตรีมไฟล์:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

FileOutputStream = jpype.JClass("java.io.FileOutputStream")

presentation = Presentation()
try:
    output_stream = FileOutputStream("Output.pptx")
    try:
        presentation.save(output_stream, SaveFormat.Pptx)
    finally:
        output_stream.close()
finally:
    presentation.dispose()

บันทึกงานพรีเซนเทชันด้วยมุมมองที่กำหนดล่วงหน้า

คุณสามารถกำหนดมุมมองที่ PowerPoint จะเปิดงานพรีเซนเทชันที่บันทึกไว้เป็นค่าเริ่มต้นได้ ใช้เมธอดViewProperties.setLastViewพร้อมกับค่าViewTypeก่อนบันทึก

ตัวอย่างต่อไปนี้กำหนดให้มุมมอง Slide Master เป็นมุมมองเริ่มต้น:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat, ViewType

presentation = Presentation()
try:
    presentation.getViewProperties().setLastView(ViewType.SlideMasterView)
    presentation.save("SlideMasterView.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

บันทึกงานพรีเซนเทชันในรูปแบบ Strict Office Open XML

เพื่อสร้างไฟล์ PPTX ที่สอดคล้องกับโปรไฟล์ Strict ของ Office Open XML ให้สร้างอินสแตนซ์ของPptxOptionsและใช้เมธอดsetConformanceพร้อมกับค่าConformance.Iso29500_2008_Strict จากนั้นส่งตัวเลือกไปยังเมธอดPresentation.save

import jpype
import asposeslides

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

from asposeslides.api import Conformance, PptxOptions, Presentation, SaveFormat

options = PptxOptions()
options.setConformance(Conformance.Iso29500_2008_Strict)

presentation = Presentation()
try:
    presentation.save("StrictOfficeOpenXml.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

บันทึกงานพรีเซนเทชันในรูปแบบ Office Open XML ในโหมด Zip64

ไฟล์ ZIP มาตรฐานจำกัดขนาดบีบอัดและขนาดที่ไม่บีบอัดของแต่ละรายการ, ขนาดรวมของไฟล์ ZIP, และจำนวนรายการ เนื่องจากไฟล์ PPTX เป็นไฟล์ ZIP, งานพรีเซนเทชันขนาดใหญ่มากอาจเกินขีดจำกัดเหล่านี้ ส่วนขยาย ZIP64 จะเพิ่มขีดจำกัดขนาดและจำนวนรายการที่สามารถใช้ได้

ใช้เมธอดPptxOptions.setZip64Modeเพื่อควบคุมว่า Aspose.Slides จะเขียนส่วนขยาย ZIP64 หรือไม่:

  • IfNecessary ใช้ ZIP64 เฉพาะเมื่องานพรีเซนเทชันเกินขีดจำกัด ZIP มาตรฐาน นี่เป็นโหมดเริ่มต้น
  • Never ปิดการใช้งานส่วนขยาย ZIP64
  • Always เขียนส่วนขยาย ZIP64 เสมอ

ตัวอย่างต่อไปนี้เปิดใช้ส่วนขยาย ZIP64 เสมอสำหรับงานพรีเซนเทชันเอาต์พุต:

import jpype
import asposeslides

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

from asposeslides.api import PptxOptions, Presentation, SaveFormat, Zip64Mode

presentation = Presentation("Sample.pptx")
try:
    options = PptxOptions()
    options.setZip64Mode(Zip64Mode.Always)

    presentation.save("OutputZip64.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

บันทึกงานพรีเซนเทชันในรูปแบบ Office Open XML พร้อมระดับการบีบอัด

สำหรับการส่งออกเป็น PPTX คุณสามารถปรับสมดุลระหว่างความเร็วในการบันทึกและขนาดไฟล์โดยใช้เมธอดPptxOptions.setCompressionLevel คลาสCompressionLevel ให้ค่าต่อไปนี้:

  • None เก็บข้อมูลโดยไม่บีบอัด
  • Level1 ให้การบีบอัดที่เร็วที่สุดและผลลัพธ์บีบอัดที่มีขนาดใหญ่ที่สุด
  • Level2 ถึง Level5 ลดขนาดผลลัพธ์อย่างค่อยเป็นค่อยไปโดยให้ความสำคัญกับขนาดไฟล์มากกว่าความเร็วในการบันทึก
  • Level6 สมดุลระหว่างความเร็วในการบันทึกและขนาดไฟล์ นี่เป็นระดับค่าเริ่มต้น
  • Level7 และ Level8 ให้ความสำคัญกับขนาดไฟล์เล็กลงต่อไปเหนือความเร็วในการบันทึก
  • Level9 ให้การบีบอัดที่แรงที่สุดและต้องใช้เวลาประมวลผลมากที่สุด

ตัวอย่างต่อไปนี้บันทึกงานพรีเซนเทชันโดยไม่มีการบีบอัด:

import jpype
import asposeslides

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

from asposeslides.api import CompressionLevel, PptxOptions, Presentation, SaveFormat

presentation = Presentation("Sample.pptx")
try:
    options = PptxOptions()
    options.setCompressionLevel(CompressionLevel.None_)

    presentation.save("OutputNoCompression.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

ตัวอย่างต่อไปนี้ใช้ระดับการบีบอัดสูงสุด:

import jpype
import asposeslides

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

from asposeslides.api import CompressionLevel, PptxOptions, Presentation, SaveFormat

presentation = Presentation("Sample.pptx")
try:
    options = PptxOptions()
    options.setCompressionLevel(CompressionLevel.Level9)

    presentation.save("OutputMaximumCompression.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

บันทึกงานพรีเซนเทชันโดยไม่รีเฟรชรูปภาพย่อ

เมื่อบันทึกงานพรีเซนเทชันเป็น PPTX เมธอดPptxOptions.setRefreshThumbnail จะควบคุมรูปภาพย่อของเอกสาร:

  • True สร้างรูปภาพย่อใหม่ระหว่างการบันทึก นี่เป็นค่าเริ่มต้น
  • False รักษารูปภาพย่อเดิม หากงานพรีเซนเทชันไม่มีรูปภาพย่อ Aspose.Slides จะไม่สร้างขึ้น

ตัวอย่างต่อไปนี้บันทึกงานพรีเซนเทชันโดยไม่รีเฟรชรูปภาพย่อของมัน:

import jpype
import asposeslides

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

from asposeslides.api import PptxOptions, Presentation, SaveFormat

presentation = Presentation("Sample.pptx")
try:
    options = PptxOptions()
    options.setRefreshThumbnail(False)

    presentation.save("Output.pptx", SaveFormat.Pptx, options)
finally:
    presentation.dispose()

รายงานความคืบหน้าการบันทึกเป็นเปอร์เซ็นต์

เพื่อเฝ้าติดตามการดำเนินการบันทึก ให้ลงทะเบียนตัวจัดการความคืบหน้าของ Python ผ่าน jpype.JProxy และส่งให้เมธอดSaveOptions.setProgressCallback Aspose.Slides จะเรียกเมธอด reporting ของตัวจัดการพร้อมค่าความคืบหน้าในระหว่างการส่งออก

ตัวอย่างต่อไปนี้รายงานความคืบหน้าของการส่งออก PDF ไปยังคอนโซล:

import jpype
import asposeslides

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

from asposeslides.api import PdfOptions, Presentation, SaveFormat


class ExportProgressHandler:
    def reporting(self, progress_value):
        progress = int(progress_value)
        print(f"{progress}% of the file has been converted.")


handler = ExportProgressHandler()
callback = jpype.JProxy("com.aspose.slides.IProgressCallback", inst=handler)
options = PdfOptions()
options.setProgressCallback(callback)

presentation = Presentation("Sample.pptx")
try:
    presentation.save("Output.pdf", SaveFormat.Pdf, options)
finally:
    presentation.dispose()

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

Aspose.Slides รองรับการบันทึกแบบเพิ่มส่วนหรื “บันทึกเร็ว” หรือไม่?

No. แต่ละการบันทึกจะเขียนไฟล์ผลลัพธ์เต็มรูปแบบแทนการอัปเดตเฉพาะส่วนที่เปลี่ยนแปลง

สามารถหลายเธรดบันทึกอินสแตนซ์ Presentation เดียวกันได้หรือไม่?

No. อินสแตนซ์Presentation ไม่ได้ออกแบบให้ใช้พร้อมกับหลายเธรด ให้เข้าถึงและบันทึกแต่ละอินสแตนซ์จากหนึ่งเธรดเท่านั้น

เกิดอะไรขึ้นกับไฮเปอร์ลิงก์และไฟล์ที่เชื่อมโยงภายนอกเมื่อฉันบันทึกงานพรีเซนเทชัน?

Hyperlinks คงอยู่ในงานพรีเซนเทชัน Aspose.Slides ไม่ทำการคัดลอกไฟล์ที่เชื่อมโยงภายนอก ดังนั้นงานพรีเซนเทชันที่บันทึกต้องสามารถเข้าถึงตำแหน่งของไฟล์เหล่านั้นได้

ฉันสามารถบันทึกเมตาดาต้าเอกสารเช่น ผู้เขียน, ชื่อเรื่อง, บริษัท และวันที่สร้างได้หรือไม่?

ใช่. ตั้งค่าdocument properties ที่เหมาะสมก่อนบันทึก แล้ว Aspose.Slides จะเขียนค่าเหล่านั้นลงในไฟล์เอาต์พุต