Xác định Định dạng Bản trình bày Gốc trong .NET

Tổng quan

Sau khi tải một bản trình bày, đọc thuộc tính chỉ đọc Presentation.SourceFormat để xác định định dạng gốc của nó. Thuộc tính này cũng có sẵn thông qua IPresentation.SourceFormat. Sử dụng nó khi quá trình xử lý tiếp theo phụ thuộc vào định dạng mà thể hiện hiện tại được tải.

Định dạng nguồn khác với SaveFormat được chọn cho tệp đầu ra. Lưu dưới định dạng khác không làm thay đổi định dạng nguồn của thể hiện hiện có.

Đọc Định dạng Nguồn của Tệp

Ví dụ này yêu cầu một tệp sample.pptx hiện có. Nó tải tệp và chọn chính sách xử lý ứng dụng bằng cách sử dụng Presentation.SourceFormat, thay vì tên tệp. Thay đổi đường dẫn đầu vào để thử các định dạng khác. Ví dụ in ra chính sách đã chọn; thay thế các thông báo bằng logic ứng dụng của bạn.

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;
}

Nhận dạng Các Giá trị Hỗ trợ

Kiểu liệt kê SourceFormat phân biệt các định dạng bản trình bày sau. Các phần mở rộng dưới đây là phần mở rộng thông thường, không phải là việc tái tạo tên tệp gốc.

Giá trị SourceFormat Phần mở rộng Định dạng
Ppt .ppt Bản trình bày PowerPoint 97–2003
Pptx .pptx Bản trình bày Office Open XML
Pptm .pptm Bản trình bày Office Open XML có hỗ trợ macro
Pps .pps Trình chiếu PowerPoint 97–2003
Ppsx .ppsx Trình chiếu Office Open XML
Ppsm .ppsm Trình chiếu Office Open XML có hỗ trợ macro
Pot .pot Mẫu PowerPoint 97–2003
Potx .potx Mẫu Office Open XML
Potm .potm Mẫu Office Open XML có hỗ trợ macro
Odp .odp Bản trình bày OpenDocument
Otp .otp Mẫu trình bày OpenDocument
Fodp .fodp Bản trình bày Flat XML ODF
Xml .xml Bản trình bày PowerPoint XML

Đọc Định dạng Nguồn của Luồng

Ví dụ này yêu cầu một tệp sample.pps hiện có. Đọc các byte của nó vào một luồng bộ nhớ mô phỏng đầu vào nhận được mà không có tên tệp, chẳng hạn như giá trị trong cơ sở dữ liệu hoặc mảng byte được tải lên. Hàm khởi tạo Presentation chỉ nhận luồng.

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 và POT sử dụng cùng một định dạng nhị phân nền. Khi tải bằng đường dẫn tệp, phần mở rộng có thể giúp phân biệt trình chiếu hoặc mẫu. Khi không có tên tệp, nội dung PPS và POT cũ có thể được báo cáo là SourceFormat.Ppt; ví dụ PPS ở trên báo cáo Ppt.

Nếu ứng dụng của bạn cần giữ lại sự phân biệt này, hãy lưu tên tệp gốc hoặc siêu dữ liệu phụ loại riêng biệt. Phần mở rộng là gợi ý hữu ích cho các phụ loại cũ này, nhưng không nên là cơ sở duy nhất để xác định nội dung bản trình bày bất kỳ.

So sánh Phát hiện Trước và Sau Khi Tải

Sử dụng PresentationFactory.GetPresentationInfoIPresentationInfo.LoadFormat khi bạn cần kiểm tra tệp trước khi tải toàn bộ mô hình đối tượng bản trình bày. Sử dụng Presentation.SourceFormat khi thể hiện đã tồn tại.

Ví dụ này yêu cầu sample.pptx và in ra Pptx cho cả hai kiểm tra. Trong môi trường thực tế, chọn API phù hợp với giai đoạn xử lý của bạn; một bản trình bày đã được tải không cần kiểm tra lại chỉ để lấy định dạng nguồn.

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}");

