حفظ العروض التقديمية في بايثون عبر جافا
نظرة عامة
بعد إنشاء عرض تقديمي أو فتح عرض تقديمي موجود، استخدم طريقة 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 قبل الحفظ.
المثال التالي يكوّن عرض 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()
حفظ العروض التقديمية بصيغة Office Open XML الصارمة
لإنشاء ملف PPTX يتوافق مع ملف التعريف الصارم لـ 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 يستخدم 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()
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 jpade
import asposeslides
if not jpade.isJVMStarted():
jpade.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 (PowerPoint Splitter) مبنية على Aspose.Slides API. تقوم بحفظ الشرائح المحددة من عرض تقديمي كملفات PPT أو PPTX منفصلة.الأسئلة المتكررة
هل تدعم Aspose.Slides الحفظ التدريجي أو “الحفظ السريع”?
لا. كل عملية حفظ تكتب ملفًا كاملاً بدلاً من تحديث الأجزاء المتغيرة فقط.
هل يمكن لعدة خيوط حفظ نفس كائن Presentation؟
لا. كائن Presentation غير آمن للخيوط (is not thread-safe). ينبغي الوصول إلى كل كائن وحفظه من خيط واحد فقط في كل مرة.
ماذا يحدث للروابط التشعبية والملفات المرتبطة خارجيًا عندما أحفظ عرضًا تقديميًا؟
تبقى الروابط التشعبية في العرض. لا تقوم Aspose.Slides بنسخ الملفات المرتبطة خارجيًا، لذلك يجب أن يظل العرض المحفوظ قادرًا على الوصول إلى مواقعها.
هل يمكنني حفظ بيانات تعريف المستند مثل المؤلف والعنوان والشركة وتاريخ الإنشاء؟
نعم. عيّن خصائص المستند المناسبة قبل الحفظ، وستكتب Aspose.Slides هذه الخصائص إلى ملف الإخراج.