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.GetPresentationInfo và IPresentationInfo.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: LoadFormat và SourceFormat. 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.