بازیابی و به‌روزرسانی اطلاعات ارائه در JavaScript

نمای کلی

Aspose.Slides می‌تواند فرمت یک ارائه را شناسایی کرده و متادیتای سند آن را بدون ایجاد یک مدل شیء کامل ارائه بخواند. این برای زمانی که نیاز به دسته‌بندی فایل‌ها، ساخت یک فهرست موجودی یا بررسی خصوصیات قبل از تصمیم‌گیری برای بارگذاری و پردازش محتوای ارائه دارید، مفید است.

این مقاله بازرسی سبک‌وزن را از طریق PresentationFactory و PresentationInfo و همچنین به‌روزرسانی‌های هدفمند را از طریق DocumentProperties نشان می‌دهد.

بررسی فرمت یک ارائه

اگر قبلاً یک ارائه بارگذاری شده دارید، برای تشخیص پس از بارگذاری و محدودیت‌های جریانات قدیمی PPT، PPS و POT به Determine the Original Presentation Format مراجعه کنید.

از PresentationFactory.getPresentationInfo برای بازرسی یک فایل بدون ایجاد یک نمونه Presentation استفاده کنید. روش PresentationInfo.getLoadFormat فرمت شناسایی‌شده را گزارش می‌کند، مانند PPTX، PPT یا ODP.

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

const fileNames = ["pres.pptx", "pres.ppt", "pres.odp"];

for (const fileName of fileNames) {
    const presentationInfo = aspose.PresentationFactory.getInstance().getPresentationInfo(fileName);
    const loadFormat = presentationInfo.getLoadFormat();
    let formatName = `Other (${loadFormat})`;

    if (loadFormat === aspose.LoadFormat.Pptx) {
        formatName = "PPTX";
    } else if (loadFormat === aspose.LoadFormat.Ppt) {
        formatName = "PPT";
    } else if (loadFormat === aspose.LoadFormat.Odp) {
        formatName = "ODP";
    }

    console.log(`${fileName}: ${formatName}`);
}

ساخت یک فهرست سبک‌وزن از ارائه‌ها

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

ویژگی‌های گسترده‌ای که توسط DocumentProperties افشا می‌شوند، مقادیر فهرست زیر را ارائه می‌دهند:

متد مقدار موجودی
getSlides تعداد کل اسلایدها.
getHiddenSlides تعداد اسلایدهای مخفی.
getNotes تعداد اسلایدهایی که حاوی یادداشت هستند.
getParagraphs تعداد کل پاراگراف‌ها، در صورت موجود بودن.
getWords تعداد کل کلمات.
getMultimediaClips تعداد کل کلیپ‌های صوتی و تصویری.

مثال زیر این مقادیر را بدون ایجاد یک شیء Presentation می‌خواند و یک فهرست فشرده چاپ می‌کند. همچنین DocumentProperties.getHeadingPairs را با DocumentProperties.getTitlesOfParts ترکیب می‌کند تا گروه‌های محتوا مانند فونت‌ها، قالب‌ها و عناوین اسلایدها را نمایش دهد.

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

const filePath = "sample.pptx";
const presentationInfo = aspose.PresentationFactory.getInstance().getPresentationInfo(filePath);
const documentProperties = presentationInfo.readDocumentProperties();

const loadFormat = presentationInfo.getLoadFormat();
let formatName = `Other (${loadFormat})`;

if (loadFormat === aspose.LoadFormat.Pptx) {
    formatName = "PPTX";
} else if (loadFormat === aspose.LoadFormat.Ppt) {
    formatName = "PPT";
} else if (loadFormat === aspose.LoadFormat.Odp) {
    formatName = "ODP";
}

console.log(`File: ${path.basename(filePath)}`);
console.log(`Format: ${formatName}`);
console.log(`Title: ${documentProperties.getTitle()}`);
console.log(`Author: ${documentProperties.getAuthor()}`);
console.log("Statistics:");
console.log(`  Slides: ${documentProperties.getSlides()}`);
console.log(`  Hidden slides: ${documentProperties.getHiddenSlides()}`);
console.log(`  Slides with notes: ${documentProperties.getNotes()}`);
console.log(`  Paragraphs: ${documentProperties.getParagraphs()}`);
console.log(`  Words: ${documentProperties.getWords()}`);
console.log(`  Multimedia clips: ${documentProperties.getMultimediaClips()}`);

