Truy xuất và Cập nhật Thông tin Bài thuyết trình trong Python qua Java
Tổng quan
Aspose.Slides có thể xác định định dạng của một bài thuyết trình và đọc siêu dữ liệu tài liệu mà không cần tạo mô hình đối tượng bài thuyết trình hoàn chỉnh. Điều này hữu ích khi bạn cần phân loại tệp, xây dựng một danh mục, hoặc kiểm tra các thuộc tính trước khi quyết định có tải và xử lý nội dung bài thuyết trình hay không.
Các ví dụ yêu cầu Aspose.Slides cho Python thông qua Java và một môi trường chạy Java tương thích. Mỗi ví dụ sẽ khởi động JVM nếu nó chưa chạy. Cung cấp các tệp bài thuyết trình hiện có tại các đường dẫn được sử dụng trong các ví dụ.
Bài viết này trình bày cách kiểm tra nhẹ nhàng thông qua PresentationFactory và PresentationInfo, cũng như các cập nhật có mục tiêu thông qua DocumentProperties.
Kiểm tra Định dạng Bài Thuyết Trình
Nếu bạn đã có một bài thuyết trình đã tải, hãy xem Xác định Định dạng Bài thuyết trình Gốc để phát hiện sau khi tải và các hạn chế của các luồng PPT, PPS và POT kế thừa.
Sử dụng PresentationFactory.getPresentationInfo để kiểm tra một tệp mà không tạo một thể hiện Presentation. Phương thức PresentationInfo.getLoadFormat trả về định dạng được phát hiện, chẳng hạn PPTX, PPT hoặc ODP.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import LoadFormat, PresentationFactory
file_names = ["pres.pptx", "pres.ppt", "pres.odp"]
for file_name in file_names:
presentation_info = PresentationFactory.getInstance().getPresentationInfo(file_name)
load_format = presentation_info.getLoadFormat()
format_name = f"Other ({load_format})"
if load_format == LoadFormat.Pptx:
format_name = "PPTX"
elif load_format == LoadFormat.Ppt:
format_name = "PPT"
elif load_format == LoadFormat.Odp:
format_name = "ODP"
print(f"{file_name}: {format_name}")
Xây dựng Danh mục Bài Thuyết Trình Nhẹ
Khi bạn xử lý nhiều tệp bài thuyết trình, bạn có thể cần một danh mục gọn nhẹ để kiểm tra, lập chỉ mục hoặc hệ thống quản lý tài liệu. Trong trường hợp này, sử dụng PresentationFactory.getPresentationInfo để lấy một đối tượng PresentationInfo, sau đó gọi PresentationInfo.readDocumentProperties để đọc siêu dữ liệu tài liệu. Cách tiếp cận này không tạo một thể hiện Presentation hoặc yêu cầu bạn duyệt toàn bộ mô hình đối tượng bài thuyết trình.
Các thuộc tính mở rộng được DocumentProperties cung cấp các giá trị danh mục sau:
| Phương thức | Giá trị danh mục |
|---|---|
| getSlides | Tổng số slide. |
| getHiddenSlides | Số slide ẩn. |
| getNotes | Số slide có ghi chú. |
| getParagraphs | Tổng số đoạn văn, nếu có. |
| getWords | Tổng số từ. |
| getMultimediaClips | Tổng số đoạn âm thanh và video. |
Ví dụ sau đọc các giá trị này mà không tạo đối tượng Presentation và in ra một danh mục gọn nhẹ. Nó cũng kết hợp getHeadingPairs với getTitlesOfParts để hiển thị các nhóm nội dung như phông chữ, chủ đề và tiêu đề slide.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from pathlib import Path
from asposeslides.api import LoadFormat, PresentationFactory
file_path = "sample.pptx"
presentation_info = PresentationFactory.getInstance().getPresentationInfo(file_path)
document_properties = presentation_info.readDocumentProperties()
load_format = presentation_info.getLoadFormat()
format_name = f"Other ({load_format})"
if load_format == LoadFormat.Pptx:
format_name = "PPTX"
elif load_format == LoadFormat.Ppt:
format_name = "PPT"
elif load_format == LoadFormat.Odp:
format_name = "ODP"
print(f"File: {Path(file_path).name}")
print(f"Format: {format_name}")
print(f"Title: {document_properties.getTitle()}")
print(f"Author: {document_properties.getAuthor()}")
print("Statistics:")
print(f" Slides: {document_properties.getSlides()}")
print(f" Hidden slides: {document_properties.getHiddenSlides()}")
print(f" Slides with notes: {document_properties.getNotes()}")
print(f" Paragraphs: {document_properties.getParagraphs()}")
print(f" Words: {document_properties.getWords()}")
print(f" Multimedia clips: {document_properties.getMultimediaClips()}")
heading_pairs = document_properties.getHeadingPairs()
titles_of_parts = document_properties.getTitlesOfParts()
heading_pairs = heading_pairs if heading_pairs is not None else []
titles_of_parts = titles_of_parts if titles_of_parts is not None else []
part_index = 0
if len(heading_pairs) == 0 or len(titles_of_parts) == 0:
print("Content groups: not available")
else:
print("Content groups:")
for heading_pair in heading_pairs:
print(f" {heading_pair.getName()} ({heading_pair.getCount()})")
for part_offset in range(heading_pair.getCount()):
if part_index >= len(titles_of_parts):
break
print(f" - {titles_of_parts[part_index]}")
part_index += 1
if part_index < len(titles_of_parts):
print(" Other parts:")
while part_index < len(titles_of_parts):
print(f" - {titles_of_parts[part_index]}")
part_index += 1
Mỗi HeadingPair cung cấp tên nhóm và số mục trong nhóm đó. DocumentProperties.getTitlesOfParts trả về một mảng phẳng, có thứ tự, vì vậy tiêu thụ số tiêu đề liên tiếp được chỉ định bởi mỗi heading pair.
Siêu dữ liệu được lưu và Các hạn chế Định dạng
Các thuộc tính danh mục trả về bởi PresentationInfo.readDocumentProperties phản ánh siêu dữ liệu có trong tài liệu nguồn. Aspose.Slides không tải và duyệt mô hình đối tượng bài thuyết trình để tính lại các giá trị này cho lời gọi này. Các thuộc tính thiếu được biểu thị bằng giá trị mặc định, và các giá trị đã lưu có thể lỗi thời nếu ứng dụng đã lưu file cuối cùng không cập nhật các thuộc tính tài liệu.
- PPTX: Định dạng cung cấp các thuộc tính tài liệu mở rộng cho số slide, ghi chú, slide ẩn, đoạn văn, từ và đa phương tiện, cũng như heading pairs và tiêu đề phần. Tính khả dụng phụ thuộc vào các thuộc tính được nhà sản xuất tài liệu ghi.
- PPT: Định dạng nhị phân có thể lưu các thuộc tính tóm tắt tài liệu tương ứng. Nếu một thuộc tính nào đó thiếu hoặc không được nhà sản xuất tài liệu làm mới, Aspose.Slides sẽ trả về giá trị đã lưu hoặc mặc định thay vì tính toán từ các slide.
- ODP: Siêu dữ liệu OpenDocument cung cấp thống kê chung của tài liệu, chẳng hạn số trang, đoạn văn và từ, nhưng các giá trị này không khớp với mọi thuộc tính mở rộng đặc thù của PowerPoint. Siêu dữ liệu slide ẩn, slide ghi chú, đa phương tiện, heading-pair và tiêu đề phần có thể không có, và các thuộc tính danh mục có thể trả về giá trị mặc định. Đừng coi giá trị zero hoặc mảng rỗng là bằng chứng chắc chắn rằng nội dung tương ứng không tồn tại.
Sử dụng cách tiếp cận siêu dữ liệu nhẹ cho danh mục và kiểm tra sơ bộ. Tải bài thuyết trình và kiểm tra mô hình đối tượng đang hoạt động khi kết quả cần phản ánh các thay đổi trong bộ nhớ hoặc khi bạn cần xác thực nội dung thực tế của bài thuyết trình.
Cập nhật Thuộc tính Bài Thuyết Trình
Các thuộc tính trả về bởi PresentationInfo.readDocumentProperties cũng có thể được thay đổi mà không tạo một thể hiện Presentation. Áp dụng các thay đổi bằng PresentationInfo.updateDocumentProperties, sau đó ghi bài thuyết trình đã liên kết bằng PresentationInfo.writeBindedPresentation.
Hình ảnh sau hiển thị các thuộc tính tài liệu gốc.

