ตรวจสอบรูปแบบการนำเสนอดั้งเดิมใน .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 การนำเสนอ Flat XML ODF
Xml .xml การนำเสนอ PowerPoint XML

อ่านรูปแบบต้นทางของสตรีม

ตัวอย่างนี้ต้องการไฟล์ sample.pps ที่มีอยู่แล้ว การอ่านไบต์ของไฟล์นี้เข้าสู่ memory stream เป็นการจำลองอินพุตที่ได้รับโดยไม่มีชื่อไฟล์ เช่น ค่าจากฐานข้อมูลหรืออาร์เรย์ไบต์ที่อัปโหลด ตัวสร้าง 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 ใช้รูปแบบไบนารีพื้นฐานเดียวกัน เมื่อโหลดโดยใช้เส้นทางไฟล์ ส่วนต่อขยายสามารถช่วยแยกสไลด์โชว์หรือแม่แบบได้ หากไม่มีชื่อไฟล์ เนื้อหาแบบ legacy ของ PPS และ POT อาจถูกรายงานเป็น SourceFormat.Ppt; ตัวอย่าง PPS ด้านบนรายงาน Ppt

หากแอปพลิเคชันของคุณจำเป็นต้องรักษาความแตกต่างนี้ ควรเก็บชื่อไฟล์ต้นฉบับหรือเมทาดาต้าย่อยแยกไว้ ส่วนต่อขยายเป็นข้อมูลบ่งชี้ที่เป็นประโยชน์สำหรับย่อยแบบ legacy เหล่านี้ แต่ไม่ควรเป็นพื้นฐานเดียวในการระบุเนื้อหาการนำเสนอใด ๆ

เปรียบเทียบการตรวจจับก่อนและหลังการโหลด

ใช้ 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.");

การแมปนี้ไม่ได้แปลงไฟล์หรือกู้คืนย่อยแบบ legacy ของ PPS/POT ที่สูญหายระหว่างการโหลดสตรีม สำหรับการบันทึกจริง ให้เลือก SaveFormat อย่างชัดเจน หรือใช้การแปลงที่แสดงใน Save Presentations in Their Original Format

ตรวจสอบรูปแบบโดยการบันทึกและเปิดใหม่

ตัวอย่างแบบอิสระนี้สร้างการนำเสนอและเขียนไฟล์สามไฟล์ในไดเรกทอรีทำงาน ทับไฟล์ที่มีชื่อเดียวกัน มันเปิดไฟล์ผลลัพธ์แต่ละไฟล์ใหม่ทั้งโดยเส้นทางและผ่าน memory stream สำหรับ 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 สำหรับสตรีมที่ไม่มีชื่อ ตารางอธิบายการระบุรูปแบบ ไม่ได้หมายถึงการคงคุณลักษณะการนำเสนอทุกอย่างระหว่างการแปลง

FAQ

การบันทึกเป็น ODP จะเปลี่ยนรูปแบบต้นทางของการนำเสนอที่โหลดจาก PPTX หรือไม่?

ไม่. อินสแตนซ์ที่มีอยู่ยังคงรายงาน Pptx. อินสแตนซ์ที่โหลดจากไฟล์ ODP ที่บันทึกไว้จะรายงาน Odp.

สตรีมสามารถแยกการนำเสนอ, สไลด์โชว์, และแม่แบบแบบ legacy ได้เสมอหรือไม่?

ไม่. PPT, PPS, และ POT ใช้รูปแบบไบนารีเดียวกัน ควรเก็บชื่อไฟล์หรือเมทาดาต้าย่อยแยกไว้เมื่อความแตกต่างนี้จำเป็น

ควรใช้ API ใดหากการนำเสนอถูกโหลดแล้ว?

อ่าน Presentation.SourceFormat. ใช้ PresentationFactory.GetPresentationInfo สำหรับการตรวจสอบก่อนการโหลด.