const headingPairs = documentProperties.getHeadingPairs() || [];
const titlesOfParts = documentProperties.getTitlesOfParts() || [];
let partIndex = 0;

if (headingPairs.length === 0 || titlesOfParts.length === 0) {
    console.log("Content groups: not available");
} else {
    console.log("Content groups:");

    for (const headingPair of headingPairs) {
        const partCount = headingPair.getCount();
        console.log(`  ${headingPair.getName()} (${partCount})`);

        for (let partOffset = 0; partOffset < partCount && partIndex < titlesOfParts.length; partOffset++) {
            console.log(`    - ${titlesOfParts[partIndex]}`);
            partIndex++;
        }
    }

    if (partIndex < titlesOfParts.length) {
        console.log("  Other parts:");

        while (partIndex < titlesOfParts.length) {
            console.log(`    - ${titlesOfParts[partIndex]}`);
            partIndex++;
        }
    }
}

هر HeadingPair یک نام گروه را از طریق HeadingPair.getName و تعداد موارد در آن گروه را از طریق HeadingPair.getCount فراهم می‌کند. روش DocumentProperties.getTitlesOfParts یک آرایه تخت و مرتب برمی‌گرداند، بنابراین تعداد عناوین متوالی مشخص‌شده توسط هر HeadingPair را مصرف کنید.

متادیتای ذخیره‌شده و محدودیت‌های فرمت

ویژگی‌های فهرست که توسط PresentationInfo.readDocumentProperties برگردانده می‌شوند، متادیتای موجود در سند منبع را نشان می‌دهند. Aspose.Slides برای این فراخوانی، مدل شیء ارائه را بارگذاری و پیمایش نمی‌کند تا این مقادیر را دوباره محاسبه کند. ویژگی‌های گمشده با مقادیر پیش‌فرض نشان داده می‌شوند و مقادیر ذخیره‌شده ممکن است منسوخ باشند اگر برنامه‌ای که آخرین بار فایل را ذخیره کرده است، ویژگی‌های سند را به‌روز نکرده باشد.

  • PPTX: این فرمت ویژگی‌های سند گسترش‌یافته‌ای برای شمارش اسلاید، یادداشت، اسلاید مخفی، پاراگراف, کلمه و رسانه‌های چندرسانه‌ای، همچنین جفت‌های سرعنوان و عناوین بخش‌ها فراهم می‌کند. در دسترس بودن آن بستگی دارد به این که کدام ویژگی‌ها توسط تولید‌کننده سند نوشته شده باشند.
  • PPT: این فرمت باینری می‌تواند ویژگی‌های خلاصه‌سند مربوطه را ذخیره کند. اگر ویژگی‌ای موجود نباشد یا توسط تولید‌کننده سند به‌روز نشده باشد، Aspose.Slides مقدار ذخیره‌شده یا پیش‌فرض آن را برمی‌گرداند و نه محاسبه آن از اسلایدها.
  • ODP: متادیتای OpenDocument آمار کلی سند مانند تعداد صفحه، پاراگراف و کلمه را فراهم می‌کند، اما این مقادیر به همه ویژگی‌های گسترش‌یافته مخصوص PowerPoint映 نمی‌شوند. متادیتای اسلایدهای مخفی، اسلایدهای یادداشت، چندرسانه‌ای، جفت‌های سرعنوان و عناوین بخش ممکن است در دسترس نباشند و ویژگی‌های فهرست ممکن است مقادیر پیش‌فرض را برگردانند. مقدار صفر یا آرایه خالی را به‌عنوان اثبات قطعی عدم وجود محتوا در نظر نگیرید.

برای فهرست‌ها و چک‌های اولیه از روش متادیتای سبک‌وزن استفاده کنید. وقتی نتیجه باید تغییرات در حافظه را منعکس کند یا نیاز به تأیید محتوای واقعی ارائه دارید، ارائه را بارگذاری کرده و مدل شیء زنده آن را بررسی کنید.

به‌روزرسانی ویژگی‌های ارائه

ویژگی‌های برگشت‌داده‌شده توسط PresentationInfo.readDocumentProperties همچنین می‌توانند بدون ایجاد یک نمونه Presentation تغییر یابند. تغییرات را با PresentationInfo.updateDocumentProperties اعمال کنید و سپس ارائه متصل را با PresentationInfo.writeBindedPresentation بنویسید.

تصویر زیر ویژگی‌های سند اصلی را نشان می‌دهد.

