ดึงและอัปเดตข้อมูลการนำเสนอใน JavaScript

ภาพรวม

Aspose.Slides สามารถระบุรูปแบบของการนำเสนอและอ่านเมตาดาต้าของเอกสารได้โดยไม่ต้องสร้างโมเดลวัตถุการนำเสนอแบบเต็ม ซึ่งเป็นประโยชน์เมื่อคุณต้องการจัดประเภทไฟล์ สร้างรายการตรวจสอบ หรือตรวจสอบคุณสมบัติก่อนตัดสินใจว่าจะโหลดและประมวลผลเนื้อหาการนำเสนอหรือไม่.
บทความนี้จะแสดงการตรวจสอบแบบน้ำหนักเบาผ่าน PresentationFactory และ PresentationInfo, รวมถึงการอัปเดตแบบเจาะจงผ่าน DocumentProperties.

ตรวจสอบรูปแบบการนำเสนอ

ใช้ 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 จะคืนค่าเป็นอาเรย์แบนเรียงลำดับ ดังนั้นให้ใช้จำนวนชื่อที่ต่อเนื่องตามที่แต่ละ heading pair ระบุ

เมตาดาต้าที่เก็บไว้และข้อจำกัดของรูปแบบ

คุณสมบัติรายการตรวจสอบที่คืนค่าจาก PresentationInfo.readDocumentProperties สะท้อนเมตาดาต้าที่มีในเอกสารต้นทาง Aspose.Slides จะไม่โหลดและเดินทางผ่านโมเดลวัตถุการนำเสนอเพื่อคำนวณค่าต่าง ๆ ใหม่สำหรับการเรียกนี้ คุณสมบัติที่หายไปจะแสดงด้วยค่าเริ่มต้น และค่าที่จัดเก็บอาจล้าสมัยหากแอปพลิเคชันที่บันทึกไฟล์ครั้งสุดท้ายไม่ได้อัปเดตคุณสมบัติเข้าเอกสาร

  • PPTX: รูปแบบนี้ให้คุณสมบัติเข้าเอกสารเพิ่มสำหรับจำนวนสไลด์, โน้ต, สไลด์ที่ซ่อน, ย่อหน้า, คำ, และมัลติมีเดีย รวมถึง heading pairs และ part titles ความพร้อมใช้งานขึ้นอยู่กับว่าผู้สร้างเอกสารได้เขียนคุณสมบัติเหล่านั้นหรือไม่
  • PPT: รูปแบบไบนารีสามารถเก็บคุณสมบัติสรุปเอกสารที่สอดคล้องได้ หากคุณสมบัติใดหายไปหรือไม่ได้รับการรีเฟรชโดยผู้สร้างเอกสาร Aspose.Slides จะคืนค่าที่จัดเก็บหรือค่าเริ่มต้นแทนการคำนวณจากสไลด์
  • ODP: เมตาดาต้า OpenDocument ให้สถิติทั่วไปของเอกสาร เช่น จำนวนหน้า ย่อหน้า และคำ แต่ค่าดังกล่าวไม่สอดคล้องกับคุณสมบัติเพิ่มเติมของ PowerPoint ทุกอย่าง เมตาดาต้าของสไลด์ที่ซ่อน, โน้ตสไลด์, มัลติมีเดีย, heading‑pair, และ part‑title อาจไม่มีและคุณสมบัติรายการตรวจสอบอาจคืนค่าเริ่มต้น อย่าใช้ค่าเป็นศูนย์หรืออาเรย์ว่างเป็นหลักฐานยืนยันว่ามีเนื้อหาที่สอดคล้องไม่มีอยู่

ใช้วิธีเมตาดาต้าแบบน้ำหนักเบาสำหรับการสร้างรายการตรวจสอบและการตรวจสอบเบื้องต้น โหลดการนำเสนอและตรวจสอบโมเดลวัตถุแบบสดเมื่อผลลัพธ์ต้องสะท้อนการเปลี่ยนแปลงในหน่วยความจำหรือเมื่อคุณต้องการยืนยันเนื้อหาการนำเสนอจริง

อัปเดตคุณสมบัตินำเสนอ

คุณสมบัติที่คืนค่าจาก PresentationInfo.readDocumentProperties สามารถแก้ไขได้โดยไม่ต้องสร้างอินสแตนซ์ของ Presentation ใช้การเปลี่ยนแปลงด้วย PresentationInfo.updateDocumentProperties แล้วเขียนการนำเสนอที่ผูกไว้ด้วย PresentationInfo.writeBindedPresentation.

