ذخیرهٔ ارائه‌ها در پایتون از طریق جاوا

نمای کلی

بعد از ایجاد یک ارائه یا باز کردن یک ارائه موجود، از روش Presentation.save برای نوشتن نتایج استفاده کنید. Aspose.Slides for Python via 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 استاندارد اندازهٔ فشرده‌شده و غیر فشردهٔ هر ورودی، اندازهٔ کل آرشیو و تعداد ورودی‌ها را محدود می‌کند. از آنجایی که فایل PPTX یک آرشیو ZIP است، یک ارائهٔ بسیار بزرگ می‌تواند این محدودیت‌ها را نقض کند. افزونه‌های ZIP64 این محدودیت‌ها را افزایش می‌دهند.

از روش PptxOptions.setZip64Mode برای کنترل نوشتن افزونه‌های ZIP64 توسط Aspose.Slides استفاده کنید:

  • IfNecessary فقط هنگام عبور از محدودیت‌های ZIP استاندارد از ZIP64 استفاده می‌کند. این حالت پیش‌فرض است.
  • 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()

گزارش پیشرفت ذخیره به صورت درصد

برای مانیتور کردن عملیات ذخیره، یک هندلر پیشرفت پایتون را از طریق 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 از ذخیره افزایشی یا «ذخیره سریع» پشتیبانی می‌کند؟

خیر. هر عملیات ذخیره یک فایل خروجی کامل می‌نویسد نه اینکه فقط بخش‌های تغییر یافته را به‌روز کند.

آیا چندین ریسه می‌توانند یک نمونهٔ Presentation را ذخیره کنند؟

خیر. یک نمونهٔ Presentation thread-safe نیست. هر نمونه باید فقط از یک ریسه در هر زمان دسترسی و ذخیره شود.

چه اتفاقی برای پیوندهای فراخوانی و فایل‌های پیوندی خارجی هنگام ذخیرهٔ یک ارائه می‌افتد؟

Hyperlinks در ارائه باقی می‌مانند. Aspose.Slides فایل‌های پیوندی خارجی را کپی نمی‌کند، بنابراین ارائه ذخیره‌شده باید همچنان قادر به دسترسی به مکان‌های آن‌ها باشد.

آیا می‌توانم متادیتای سند مانند نویسنده، عنوان، شرکت و تاریخ ایجاد را ذخیره کنم؟

بله. قبل از ذخیره، document properties مناسب را تنظیم کنید و Aspose.Slides آن‌ها را در فایل خروجی می‌نویسد.