ذخیره ارائهها در 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()
Warning
اگر از Zip64Mode.Never استفاده شود و ارائه نتواند در محدودیتهای استاندارد ZIP جا بگیرد، عملیات ذخیرهسازی یک PptxException را پرتاب میکند.ذخیره ارائهها در قالب 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()
Note
غیرفعال کردن بهروزرسانی تصویر بندانگشتی میتواند زمان لازم برای ذخیره یک فایل PPTX را کاهش دهد.گزارش پیشرفت ذخیرهسازی به صورت درصد
برای نظارت بر عملیات ذخیرهسازی، یک هندلر پیشرفت 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()
Note
Aspose یک PowerPoint Splitter رایگان فراهم میکند که با API Aspose.Slides ساخته شده است. این ابزار اسلایدهای انتخابی را از یک ارائه بهصورت فایلهای جداگانهٔ PPT یا PPTX ذخیره میکند.پرسشهای متداول
آیا Aspose.Slides از ذخیرهسازی افزایشی یا «ذخیرهسازی سریع» پشتیبانی میکند؟
خیر. هر عملیات ذخیرهسازی یک فایل خروجی کامل مینویسد و فقط بخشهای تغییر یافته را به‑روز نمیکند.
آیا چند نخ میتوانند همزمان همان شیء Presentation را ذخیره کنند؟
خیر. یک شیء Presentation ایمن برای چندنخی نیست (/slides/fa/python-java/multithreading/). هر شیء باید فقط از یک نخ در هر زمان دسترسی و ذخیره شود.
هنگام ذخیرهٔ یک ارائه، چه اتفاقی برای پیوندهای فراگیر و فایلهای خارجی لینکدار میافتد؟
Hyperlinks در ارائه باقی میمانند. Aspose.Slides فایلهای خارجی را کپی نمیکند، بنابراین ارائهٔ ذخیرهشده باید همچنان قادر به دسترسی به مکانهای آنها باشد.
آیا میتوانم متادیتای سند مانند نویسنده، عنوان، شرکت و تاریخ ایجاد را ذخیره کنم؟
بله. قبل از ذخیره، ویژگیهای مناسب document properties را تنظیم کنید و Aspose.Slides آنها را در فایل خروجی مینویسد.