تعیین قالب اصلی ارائه در جاوا

نگاهی کلی

پس از بارگذاری یک ارائه، متد 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.nio.file.Files;
import java.nio.file.Paths;

try {
    byte[] bytes = Files.readAllBytes(Paths.get("sample.pps"));
    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 نیاز دارد. هر مقدار فعلی پشتیبانی‌شده از 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.nio.file.Files;
import java.nio.file.Paths;

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 = Files.readAllBytes(Paths.get(path));
            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();
}

جدول زیر شناسایی قالب منبع برای ارائه‌های دارای پسوندهای مطابق را خلاصه می‌کند. نام‌ها ثابت‌ها را نشان می‌دهند؛ مثال‌های Java مقدار عددی آن‌ها را چاپ می‌کنند:

قالب ذخیره‌شده 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 استفاده کنید.