Kết quả có các kiểu liệt kê khác nhau: LoadFormatSourceFormat. Không so sánh chúng bằng cách ép kiểu giá trị số hoặc giả định rằng mọi định dạng đều có kết quả phát hiện giống nhau. Trong kiểm tra lưu và mở lại được mô tả dưới đây, PowerPoint XML được báo cáo là LoadFormat.Unknown trước khi tải và SourceFormat.Xml sau khi tải.

Giữ Định dạng Nguồn và Định dạng Đầu ra Riêng biệt

Ví dụ này yêu cầu sample.pptx và ghi converted.odp. Nó in ra Pptx cả trước và sau khi lưu thể hiện gốc. Chỉ thể hiện mới được tải từ đầu ra ODP mới báo cáo 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}");

Một bản trình bày được tạo mới từ đầu bằng new Presentation() báo cáo SourceFormat.Pptx. Nó không có tệp đầu vào: đây là giá trị mặc định cho một thể hiện mới tạo, không phải bằng chứng rằng một tệp PPTX đã được tải. Theo dõi riêng việc ứng dụng của bạn tạo hay tải thể hiện nếu sự phân biệt này quan trọng.

Ánh xạ Định dạng Nguồn sang Phần mở rộng

Ví dụ sau yêu cầu sample.pptx. Nó ánh xạ mỗi giá trị SourceFormat hiện được hỗ trợ sang một phần mở rộng thông thường, mà không phân tích tên tệp đầu vào. Cơ chế dự phòng tránh việc gán phần mở rộng một cách im lặng cho giá trị không nhận dạng được.

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

Ánh xạ này không chuyển đổi tệp hoặc khôi phục phụ loại PPS/POT cũ bị mất trong quá trình tải luồng. Đối với việc lưu thực tế, hãy chọn một SaveFormat một cách rõ ràng, hoặc sử dụng chuyển đổi được trình bày trong Save Presentations in Their Original Format.

Xác minh Định dạng bằng cách Lưu và Mở lại

Ví dụ tự chứa này tạo một bản trình bày và ghi ba tệp trong thư mục làm việc, ghi đè các tệp cùng tên. Nó mở lại mỗi đầu ra cả bằng đường dẫn và qua luồng bộ nhớ. Đối với PPTX và ODP, cả hai cách đều báo cáo định dạng đã lưu. Đối với PPS, tải bằng đường dẫn báo cáo Pps, trong khi tải cùng các byte mà không có tên tệp báo cáo 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}");
}

Kiểm tra tương tự với tất cả các định dạng đã liệt kê ở trên đã cho ra các kết quả sau cho các bản trình bày được tạo ra với phần mở rộng phù hợp:

Định dạng đã lưu SourceFormat từ đường dẫn tệp SourceFormat từ luồng không tên
PPT Ppt Ppt
PPTX, PPTM Pptx, Pptm respectively Giống như đường dẫn tệp
PPS Pps Ppt
PPSX, PPSM Ppsx, Ppsm respectively Giống như đường dẫn tệp
POT Pot Ppt
POTX, POTM Potx, Potm respectively Giống như đường dẫn tệp
ODP, OTP Odp, Otp respectively Giống như đường dẫn tệp
FODP Fodp Fodp
PowerPoint XML Xml Xml

Trong các kiểm tra này, việc chuẩn hoá định dạng nguồn duy nhất là PPS/POT thành Ppt cho các luồng không tên. Bảng mô tả việc xác định định dạng, không phải việc bảo tồn mọi tính năng của bản trình bày trong quá trình chuyển đổi.

Câu hỏi thường gặp

Lưu dưới dạng ODP có thay đổi định dạng nguồn của bản trình bày được tải từ PPTX không?

Không. Thể hiện hiện có vẫn báo cáo Pptx. Một thể hiện được tải từ tệp ODP đã lưu sẽ báo cáo Odp.

Luồng có thể luôn phân biệt được bản trình bày, trình chiếu và mẫu cổ không?

Không. PPT, PPS và POT chia sẻ cùng định dạng nhị phân. Hãy giữ tên tệp hoặc siêu dữ liệu phụ loại riêng biệt khi cần phân biệt.

Nên sử dụng API nào nếu bản trình bày đã được tải?

Đọc Presentation.SourceFormat. Sử dụng PresentationFactory.GetPresentationInfo để kiểm tra trước khi tải.