تعیین فرمت اصلی ارائه در Node.js

بررسی کلی

پس از بارگذاری یک ارائه، متد Presentation.getSourceFormat را فراخوانی کنید تا فرمت اصلی آن را تعیین کنید. زمانی که پردازش‌های بعدی به فرمت منبعی که نمونه جاری از آن بارگذاری شده وابسته است، از این متد استفاده کنید.

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

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

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

const aspose = require("aspose.slides.via.java");

const presentation = new aspose.Presentation("sample.pptx");
try {
    switch (presentation.getSourceFormat()) {
        case aspose.SourceFormat.Ppt:
        case aspose.SourceFormat.Pps:
        case aspose.SourceFormat.Pot:
            console.log("Use the legacy PowerPoint processing policy.");
            break;
        case aspose.SourceFormat.Pptx:
            console.log("Use the standard PPTX processing policy.");
            break;
        default:
            console.log("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 فقط جریان را دریافت می‌کند.

const aspose = require("aspose.slides.via.java");
const java = require("java");
const fs = require("fs");

const buffer = fs.readFileSync("sample.pps");
const bytes = java.newArray("byte", Array.from(buffer));
const stream = java.newInstanceSync("java.io.ByteArrayInputStream", bytes);
try {
    const presentation = new aspose.Presentation(stream);
    try {
        console.log("Source format: " + presentation.getSourceFormat());
    } finally {
        presentation.dispose();
    }
} finally {
    stream.close();
}

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

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

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

از PresentationFactory.getPresentationInfo و PresentationInfo.getLoadFormat هنگامی که نیاز به بازرسی فایل قبل از بارگذاری کامل مدل شیء ارائه دارید، استفاده کنید. هنگامی که نمونه قبلاً وجود دارد، از Presentation.getSourceFormat استفاده کنید.

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

const aspose = require("aspose.slides.via.java");

const path = "sample.pptx";
const information = aspose.PresentationFactory.getInstance().getPresentationInfo(path);
console.log("Before loading: " + information.getLoadFormat());

const presentation = new aspose.Presentation(path);
try {
    console.log("After loading: " + presentation.getSourceFormat());
} finally {
    presentation.dispose();
}

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

نگهداری جداگانه فرمت منبع و خروجی

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

const aspose = require("aspose.slides.via.java");

const presentation = new aspose.Presentation("sample.pptx");
try {
    console.log("Before saving: " + presentation.getSourceFormat());

    presentation.save("converted.odp", aspose.SaveFormat.Odp);
    console.log("After saving: " + presentation.getSourceFormat());

    const reopened = new aspose.Presentation("converted.odp");
    try {
        console.log("Reopened output: " + reopened.getSourceFormat());
    } finally {
        reopened.dispose();
    }
} finally {
    presentation.dispose();
}

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

نقشه‌برداری فرمت منبع به پسوند

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

const aspose = require("aspose.slides.via.java");

const presentation = new aspose.Presentation("sample.pptx");
try {
    let extension;
    switch (presentation.getSourceFormat()) {
        case aspose.SourceFormat.Ppt:
            extension = ".ppt";
            break;
        case aspose.SourceFormat.Pptx:
            extension = ".pptx";
            break;
        case aspose.SourceFormat.Pptm:
            extension = ".pptm";
            break;
        case aspose.SourceFormat.Pps:
            extension = ".pps";
            break;
        case aspose.SourceFormat.Ppsx:
            extension = ".ppsx";
            break;
        case aspose.SourceFormat.Ppsm:
            extension = ".ppsm";
            break;
        case aspose.SourceFormat.Pot:
            extension = ".pot";
            break;
        case aspose.SourceFormat.Potx:
            extension = ".potx";
            break;
        case aspose.SourceFormat.Potm:
            extension = ".potm";
            break;
        case aspose.SourceFormat.Odp:
            extension = ".odp";
            break;
        case aspose.SourceFormat.Otp:
            extension = ".otp";
            break;
        case aspose.SourceFormat.Fodp:
            extension = ".fodp";
            break;
        case aspose.SourceFormat.Xml:
            extension = ".xml";
            break;
        default:
            extension = null;
            break;
    }

    console.log(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 را گزارش می‌دهد.

const aspose = require("aspose.slides.via.java");
const java = require("java");
const fs = require("fs");

const presentation = new aspose.Presentation();
try {
    const formats = [aspose.SaveFormat.Pptx, aspose.SaveFormat.Odp, aspose.SaveFormat.Pps];
    const extensions = ["pptx", "odp", "pps"];

    for (let i = 0; i < formats.length; i++) {
        const path = "roundtrip." + extensions[i];
        presentation.save(path, formats[i]);

        const fromFile = new aspose.Presentation(path);
        try {
            const buffer = fs.readFileSync(path);
            const bytes = java.newArray("byte", Array.from(buffer));
            const stream = java.newInstanceSync("java.io.ByteArrayInputStream", bytes);
            try {
                const fromStream = new aspose.Presentation(stream);
                try {
                    console.log(extensions[i] + ": file=" + fromFile.getSourceFormat() + ", stream=" + fromStream.getSourceFormat());
                } finally {
                    fromStream.dispose();
                }
            } finally {
                stream.close();
            }
        } finally {
            fromFile.dispose();
        }
    }
} 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 استفاده کنید.