تعیین قالب اصلی ارائه در .NET

نمای کلی

پس از بارگذاری یک ارائه، ویژگی فقط‑خواندنی Presentation.SourceFormat را بخوانید تا قالب اصلی آن را تعیین کنید. این ویژگی همچنین از طریق IPresentation.SourceFormat در دسترس است. از آن استفاده کنید زمانی که پردازش بعدی به قالبی که نمونهٔ جاری از آن بارگذاری شده بستگی دارد.

قالب منبع متفاوت از SaveFormat است که برای فایل خروجی انتخاب می‌شود. ذخیره به قالب دیگری، قالب منبع نمونهٔ موجود را تغییر نمی‌دهد.

خواندن قالب منبع یک فایل

این مثال به فایلی با نام sample.pptx موجود نیاز دارد. فایل را بارگذاری می‌کند و به جای نام فایل، از سیاست پردازشی برنامه با استفاده از Presentation.SourceFormat استفاده می‌کند. مسیر ورودی را برای آزمایش قالب‌های دیگر تغییر دهید. مثال سیاست انتخاب‌شده را چاپ می‌کند؛ پیام‌ها را با منطق برنامهٔ خود جایگزین کنید.

using System;
using Aspose.Slides;

using var presentation = new Presentation("sample.pptx");

switch (presentation.SourceFormat)
{
    case SourceFormat.Ppt:
    case SourceFormat.Pps:
    case SourceFormat.Pot:
        Console.WriteLine("Use the legacy PowerPoint processing policy.");
        break;
    case SourceFormat.Pptx:
        Console.WriteLine("Use the standard PPTX processing policy.");
        break;
    default:
        Console.WriteLine($"Use the general policy for {presentation.SourceFormat}.");
        break;
}

مقادیر پشتیبانی‌شده را شناسایی کنید

شمارش 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 ارائهٔ OpenDocument XML مسطح
Xml .xml ارائهٔ PowerPoint XML

خواندن قالب منبع یک جریان

این مثال به فایلی با نام sample.pps موجود نیاز دارد. خواندن بایت‌های آن به یک جریان حافظه، ورودی‌ای را شبیه‌سازی می‌کند که بدون نام فایل دریافت می‌شود، مانند مقدار ذخیره شده در پایگاه داده یا آرایهٔ بایتی بارگذاری‌شده. سازندهٔ Presentation تنها جریان را دریافت می‌کند.

using System;
using System.IO;
using Aspose.Slides;

var bytes = File.ReadAllBytes("sample.pps");
using var stream = new MemoryStream(bytes);
using var presentation = new Presentation(stream);

Console.WriteLine($"Source format: {presentation.SourceFormat}");

PPT، PPS و POT از یک قالب باینری زیرساختی استفاده می‌کنند. هنگام بارگذاری با مسیر فایل، پسوند می‌تواند به تمییز نمایش اسلاید یا قالب کمک کند. بدون نام فایل، محتوای PPS و POT قدیمی ممکن است به عنوان SourceFormat.Ppt گزارش شود؛ مثال PPS بالا Ppt را گزارش می‌کند.

اگر برنامهٔ شما باید این تمییز را حفظ کند، نام فایل اصلی یا فرادادهٔ زیرنوع را به‌طور جداگانه نگه دارید. پسوند یک نکتهٔ مفید برای این زیرنوع‌های قدیمی است، اما نباید تنها معیار شناسایی محتوای ارائهٔ دلخواه باشد.

مقایسهٔ تشخیص قبل و بعد از بارگذاری

هنگامی که نیاز به بررسی فایل قبل از بارگذاری مدل شیء کامل ارائه دارید، از PresentationFactory.GetPresentationInfo و IPresentationInfo.LoadFormat استفاده کنید. وقتی نمونه از قبل وجود دارد، از Presentation.SourceFormat استفاده کنید.

این مثال به sample.pptx نیاز دارد و برای هر دو بررسی Pptx را چاپ می‌کند. در محیط تولید، API مناسب برای مرحلهٔ پردازش خود را انتخاب کنید؛ یک ارائهٔ بارگذاری‌شده نیازی به بازرسی دوم صرفاً برای دریافت قالب منبع ندارد.

using System;
using Aspose.Slides;

var path = "sample.pptx";
var information = PresentationFactory.Instance.GetPresentationInfo(path);
Console.WriteLine($"Before loading: {information.LoadFormat}");

using var presentation = new Presentation(path);
Console.WriteLine($"After loading: {presentation.SourceFormat}");

نتایج دارای انواع شمارشی متفاوتی هستند: LoadFormat و SourceFormat. آن‌ها را با تبدیل مقدار عددی مقایسه نکنید و فرض نکنید هر قالب نتایج تشخیص یکسانی دارد. در بررسی «ذخیره‑کردن و باز‑گشایی» که در پایین توضیح داده شده است، PowerPoint XML قبل از بارگذاری به عنوان LoadFormat.Unknown گزارش شد و پس از بارگذاری به عنوان SourceFormat.Xml.

