Xác định Định dạng Bản trình chiếu Gốc trong Python
Tổng quan
Sau khi tải một bản trình chiếu, đọc thuộc tính chỉ đọc Presentation.source_format để xác định định dạng gốc của nó. Sử dụng thuộc tính này khi các xử lý tiếp theo phụ thuộc vào định dạng mà phiên bản hiện tại được tải từ.
Định dạng nguồn khác với SaveFormat được chọn cho tệp đầu ra. Lưu sang định dạng khác không làm thay đổi định dạng nguồn của phiên bả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 đã tồn tại. 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.source_format, thay vì dựa vào 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; hãy thay thế các thông báo bằng logic ứng dụng của bạn.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
source_format = presentation.source_format
if source_format in (slides.SourceFormat.PPT, slides.SourceFormat.PPS, slides.SourceFormat.POT):
print("Use the legacy PowerPoint processing policy.")
elif source_format == slides.SourceFormat.PPTX:
print("Use the standard PPTX processing policy.")
else:
print(f"Use the general policy for {source_format.name}.")
Nhận Diện 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 chiếu sau. Các phần mở rộng dưới đây là các phần mở rộng thông thường, không phải là việc tái tạo lại tên tệp gốc.
| Giá trị SourceFormat | Phần mở rộng | Định dạng |
|---|---|---|
PPT |
.ppt |
Bản trình chiếu PowerPoint 97–2003 |
PPTX |
.pptx |
Bản trình chiếu Office Open XML |
PPTM |
.pptm |
Bản trình chiếu Office Open XML có 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ó macro |
POT |
.pot |
Mẫu PowerPoint 97–2003 |
POTX |
.potx |
Mẫu Office Open XML |
POTM |
.potm |
Mẫu Office Open XML có macro |
ODP |
.odp |
Bản trình chiếu OpenDocument |
OTP |
.otp |
Mẫu bản trình chiếu OpenDocument |
FODP |
.fodp |
Bản trình chiếu ODF XML phẳng |
XML |
.xml |
Bản trình chiếu PowerPoint XML |
Đọc Định Dạng Nguồn Từ Luồng
Ví dụ này yêu cầu một tệp sample.pps đã tồn tại. Đọ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ột mảng byte được tải lên. Hàm tạo Presentation chỉ nhận luồng.
import io
import aspose.slides as slides
with open("sample.pps", "rb") as input_file:
data = input_file.read()
with io.BytesIO(data) as stream:
with slides.Presentation(stream) as presentation:
print(f"Source format: {presentation.source_format.name}")
PPT, PPS và POT sử dụng cùng một định dạng nhị phân cơ bản. Khi tải bằng đường dẫn tệp, phần mở rộng có thể giúp phân biệt giữa 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 là SourceFormat.PPT; ví dụ PPS ở trên báo PPT.
Nếu ứng dụng của bạn cần giữ sự phân biệt này, hãy lưu lại 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à một 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 chiếu bất kỳ.
So Sánh Phát Hiện Trước và Sau Khi Tải
Sử dụng PresentationFactory.get_presentation_info và PresentationInfo.load_format khi bạn cần kiểm tra một tệp trước khi tải toàn bộ mô hình đối tượng bản trình chiếu. Sử dụng Presentation.source_format khi phiên bả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 chiếu đã được tải không cần kiểm tra lại chỉ để lấy định dạng nguồn.
import aspose.slides as slides
path = "sample.pptx"
information = slides.PresentationFactory.instance.get_presentation_info(path)
print(f"Before loading: {information.load_format.name}")
with slides.Presentation(path) as presentation:
print(f"After loading: {presentation.source_format.name}")
Kết quả có các kiểu liệt kê khác nhau: LoadFormat và SourceFormat. Đừng so sánh chúng bằng cách ép kiểu giá trị số hoặc cho rằng mỗi định dạng có kết quả phát hiện giống nhau. Trong kiểm tra lưu‑và‑mở lại được mô tả bên dưới, PowerPoint XML được báo là LoadFormat.UNKNOWN trước khi tải và SourceFormat.XML sau khi tải.
Giữ Định Dạng Nguồn và Đầ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 phiên bản gốc. Chỉ bản mới được tải từ đầu ra ODP mới báo ODP.
import aspose.slides as slides
with slides.Presentation("sample.pptx") as presentation:
print(f"Before saving: {presentation.source_format.name}")
presentation.save("converted.odp", slides.export.SaveFormat.ODP)
print(f"After saving: {presentation.source_format.name}")
with slides.Presentation("converted.odp") as reopened:
print(f"Reopened output: {reopened.source_format.name}")
Một bản trình chiếu được tạo mới bằng slides.Presentation() báo SourceFormat.PPTX. Nó không có tệp đầu vào: đây là giá trị mặc định cho một phiên bản mới tạo, không phải bằng chứng rằng đã tải một tệp PPTX. Theo dõi xem ứng dụng của bạn đã tạo hay đã tải phiên bản riêng biệt nếu sự khác biệt này quan trọng.
Ánh Xạ Định Dạng Nguồn Thành 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. Phương án 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 diện được.
import aspose.slides as slides
extensions = {
slides.SourceFormat.PPT: ".ppt",
slides.SourceFormat.PPTX: ".pptx",
slides.SourceFormat.PPTM: ".pptm",
slides.SourceFormat.PPS: ".pps",
slides.SourceFormat.PPSX: ".ppsx",
slides.SourceFormat.PPSM: ".ppsm",
slides.SourceFormat.POT: ".pot",
slides.SourceFormat.POTX: ".potx",
slides.SourceFormat.POTM: ".potm",
slides.SourceFormat.ODP: ".odp",
slides.SourceFormat.OTP: ".otp",
slides.SourceFormat.FODP: ".fodp",
slides.SourceFormat.XML: ".xml",
}
with slides.Presentation("sample.pptx") as presentation:
extension = extensions.get(presentation.source_format)
print(extension if extension is not None else "No extension mapping is available.")
Ánh xạ này không chuyển đổi tệp hoặc khôi phục lại phụ loại PPS/POT cũ bị mất khi tải từ 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 quy trình chuyển đổi được mô tả trong Save Presentations in Their Original Format.
Xác Thực Đị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 chiếu 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 vừa bằng đường dẫn vừa qua một luồng bộ nhớ. Đối với PPTX và ODP, cả hai cách đều báo định dạng đã lưu. Đối với PPS, tải bằng đường dẫn báo PPS, trong khi tải cùng các byte mà không có tên tệp báo PPT.
import io
import aspose.slides as slides
formats = [slides.export.SaveFormat.PPTX, slides.export.SaveFormat.ODP, slides.export.SaveFormat.PPS]
with slides.Presentation() as presentation:
for output_format in formats:
path = f"roundtrip.{output_format.name.lower()}"
presentation.save(path, output_format)
with open(path, "rb") as input_file:
data = input_file.read()
with slides.Presentation(path) as from_file:
with io.BytesIO(data) as stream:
with slides.Presentation(stream) as from_stream:
print(f"{output_format.name}: file={from_file.source_format.name}, stream={from_stream.source_format.name}")
Kiểm tra tương tự với tất cả các định dạng đã liệt kê ở trên cho các bản trình chiếu được tạo có phần mở rộng tương ứng cho ra các kết quả sau:
| Đị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 tương ứng |
Giống như đường dẫn tệp |
| PPS | PPS |
PPT |
| PPSX, PPSM | PPSX, PPSM tương ứng |
Giống như đường dẫn tệp |
| POT | POT |
PPT |
| POTX, POTM | POTX, POTM tương ứng |
Giống như đường dẫn tệp |
| ODP, OTP | ODP, OTP tương ứng |
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á duy nhất của định dạng nguồn là PPS/POT thành PPT cho các luồng không tên. Bảng mô tả cách xác định định dạng, không phải việc bảo toàn mọi tính năng bản trình chiếu trong quá trình chuyển đổi.
Câu Hỏi Thường Gặp
Việc lưu sang ODP có thay đổi định dạng nguồn của bản trình chiếu đã được tải từ PPTX không?
Không. Phiên bản hiện có vẫn báo PPTX. Phiên bản được tải từ tệp ODP đã lưu sẽ báo ODP.
Luồng có luôn phân biệt được bản trình chiếu cổ, trình chiếu và mẫu không?
Không. PPT, PPS và POT chia sẻ cùng một định dạng nhị phân. Giữ lại tên tệp hoặc siêu dữ liệu phụ loại riêng khi cần phân biệt này.
Nên dùng API nào nếu bản trình chiếu đã được tải?
Đọc Presentation.source_format. Sử dụng PresentationFactory.get_presentation_info để kiểm tra trước khi tải.