تشخیص قالب اصلی ارائه در اندروید
نمای کلی
پس از بارگذاری یک ارائه، متد Presentation.getSourceFormat را فراخوانی کنید تا قالب اصلی آن را تعیین کنید. این متد همچنین از طریق IPresentation.getSourceFormat در دسترس است. زمانی که پردازشهای بعدی به قالبی که نمونهی فعلی از آن بارگذاری شده وابسته است، از آن استفاده کنید.
قالب منبع با SaveFormat انتخابشده برای فایل خروجی متفاوت است. ذخیرهسازی در قالب دیگری، قالب منبع نمونهی موجود را تغییر نمیدهد.
مثالها از جاوا و مسیرهای فایل استفاده میکنند. در اندروید، مسیرهای نمونه را با مسیرهای موجود در ذخیرهسازی قابل دسترسی برنامه (مانند پوشهٔ داخلی برنامه) جایگزین کنید.
خواندن قالب منبع یک فایل
این مثال به یک فایل sample.pptx موجود نیاز دارد. فایل را بارگذاری میکند و بهجای نام فایل، سیاست پردازش برنامه را با استفاده از Presentation.getSourceFormat انتخاب میکند. مسیر ورودی را تغییر دهید تا قالبهای دیگر را آزمایش کنید. مثال سیاست انتخابشده را چاپ میکند؛ پیامها را با منطق برنامهی خود جایگزین کنید.
import com.aspose.slides.Presentation;
import com.aspose.slides.SourceFormat;
Presentation presentation = new Presentation("sample.pptx");
try {
switch (presentation.getSourceFormat()) {
case SourceFormat.Ppt:
case SourceFormat.Pps:
case SourceFormat.Pot:
System.out.println("Use the legacy PowerPoint processing policy.");
break;
case SourceFormat.Pptx:
System.out.println("Use the standard PPTX processing policy.");
break;
default:
System.out.println("Use the general policy for source format " + presentation.getSourceFormat() + ".");
break;
}
} finally {
presentation.dispose();
}
شناسایی مقادیر پشتیبانیشده
کلاس SourceFormat ثابتهای عددی را تعریف میکند که قالبهای ارائه زیر را متمایز میسازند. پسوندهای زیر پسوندهای متداول هستند و بازسازی نام اصلی فایل را نشان نمیدهند.
| مقدار SourceFormat | پسوند | قالب |
|---|---|---|
Ppt |
.ppt |
ارائهٔ PowerPoint 97–2003 |
Pptx |
.pptx |
ارائهٔ Office Open XML |
Pptm |
.pptm |
ارائهٔ Office Open XML با ماکرو |
Pps |
.pps |
نمایش اسلاید PowerPoint 97–2003 |
Ppsx |
.ppsx |
نمایش اسلاید Office Open XML |
Ppsm |
.ppsm |
نمایش اسلاید Office Open XML با ماکرو |
Pot |
.pot |
قالب PowerPoint 97–2003 |
Potx |
.potx |
قالب Office Open XML |
Potm |
.potm |
قالب Office Open XML با ماکرو |
Odp |
.odp |
ارائهٔ OpenDocument |
Otp |
.otp |
قالب ارائهٔ OpenDocument |
Fodp |
.fodp |
ارائهٔ Flat XML ODF |
Xml |
.xml |
ارائهٔ PowerPoint XML |
خواندن قالب منبع یک جریان
این مثال به یک فایل sample.pps موجود نیاز دارد. خواندن بایتهای آن در یک جریان حافظه، مدلی برای ورودی بدون نام فایل (مانند مقدار پایگاهداده یا آرایه بایت آپلودشده) است. سازندهٔ Presentation فقط جریان را میگیرد.
import com.aspose.slides.Presentation;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
try {
byte[] bytes;
try (FileInputStream input = new FileInputStream("sample.pps");
ByteArrayOutputStream output = new ByteArrayOutputStream()) {
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
bytes = output.toByteArray();
}
try (ByteArrayInputStream stream = new ByteArrayInputStream(bytes)) {
Presentation presentation = new Presentation(stream);
try {
System.out.println("Source format: " + presentation.getSourceFormat());
} finally {
presentation.dispose();
}
}
} catch (IOException exception) {
System.err.println("Cannot read the presentation: " + exception.getMessage());
}
PPT، PPS و POT از همان قالب دودویی زیرساختی استفاده میکنند. هنگام بارگذاری از مسیر فایل، پسوند میتواند به تشخیص نمایش اسلاید یا قالب کمک کند. بدون نام فایل، محتوای قدیمی PPS و POT ممکن است به عنوان SourceFormat.Ppt گزارش شود؛ مثال PPS در بالا مقدار عددی SourceFormat.Ppt را چاپ میکند.
اگر برنامهی شما نیاز به حفظ این تمایز دارد، نام فایل اصلی یا فرادادهٔ زیرنوع را بهصورت جداگانه نگه دارید. پسوند یک سرنخ مفید برای این زیرنوعهای قدیمی است، اما نباید تنها معیار شناسایی محتوای ارائهٔ دلخواه باشد.
مقایسهٔ تشخیص قبل و بعد از بارگذاری
هنگامی که نیاز به بازرسی یک فایل قبل از بارگذاری تمام مدل شیء ارائه دارید، از PresentationFactory.getPresentationInfo و IPresentationInfo.getLoadFormat استفاده کنید. وقتی نمونه قبلاً وجود دارد، از Presentation.getSourceFormat استفاده کنید.
این مثال به sample.pptx نیاز دارد و مقادیر عددی LoadFormat.Pptx و SourceFormat.Pptx را به ترتیب چاپ میکند. در محیط تولید، API متناسب با مرحله پردازش خود را انتخاب کنید؛ یک ارائهی بارگذاریشده دیگر نیازی به بازرسی دوم صرفاً برای دریافت قالب منبع ندارد.
import com.aspose.slides.Presentation;
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.PresentationFactory;
String path = "sample.pptx";
IPresentationInfo information = PresentationFactory.getInstance().getPresentationInfo(path);
System.out.println("Before loading: " + information.getLoadFormat());
Presentation presentation = new Presentation(path);
try {
System.out.println("After loading: " + presentation.getSourceFormat());
} finally {
presentation.dispose();
}
نتیجهها از ثابتهای کلاسهای متفاوتی استفاده میکنند: LoadFormat و SourceFormat. مقدار عددی آنها را با هم مقایسه نکنید و فرض نکنید که هر قالب نتایج تشخیص یکسانی دارد. PowerPoint XML ممکن است قبل از بارگذاری به عنوان LoadFormat.Unknown گزارش شود و پس از بارگذاری به عنوان SourceFormat.Xml.
نگهداری مجزا قالب منبع و خروجی
این مثال به sample.pptx نیاز دارد و converted.odp را مینویسد. مقدار عددی SourceFormat.Pptx را هم قبل و هم بعد از ذخیرهسازی نمونهٔ اصلی چاپ میکند. فقط نمونهٔ جدید بارگذاریشده از خروجی ODP، Odp را گزارش میدهد.
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
Presentation presentation = new Presentation("sample.pptx");
try {
System.out.println("Before saving: " + presentation.getSourceFormat());
presentation.save("converted.odp", SaveFormat.Odp);
System.out.println("After saving: " + presentation.getSourceFormat());
Presentation reopened = new Presentation("converted.odp");
try {
System.out.println("Reopened output: " + reopened.getSourceFormat());
} finally {
reopened.dispose();
}
} finally {
presentation.dispose();
}
یک ارائه که از ابتدا با new Presentation() ساخته میشود، SourceFormat.Pptx را گزارش میکند. این نمونه ورودی ندارد: این مقدار پیشفرض برای یک نمونهٔ تازه ساختهشده است و نشانگر این نیست که فایلی با فرمت PPTX بارگذاری شده است. اگر این تمایز برای برنامهتان مهم است، بهطور جداگانه پیگیری کنید که آیا نمونه ساخته یا بارگذاری شده است.
نگاشت قالب منبع به پسوند
مثال زیر به sample.pptx نیاز دارد. هر مقدارcurrently پشتیبانیشده از SourceFormat را به یک پسوند متداول نگاشت میکند، بدون تجزیه نام فایل ورودی. اگر مقدار شناخته نشود، هیچ پسوندی بهصورت خاموش اختصاص داده نمیشود.
import com.aspose.slides.Presentation;
import com.aspose.slides.SourceFormat;
Presentation presentation = new Presentation("sample.pptx");
try {
String extension;
switch (presentation.getSourceFormat()) {
case SourceFormat.Ppt:
extension = ".ppt";
break;
case SourceFormat.Pptx:
extension = ".pptx";
break;
case SourceFormat.Pptm:
extension = ".pptm";
break;
case SourceFormat.Pps:
extension = ".pps";
break;
case SourceFormat.Ppsx:
extension = ".ppsx";
break;
case SourceFormat.Ppsm:
extension = ".ppsm";
break;
case SourceFormat.Pot:
extension = ".pot";
break;
case SourceFormat.Potx:
extension = ".potx";
break;
case SourceFormat.Potm:
extension = ".potm";
break;
case SourceFormat.Odp:
extension = ".odp";
break;
case SourceFormat.Otp:
extension = ".otp";
break;
case SourceFormat.Fodp:
extension = ".fodp";
break;
case SourceFormat.Xml:
extension = ".xml";
break;
default:
extension = null;
break;
}
System.out.println(extension != null ? extension : "No extension mapping is available.");
} finally {
presentation.dispose();
}
این نگاشت فایلی را تبدیل نمیکند و زیرنوع قدیمی PPS/POT که هنگام بارگذاری از جریان از دست رفته است را بازنشانی نمیکند. برای ذخیرهسازی واقعی، یک SaveFormat را بهصورت صریح انتخاب کنید یا از تبدیل نشان دادهشده در Save Presentations in Their Original Format استفاده کنید.
تأیید قالبها با ذخیرهسازی و بازگشایی مجدد
این مثال مستقل یک ارائه ایجاد میکند و سه فایل را در پوشه کاری مینویسد، فایلهای همنام را بازنویسی میکند. هر خروجی را هم از مسیر و هم از یک جریان حافظه باز میکند. برای PPTX و ODP، هر دو مسیر قالب ذخیرهشده را گزارش میدهند. برای PPS، بارگذاری از مسیر Pps را گزارش میکند، در حالی که بارگذاری همان بایتها بدون نام فایل Ppt را گزارش میدهد.
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
Presentation presentation = new Presentation();
try {
int[] formats = { SaveFormat.Pptx, SaveFormat.Odp, SaveFormat.Pps };
String[] extensions = { "pptx", "odp", "pps" };
for (int i = 0; i < formats.length; i++) {
String path = "roundtrip." + extensions[i];
presentation.save(path, formats[i]);
Presentation fromFile = new Presentation(path);
try {
byte[] bytes;
try (FileInputStream input = new FileInputStream(path);
ByteArrayOutputStream output = new ByteArrayOutputStream()) {
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
bytes = output.toByteArray();
}
try (ByteArrayInputStream stream = new ByteArrayInputStream(bytes)) {
Presentation fromStream = new Presentation(stream);
try {
System.out.println(extensions[i] + ": file=" + fromFile.getSourceFormat() + ", stream=" + fromStream.getSourceFormat());
} finally {
fromStream.dispose();
}
}
} finally {
fromFile.dispose();
}
}
} catch (IOException exception) {
System.err.println("Cannot read a saved presentation: " + exception.getMessage());
} finally {
presentation.dispose();
}
جدول زیر شناسایی قالب منبع برای ارائههایی با پسوندهای منطبق را خلاصه میکند. نامها ثابتها هستند؛ مثالهای جاوا مقادیر عددی آنها را چاپ میکنند:
| قالب ذخیرهشده | SourceFormat از مسیر فایل | SourceFormat از جریان بینام |
|---|---|---|
| PPT | Ppt |
Ppt |
| PPTX, PPTM | Pptx, Pptm به ترتیب |
همانند مسیر فایل |
| PPS | Pps |
Ppt |
| PPSX, PPSM | Ppsx, Ppsm به ترتیب |
همانند مسیر فایل |
| POT | Pot |
Ppt |
| POTX, POTM | Potx, Potm به ترتیب |
همانند مسیر فایل |
| ODP, OTP | Odp, Otp به ترتیب |
همانند مسیر فایل |
| FODP | Fodp |
Fodp |
| PowerPoint XML | Xml |
Xml |
محتوای PPS/POT برای جریانهای بینام به عنوان Ppt شناسایی میشود. جدول صرفاً شناسایی قالب را توصیف میکند و نه حفظ تمام ویژگیهای ارائه در حین تبدیل.
سوالات متداول
آیا ذخیرهسازی به ODP قالب منبع ارائهای که از PPTX بارگذاری شده است را تغییر میدهد؟
خیر. نمونه موجود همچنان Pptx را گزارش میکند. نمونهای که از فایل ODP ذخیرهشده بارگذاری میشود Odp را گزارش میدهد.
آیا یک جریان همیشه میتواند یک ارائه، نمایش اسلاید یا قالب قدیمی را متمایز کند؟
خیر. PPT، PPS و POT قالب دودویی یکسانی دارند. وقتی این تمایز لازم است، نام فایل یا فرادادهٔ زیرنوع را بهصورت جداگانه نگه دارید.
اگر ارائه قبلاً بارگذاری شده باشد، کدام API را باید استفاده کنم؟
Presentation.getSourceFormat را بخوانید. برای بازرسی قبل از بارگذاری، از PresentationFactory.getPresentationInfo استفاده کنید.