Ví dụ sau thay đổi tiêu đề và thời gian lưu lần cuối và ghi kết quả vào một tệp mới:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import PresentationFactory
from java.io import FileOutputStream
from java.util import Date
source_file = "sample.pptx"
output_file = "sample_with_updated_properties.pptx"
presentation_info = PresentationFactory.getInstance().getPresentationInfo(source_file)
document_properties = presentation_info.readDocumentProperties()
document_properties.setTitle("Quarterly sales report")
last_saved_time = Date()
document_properties.setLastSavedTime(last_saved_time)
presentation_info.updateDocumentProperties(document_properties)
output_stream = FileOutputStream(output_file)
try:
presentation_info.writeBindedPresentation(output_stream)
finally:
output_stream.close()
Hình ảnh sau hiển thị các thuộc tính tài liệu đã cập nhật.

Liên kết hữu ích
Đối với các kiểm tra bảo mật và cài đặt bảo vệ liên quan, xem các bài viết sau:
Câu hỏi thường gặp
Làm sao tôi có thể kiểm tra xem phông chữ có được nhúng hay không và chúng là những phông nào?
Tải bài thuyết trình và sử dụng Presentation.getFontsManager. Gọi FontsManager.getEmbeddedFonts để lấy các phông chữ đã nhúng và FontsManager.getFonts để lấy các phông chữ được sử dụng trong bài thuyết trình. So sánh hai kết quả để tìm các phông chữ cần thiết cho việc hiển thị nhưng chưa được nhúng.
Làm sao tôi có thể nhanh chóng xác định tệp có slide ẩn hay không và có bao nhiêu?
Khi siêu dữ liệu tài liệu đã lưu đủ, đọc DocumentProperties.getHiddenSlides qua PresentationFactory.getPresentationInfo và PresentationInfo.readDocumentProperties. Điều này phù hợp cho một danh mục nhẹ. Nếu bài thuyết trình đã được chỉnh sửa trong bộ nhớ, siêu dữ liệu đã lưu có thể thiếu hoặc lỗi thời, hoặc bạn cần xác minh các giá trị hiện thời, hãy duyệt qua Presentation.getSlides và kiểm tra phương thức Slide.getHidden của mỗi slide.
Tôi có thể phát hiện liệu kích thước và hướng slide tùy chỉnh có được sử dụng hay không, và chúng có khác so với mặc định không?
Có. Tải bài thuyết trình và gọi Presentation.getSlideSize. Sử dụng SlideSize.getType, SlideSize.getSize, và SlideSize.getOrientation để so sánh cài đặt hiện tại với preset và kích thước mong đợi.
Có cách nhanh chóng để xem biểu đồ có tham chiếu nguồn dữ liệu bên ngoài không?
Có. Định vị mỗi Chart và gọi ChartData.getDataSourceType. Đối với workbook bên ngoài, gọi ChartData.getExternalWorkbookPath. Loại nguồn dữ liệu và đường dẫn xác định một tham chiếu bên ngoài, nhưng việc xác minh mục tiêu có sẵn hay không cần một kiểm tra tài nguyên riêng.
Làm sao tôi có thể đánh giá các slide ‘nặng’ có thể làm chậm việc render hoặc xuất PDF?
Không có một thuộc tính độ phức tạp duy nhất. Duyệt Presentation.getSlides và bộ sưu tập BaseSlide.getShapes của mỗi slide. Sử dụng số lượng shape và sự hiện diện của hình ảnh lớn, hiệu ứng, hoạt ảnh hoặc đa phương tiện như các tín hiệu lọc, và đo một lần render hoặc xuất mẫu trước khi coi một slide là nút thắt hiệu năng đã được xác nhận.