حفظ العروض التقديمية في Java
نظرة عامة
بعد إنشاء عرض تقديمي أو فتح عرض تقديمي موجود، استخدم طريقة Presentation.save لكتابة النتيجة. يمكن لـ Aspose.Slides for Java حفظ عرض تقديمي إلى ملف أو تدفق بصيغ PowerPoint و OpenDocument و PDF وصيغ أخرى. تغطي الأقسام التالية عمليات الحفظ القياسية والخيارات المتاحة لإخراج PPTX.
حفظ العروض التقديمية إلى ملفات
لحفظ عرض تقديمي إلى ملف، مرّر مسار الإخراج وقيمة SaveFormat إلى طريقة Presentation.save. تحدد قيمة التنسيق نوع الملف الذي تنشئه Aspose.Slides.
المثال التالي ينشئ عرضًا تقديميًا ويحفظه كملف PPTX:
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
Presentation presentation = new Presentation();
try {
// أضف أو عدّل محتوى العرض التقديمي هنا.
presentation.save("Output.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
حفظ العروض التقديمية بالتنسيق الأصلي لها
لأمثلة اكتشاف الملف والتدفق، سلوك العروض التقديمية التي تم إنشاؤها حديثًا، والتمييز بين تنسيقات المصدر والإخراج، راجع تحديد تنسيق العرض التقديمي الأصلي.
في تطبيق معالجة دفعات، قد لا يكون تنسيق الإدخال معروفًا مسبقًا. بعد تحميل ملف، اقرأ تنسيقه الأصلي من طريقة IPresentation.getSourceFormat . مرّر القيمة الناتجة من SourceFormat إلى طريقة SlideUtil.toSaveFormat للحصول على قيمة SaveFormat المقابلة، ثم استخدم طريقة Presentation.save لكتابة العرض المعدل.
المثال الكامل التالي يُعالج كل ملف في دليل إدخال، يُحدّث عنوانه، ويحفظه إلى دليل إخراج بالتنسيق الذي تم تحميله منه:
import com.aspose.slides.Presentation;
import com.aspose.slides.SlideUtil;
import java.io.File;
File inputDirectory = new File("Input");
File outputDirectory = new File("Output");
if (!outputDirectory.exists() && !outputDirectory.mkdirs()) {
System.err.println("Cannot create the output directory.");
}
File[] inputFiles = inputDirectory.listFiles(File::isFile);
if (inputFiles != null && outputDirectory.isDirectory()) {
for (File inputFile : inputFiles) {
try {
Presentation presentation = new Presentation(inputFile.getPath());
try {
int saveFormat = SlideUtil.toSaveFormat(presentation.getSourceFormat());
presentation.getDocumentProperties().setTitle("Processed by the batch application");
File outputFile = new File(outputDirectory, inputFile.getName());
presentation.save(outputFile.getPath(), saveFormat);
} finally {
presentation.dispose();
}
} catch (IllegalArgumentException exception) {
System.err.println("Cannot map the source format of '" + inputFile.getPath() + "': " + exception.getMessage());
} catch (Exception exception) {
System.err.println("Cannot process '" + inputFile.getPath() + "': " + exception.getMessage());
}
}
}
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 com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import java.io.FileOutputStream;
import java.io.OutputStream;
Presentation presentation = new Presentation();
try {
OutputStream outputStream = new FileOutputStream("Output.pptx");
try {
presentation.save(outputStream, SaveFormat.Pptx);
} finally {
outputStream.close();
}
} finally {
presentation.dispose();
}
حفظ العروض التقديمية بنوع عرض محدد مسبقًا
يمكنك تحديد العرض الذي يفتح به PowerPoint العرض المحفوظ أولاً. استخدم طريقة ViewProperties.setLastView مع قيمة ViewType قبل الحفظ.
المثال التالي يضبط عرض Master Slide كالعرض الأولي:
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ViewType;
Presentation presentation = new Presentation();
try {
presentation.getViewProperties().setLastView(ViewType.SlideMasterView);
presentation.save("SlideMasterView.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
حفظ العروض التقديمية بتنسيق Office Open XML الصارم
لإنشاء ملف PPTX يتوافق مع الملف التعريفي Strict لـ Office Open XML، أنشئ كائنًا من PptxOptions واستخدم طريقة setConformance مع Conformance.Iso29500_2008_Strict. ثم مرّر الخيارات إلى طريقة Presentation.save.
import com.aspose.slides.Conformance;
import com.aspose.slides.PptxOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
PptxOptions options = new PptxOptions();
options.setConformance(Conformance.Iso29500_2008_Strict);
Presentation presentation = new 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 com.aspose.slides.PptxOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.Zip64Mode;
Presentation presentation = new Presentation("Sample.pptx");
try {
PptxOptions options = new PptxOptions();
options.setZip64Mode(Zip64Mode.Always);
presentation.save("OutputZip64.pptx", SaveFormat.Pptx, options);
} finally {
presentation.dispose();
}
تحذير
إذا تم استخدام Zip64Mode.Never ولا يستطيع العرض أن يتناسب مع حدود ZIP القياسية، فإن عملية الحفظ ترمي استثناءً من نوع PptxException.حفظ العروض التقديمية بتنسيق Office Open XML مع مستويات الضغط
لإخراج PPTX، يمكنك موازنة سرعة الحفظ مقابل حجم الملف باستخدام طريقة PptxOptions.setCompressionLevel. توفر فئة CompressionLevel القيم التالية:
- None تخزن البيانات دون ضغط.
- Level1 يوفر أسرع ضغط وأكبر حجم مضغوط.
- Level2 حتى Level5 تفضّل تدريجيًا حجمًا أصغر على حساب سرعة الحفظ.
- Level6 يوازن بين سرعة الحفظ وحجم الملف. هذا هو المستوى الافتراضي.
- Level7 و Level8 تفضّلان حجمًا أصغر أكثر على حساب سرعة الحفظ.
- Level9 يوفر أقوى ضغط ويتطلب أكثر وقت معالجة.
المثال التالي يحفظ عرضًا تقديميًا بدون ضغط:
import com.aspose.slides.CompressionLevel;
import com.aspose.slides.PptxOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
Presentation presentation = new Presentation("Sample.pptx");
try {
PptxOptions options = new PptxOptions();
options.setCompressionLevel(CompressionLevel.None);
presentation.save("OutputNoCompression.pptx", SaveFormat.Pptx, options);
} finally {
presentation.dispose();
}
المثال التالي يستخدم أقصى مستوى ضغط:
import com.aspose.slides.CompressionLevel;
import com.aspose.slides.PptxOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
Presentation presentation = new Presentation("Sample.pptx");
try {
PptxOptions options = new PptxOptions();
options.setCompressionLevel(CompressionLevel.Level9);
presentation.save("OutputMaximumCompression.pptx", SaveFormat.Pptx, options);
} finally {
presentation.dispose();
}
حفظ العروض التقديمية دون تجديد الصورة المصغرة
عند حفظ عرض تقديمي كـ PPTX، تتحكم طريقة PptxOptions.setRefreshThumbnail في صورة المستند المصغرة:
trueيُعيد إنشاء الصورة المصغرة أثناء عملية الحفظ. هذا هو القيمة الافتراضية.falseيحافظ على الصورة المصغرة الحالية. إذا لم يكن للعرض صورة مصغرة، لا تُنشئ Aspose.Slides واحدة.
المثال التالي يحفظ عرضًا تقديميًا دون تجديد صورته المصغرة:
import com.aspose.slides.PptxOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
Presentation presentation = new Presentation("Sample.pptx");
try {
PptxOptions options = new PptxOptions();
options.setRefreshThumbnail(false);
presentation.save("Output.pptx", SaveFormat.Pptx, options);
} finally {
presentation.dispose();
}
ملاحظة
إلغاء تجديد الصورة المصغرة يمكن أن يقلل الوقت المطلوب لحفظ ملف PPTX.حفظ تحديثات التقدم كنسبة مئوية
لمراقبة عملية الحفظ، نفّذ واجهة IProgressCallback ومرّر التنفيذ إلى طريقة ISaveOptions.setProgressCallback. ثم تستدعي Aspose.Slides طريقة IProgressCallback.reporting مع قيم التقدم أثناء التصدير.
المثال التالي يُظهر تقدم تصدير PDF إلى وحدة التحكم:
import com.aspose.slides.IProgressCallback;
import com.aspose.slides.PdfOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
class ExportProgressHandler implements IProgressCallback {
public void reporting(double progressValue) {
int progress = (int) progressValue;
System.out.println(progress + "% of the file has been converted.");
}
}
PdfOptions options = new PdfOptions();
options.setProgressCallback(new ExportProgressHandler());
Presentation presentation = new Presentation("Sample.pptx");
try {
presentation.save("Output.pdf", SaveFormat.Pdf, options);
} finally {
presentation.dispose();
}
ملاحظة
توفر Aspose أداة مجانية لتقسيم PowerPoint PowerPoint Splitter مبنية على Aspose.Slides API. تقوم بحفظ الشرائح المحددة من عرض تقديمي كملفات PPT أو PPTX منفصلة.الأسئلة المتكررة
هل يدعم Aspose.Slides الحفظ المتزايد أو “الحفظ السريع”?
لا. كل عملية حفظ تكتب ملف إخراج كامل بدلاً من تحديث الأجزاء التي تغيرت فقط.
هل يمكن لعدة خيوط حفظ نفس كائن Presentation؟
لا. كائن Presentation غير آمن للاستخدام عبر الخيوط (is not thread-safe). يجب الوصول إلى كل كائن وحفظه من خيط واحد في كل مرة.
ماذا يحدث للروابط التشعبية والملفات المرتبطة خارجيًا عندما أحفظ عرضًا تقديميًا؟
تظل الروابط التشعبية موجودة في العرض. لا تنسخ Aspose.Slides الملفات المرتبطة خارجيًا، لذا يجب أن يكون للعرض المحفوظ القدرة على الوصول إلى مواقعها.
هل يمكنني حفظ بيانات تعريف المستند مثل المؤلف والعنوان والشركة وتاريخ الإنشاء؟
نعم. اضبط خصائص المستند المناسبة قبل الحفظ، وستكتب Aspose.Slides هذه الخصائص إلى ملف الإخراج.