ذخیره ارائه‌ها در 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()

ذخیره ارائه‌ها در قالب اصلی خود

برای مثال‌های تشخیص فایل و جریان، رفتار ارائه‌های جدید ایجاد‌شده و تمایز بین قالب‌های منبع و خروجی، به Determine the Original Presentation Format مراجعه کنید.

در یک برنامهٔ پردازش دسته‌ای، قالب ورودی ممکن است از پیش شناخته‌شده نباشد. پس از بارگذاری یک فایل، قالب اصلی آن را از متد 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 می‌شود.

فایل‌های Legacy 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 برای کنترل اینکه آیا Aspose.Slides افزونه‌های Zip64 بنویسد یا نه، استفاده کنید:

  • 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()

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

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

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

آیا چند نخ می‌توانند همزمان همان شیء Presentation را ذخیره کنند؟

خیر. یک شیء Presentation ایمن برای چندنخی نیست (/slides/fa/python-java/multithreading/). هر شیء باید فقط از یک نخ در هر زمان دسترسی و ذخیره شود.

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

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

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

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