حفظ جداسازی قالب‌های منبع و خروجی

این مثال به sample.pptx نیاز دارد و converted.odp را می‌نویسد. قبل و بعد از ذخیرهٔ نمونهٔ اصلی Pptx را چاپ می‌کند. تنها نمونهٔ جدید بارگذاری‌شده از خروجی ODP، Odp را گزارش می‌دهد.

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("sample.pptx");
Console.WriteLine($"Before saving: {presentation.SourceFormat}");

presentation.Save("converted.odp", SaveFormat.Odp);
Console.WriteLine($"After saving: {presentation.SourceFormat}");

using var reopened = new Presentation("converted.odp");
Console.WriteLine($"Reopened output: {reopened.SourceFormat}");

یک ارائهٔ ساخته‌شده از صفر با new Presentation() گزارش می‌دهد SourceFormat.Pptx. این نمونه ورودی ندارد: این مقدار پیش‌فرض برای یک شیء تازه ایجاد‌شده است، نه نشانه‌ای مبنی بر اینکه یک فایل PPTX بارگذاری شده است. اگر تمایز بین ایجاد یا بارگذاری برای برنامهٔ شما مهم است، به‌طور جداگانه آن را ردیابی کنید.

نقشه‌برداری یک قالب منبع به پسوند

مثال زیر به sample.pptx نیاز دارد. هر مقدار فعلاً پشتیبانی‌شدهٔ SourceFormat را به پسوند متداولی نگاشت می‌کند، بدون آن‌که نام فایل ورودی را تجزیه‌وتحلیل کند. روش پیش‌فرض از اختصاص ساکن پسوند به مقادیری که شناخته نشده‌اند جلوگیری می‌کند.

using System;
using Aspose.Slides;

using var presentation = new Presentation("sample.pptx");
var extension = presentation.SourceFormat switch
{
    SourceFormat.Ppt => ".ppt",
    SourceFormat.Pptx => ".pptx",
    SourceFormat.Pptm => ".pptm",
    SourceFormat.Pps => ".pps",
    SourceFormat.Ppsx => ".ppsx",
    SourceFormat.Ppsm => ".ppsm",
    SourceFormat.Pot => ".pot",
    SourceFormat.Potx => ".potx",
    SourceFormat.Potm => ".potm",
    SourceFormat.Odp => ".odp",
    SourceFormat.Otp => ".otp",
    SourceFormat.Fodp => ".fodp",
    SourceFormat.Xml => ".xml",
    _ => null
};

Console.WriteLine(extension ?? "No extension mapping is available.");

این نگاشت فایلی را تبدیل یا زیرنوع PPS/POT که در طول بارگذاری از جریان از دست رفته است، بازنشانی نمی‌کند. برای ذخیرهٔ واقعی، یک SaveFormat را به‌وضوح انتخاب کنید یا از تبدیل نشان‌داده‌شده در Save Presentations in Their Original Format استفاده کنید.

تأیید قالب‌ها با ذخیره و باز‑گشایی

این مثال خودکفا یک ارائه ایجاد می‌کند و سه فایل را در پوشهٔ کاری می‌نویسد، فایل‌های هم‌نام را بازنویسی می‌کند. هر خروجی هم از مسیر و هم از یک جریان حافظه باز می‌شود. برای PPTX و ODP، هر دو مسیر قالب ذخیره‌شده را گزارش می‌کند. برای PPS، بارگذاری از مسیر Pps را گزارش می‌کند، در حالی که بارگذاری همان بایت‌ها بدون نام فایل Ppt را گزارش می‌کند.

using System;
using System.IO;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var formats = new[] { SaveFormat.Pptx, SaveFormat.Odp, SaveFormat.Pps };

foreach (var format in formats)
{
    var path = $"roundtrip.{format.ToString().ToLowerInvariant()}";
    presentation.Save(path, format);

    using var fromFile = new Presentation(path);
    var bytes = File.ReadAllBytes(path);
    using var stream = new MemoryStream(bytes);
    using var fromStream = new Presentation(stream);

    Console.WriteLine($"{format}: file={fromFile.SourceFormat}, stream={fromStream.SourceFormat}");
}

همین بررسی برای تمام قالب‌های فهرست‌شده در بالا نتایج زیر را برای ارائه‌های تولیدشده با پسوندهای منطبق تولید کرد:

قالب ذخیره‌شده 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.SourceFormat را بخوانید. برای بازرسی قبل از بارگذاری، از PresentationFactory.GetPresentationInfo استفاده کنید.