ویژگی‌های سند اصلی ارائه PowerPoint

مثال زیر عنوان و زمان آخرین ذخیره‌سازی را تغییر می‌دهد و نتیجه را در یک فایل جدید می‌نویسد:

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

const sourceFile = "sample.pptx";
const outputFile = "sample_with_updated_properties.pptx";
const presentationInfo = aspose.PresentationFactory.getInstance().getPresentationInfo(sourceFile);
const documentProperties = presentationInfo.readDocumentProperties();

documentProperties.setTitle("Quarterly sales report");
documentProperties.setLastSavedTime(java.newInstanceSync("java.util.Date"));

presentationInfo.updateDocumentProperties(documentProperties);
const outputStream = java.newInstanceSync("java.io.FileOutputStream", outputFile);
try {
    presentationInfo.writeBindedPresentation(outputStream);
} finally {
    outputStream.close();
}

ویژگی‌های سند تغییر یافته ارائه PowerPoint

پیوندهای مفید

برای بررسی‌های امنیتی مرتبط و تنظیمات حفاظت، به مقالات زیر مراجعه کنید:

سؤال‌های متداول

چگونه می‌توانم بررسی کنم که آیا فونت‌ها جاسازی شده‌اند و کدام‌ها هستند؟

ارائه را بارگذاری کنید و از Presentation.getFontsManager استفاده کنید. برای به‌دست‌آوردن فونت‌های جاسازی‌شده از FontsManager.getEmbeddedFonts و برای به‌دست‌آوردن فونت‌های استفاده‌شده توسط ارائه از FontsManager.getFonts فراخوانی کنید. دو نتیجه را مقایسه کنید تا فونت‌های مورد نیاز برای رندر ولی جاگذاری نشده را بیابید.

چگونه می‌توانم به‌سرعت تشخیص دهم که آیا فایل اسلایدهای مخفی دارد و تعداد آن‌ها چقدر است؟

زمانی که متادیتای ذخیره‌شده سند کافی باشد، از طریق PresentationFactory.getPresentationInfo و PresentationInfo.readDocumentProperties DocumentProperties.getHiddenSlides را بخوانید. این برای یک فهرست سبک‌وزن مناسب است. اگر ارائه در حافظه تغییر کرده باشد، متادیتای ذخیره‌شده ممکن است گمشده یا منسوخ باشد، یا نیاز به تأیید مقادیر زنده داشته باشید؛ در این صورت به جای آن، از طریق Presentation.getSlides پیمایش کنید و روش Slide.getHidden هر اسلاید را بررسی کنید.

آیا می‌توانم تشخیص دهم که آیا اندازه و جهت سفارشی اسلاید استفاده شده است و آیا از پیش‌فرض‌ها متفاوت است؟

بله. ارائه را بارگذاری کنید و Presentation.getSlideSize را صدا بزنید. با استفاده از SlideSize.getType، SlideSize.getSize، و SlideSize.getOrientation تنظیمات فعلی را با پیش‌تنظیم و ابعاد مورد انتظار مقایسه کنید.

آیا روش سریعی برای مشاهده این‌که آیا نمودارها به منابع داده خارجی ارجاع می‌دهند وجود دارد؟

بله. هر Chart را پیدا کنید و ChartData.getDataSourceType را صدا بزنید. برای یک کتاب‌کار خارجی، ChartData.getExternalWorkbookPath را فراخوانی کنید. نوع منبع داده و مسیر، یک ارجاع خارجی را شناسایی می‌کنند، اما برای تأیید در دسترس بودن هدف، بررسی منبع جداگانه‌ای لازم است.

چگون می‌توانم اسلایدهای ‘حجم‌دار’ که ممکن است رندر یا خروجی PDF را کند کنند ارزیابی کنم؟

هیچ ویژگی تک‌بعدی برای پیچیدگی وجود ندارد. از طریق Presentation.getSlides و مجموعه BaseSlide.getShapes هر اسلاید پیمایش کنید. از شمارش اشکال و حضور تصاویر بزرگ، افکت‌ها، انیمیشن‌ها یا چندرسانه‌ای‌ها به‌عنوان سیگنال‌های ارزیابی استفاده کنید و یک رندر یا خروجی نمونه‌برداری را اندازه‌گیری کنید قبل از اینکه اسلاید را به‌عنوان گلوگاه عملکردی تأیید شده در نظر بگیرید.