ภาพต่อไปนี้แสดงคุณสมบัติเข้าเอกสารต้นฉบับของการนำเสนอ PowerPoint:

คุณสมบัติเข้าเอกสารต้นฉบับของการนำเสนอ 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:

คุณสมบัติเอกสารที่อัปเดตของการนำเสนอ PowerPoint

ลิงก์ที่เป็นประโยชน์

สำหรับการตรวจสอบความปลอดภัยและการตั้งค่าการป้องกันที่เกี่ยวข้อง ดูบทความต่อไปนี้:

คำถามที่พบบ่อย

ฉันจะตรวจสอบได้อย่างไรว่าฟอนท์ถูกฝังอยู่และเป็นฟอนท์ใดบ้าง?

โหลดการนำเสนอและใช้ Presentation.getFontsManager เรียก FontsManager.getEmbeddedFonts เพื่อรับฟอนท์ที่ถูกฝัง และ FontsManager.getFonts เพื่อรับฟอนท์ที่การนำใช้ เปรียบเทียบผลลัพธ์สองชุดเพื่อหาฟอนท์ที่จำเป็นต่อการเรนเดอร์แต่ไม่ได้ฝังไว้

ฉันจะบอกได้อย่างรวดเร็วว่าไฟล์มีสไลด์ที่ซ่อนอยู่หรือไม่และจำนวนเท่าไร?

เมื่อเมตาดาต้าเอกสารที่จัดเก็บไว้เพียงพอ ให้อ่าน DocumentProperties.getHiddenSlides ผ่าน PresentationFactory.getPresentationInfo และ PresentationInfo.readDocumentProperties ซึ่งเหมาะสำหรับรายการตรวจสอบแบบน้ำหนักเบา หากการนำเสนอถูกแก้ไขในหน่วยความจำ เมตาดาต้าที่จัดเก็บอาจหายหรือเก่า หรือคุณต้องการตรวจสอบค่าที่เป็นสด ให้วนผ่าน Presentation.getSlides และตรวจสอบเมธอด Slide.getHidden ของแต่ละสไลด์แทน

ฉันสามารถตรวจจับได้หรือไม่ว่ามีการใช้ขนาดและการวางแนวสไลด์ที่กำหนดเองหรือไม่และว่ามันแตกต่างจากค่าเริ่มต้นหรือไม่?

ใช่ โหลดการนำเสนอและเรียก Presentation.getSlideSize ใช้ SlideSize.getType, SlideSize.getSize, และ SlideSize.getOrientation เพื่อเปรียบเทียบการตั้งค่าปัจจุบันกับค่าที่กำหนดไว้ล่วงหน้าและมิติที่คาดหวัง

มีวิธีเร็ว ๆ ที่จะตรวจสอบว่าชาร์ตอ้างอิงแหล่งข้อมูลภายนอกหรือไม่?

ใช่ ค้นหาแต่ละ Chart แล้วเรียก ChartData.getDataSourceType สำหรับเวิร์กบุ๊กภายนอก ให้เรียก ChartData.getExternalWorkbookPath ประเภทและเส้นทางของแหล่งข้อมูลบ่งชี้ถึงการอ้างอิงภายนอก แต่การตรวจสอบว่าปลายทางพร้อมใช้งานหรือไม่ต้องการการตรวจสอบทรัพยากรแยกต่างหาก

ฉันจะประเมินสไลด์ที่ ‘หนัก’ ที่อาจทำให้การเรนเดอร์หรือการส่งออกเป็น PDF ช้าลงได้อย่างไร?

ไม่มีคุณสมบัติความซับซ้อนเดียวที่จะบอกได้ให้เดินผ่าน Presentation.getSlides และคอลเลกชัน BaseSlide.getShapes ของแต่ละสไลด์ ใช้จำนวนรูปร่างและการมีอยู่ของภาพขนาดใหญ่ เอฟเฟกต์ แอนิเมชัน หรือมัลติมีเดียเป็นสัญญาณคัดกรอง และทำการวัดการเรนเดอร์หรือการส่งออกตัวอย่างก่อนที่จะถือว่าสไลด์เป็นคอขวดประสิทธิภาพที่ยืนยันแล้ว