Lưu Bản Trình Chiếu trong Python qua Java
Tổng quan
Sau khi bạn tạo một bản trình chiếu hoặc mở một bản hiện có, sử dụng phương thức Presentation.save để ghi kết quả. Aspose.Slides cho Python qua Java có thể lưu một bản trình chiếu vào tệp hoặc luồng ở định dạng PowerPoint, OpenDocument, PDF và các định dạng khác. Các phần sau đây đề cập đến các thao tác lưu chuẩn và các tùy chọn có sẵn cho đầu ra PPTX.
Lưu Bản Trình Chiếu vào Tệp
Để lưu một bản trình chiếu vào tệp, truyền đường dẫn đầu ra và một giá trị SaveFormat vào phương thức Presentation.save. Giá trị định dạng xác định loại tệp mà Aspose.Slides tạo.
Ví dụ sau tạo một bản trình chiếu và lưu nó dưới dạng tệp PPTX:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation()
try:
# Thêm hoặc chỉnh sửa nội dung bản trình chiếu ở đây.
presentation.save("Output.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Lưu Bản Trình Chiếu ở Định Dạng Gốc
Trong một ứng dụng xử lý hàng loạt, định dạng đầu vào có thể không được biết trước. Sau khi tải tệp, đọc định dạng gốc của nó từ phương thức Presentation.getSourceFormat. Truyền giá trị SourceFormat thu được vào SlideUtil.toSaveFormat để nhận giá trị SaveFormat tương ứng, sau đó sử dụng Presentation.save để ghi bản trình chiếu đã sửa đổi.
Ví dụ hoàn chỉnh sau xử lý mọi tệp trong một thư mục đầu vào, cập nhật tiêu đề của chúng và lưu vào một thư mục đầu ra ở định dạng mà chúng đã được tải:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SlideUtil
from pathlib import Path
IllegalArgumentException = jpype.JClass("java.lang.IllegalArgumentException")
input_directory = Path("Input")
output_directory = Path("Output")
try:
output_directory.mkdir(parents=True, exist_ok=True)
except OSError:
print("Cannot create the output directory.")
if input_directory.is_dir() and output_directory.is_dir():
for input_file in input_directory.iterdir():
if input_file.is_file():
try:
presentation = Presentation(str(input_file))
try:
save_format = SlideUtil.toSaveFormat(presentation.getSourceFormat())
presentation.getDocumentProperties().setTitle("Processed by the batch application")
output_file = output_directory / input_file.name
presentation.save(str(output_file), save_format)
finally:
presentation.dispose()
except IllegalArgumentException as exception:
print(f"Cannot map the source format of '{input_file}': {exception}")
except Exception as exception:
print(f"Cannot process '{input_file}': {exception}")
SlideUtil.toSaveFormat ánh xạ các định dạng PPT, PPTX, ODP, PPTM, PPSX, PPSM, POTX, POTM, PPS, POT, OTP, FODP và PowerPoint XML sang các định dạng lưu bản trình chiếu tương ứng. Nó chỉ ánh xạ các định dạng nguồn của bản trình chiếu; không dùng để chọn các định dạng xuất như PDF, HTML, TIFF hoặc hình ảnh. Truyền một giá trị SourceFormat không được hỗ trợ hoặc không hợp lệ sẽ gây ra một IllegalArgumentException.
Các tệp PPT, PPS và POT cổ điển sử dụng cùng một container nhị phân. Khi một bản trình chiếu như vậy được tải từ luồng mà không có phần mở rộng tệp, một tệp PPS hoặc POT có thể bị xác định là PPT. Nếu cần bảo tồn các kiểu phụ cổ điển này, hãy giữ nguyên tên tệp gốc hoặc siêu dữ liệu định dạng riêng và sử dụng chúng khi chọn tên tệp và định dạng đầu ra.
Lưu Bản Trình Chiếu vào Luồng
Để ghi một bản trình chiếu mà không dựa vào đường dẫn tệp cuối cùng, truyền một luồng có thể ghi và một giá trị SaveFormat vào phương thức Presentation.save. Cách tiếp cận này hữu ích khi đầu ra phải được trả về từ dịch vụ web, lưu trong cơ sở dữ liệu hoặc xử lý trong bộ nhớ.
Ví dụ sau lưu một bản trình chiếu mới vào luồng tệp:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
FileOutputStream = jpype.JClass("java.io.FileOutputStream")
presentation = Presentation()
try:
output_stream = FileOutputStream("Output.pptx")
try:
presentation.save(output_stream, SaveFormat.Pptx)
finally:
output_stream.close()
finally:
presentation.dispose()
Lưu Bản Trình Chiếu với Kiểu Hiển Thị Được Định Nghĩa Trước
Bạn có thể chỉ định chế độ hiển thị mà PowerPoint mở bản trình chiếu đã lưu ban đầu. Sử dụng phương thức ViewProperties.setLastView với một giá trị ViewType trước khi lưu.
Ví dụ sau cấu hình chế độ hiển thị Slide Master làm chế độ hiển thị ban đầu:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, ViewType
presentation = Presentation()
try:
presentation.getViewProperties().setLastView(ViewType.SlideMasterView)
presentation.save("SlideMasterView.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Lưu Bản Trình Chiếu ở Định Dạng Office Open XML Chặt Chẽ
Để tạo một tệp PPTX tuân thủ hồ sơ Strict của Office Open XML, tạo một thể hiện PptxOptions và sử dụng phương thức setConformance với Conformance.Iso29500_2008_Strict. Sau đó truyền các tùy chọn này vào phương thức Presentation.save.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Conformance, PptxOptions, Presentation, SaveFormat
options = PptxOptions()
options.setConformance(Conformance.Iso29500_2008_Strict)
presentation = Presentation()
try:
presentation.save("StrictOfficeOpenXml.pptx", SaveFormat.Pptx, options)
finally:
presentation.dispose()
Lưu Bản Trình Chiếu ở Định Dạng Office Open XML ở Chế Độ Zip64
Một kho lưu trữ ZIP chuẩn giới hạn kích thước nén và không nén của mỗi mục, tổng kích thước kho lưu và số lượng mục. Vì tệp PPTX là một kho ZIP, một bản trình chiếu rất lớn có thể vượt quá các giới hạn này. Các phần mở rộng ZIP64 nâng cao các giới hạn kích thước và số mục áp dụng.
Sử dụng phương thức PptxOptions.setZip64Mode để kiểm soát việc Aspose.Slides có ghi phần mở rộng ZIP64 hay không:
- IfNecessary chỉ sử dụng ZIP64 khi bản trình chiếu vượt quá giới hạn ZIP chuẩn. Đây là chế độ mặc định.
- Never vô hiệu hoá phần mở rộng ZIP64.
- Always luôn ghi phần mở rộng ZIP64.
Ví dụ sau luôn bật phần mở rộng ZIP64 cho bản trình chiếu đầu ra:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import PptxOptions, Presentation, SaveFormat, Zip64Mode
presentation = Presentation("Sample.pptx")
try:
options = PptxOptions()
options.setZip64Mode(Zip64Mode.Always)
presentation.save("OutputZip64.pptx", SaveFormat.Pptx, options)
finally:
presentation.dispose()
Cảnh báo
Nếu Zip64Mode.Never được sử dụng và bản trình chiếu không thể nằm trong giới hạn ZIP chuẩn, thao tác lưu sẽ ném ra một PptxException.Lưu Bản Trình Chiếu ở Định Dạng Office Open XML với Các Mức Nén
Đối với đầu ra PPTX, bạn có thể cân bằng tốc độ lưu và kích thước tệp bằng cách sử dụng phương thức PptxOptions.setCompressionLevel. Lớp CompressionLevel cung cấp các giá trị sau:
- None lưu dữ liệu mà không nén.
- Level1 cung cấp mức nén nhanh nhất và đầu ra nén lớn nhất.
- Level2 đến Level5 dần ưu tiên đầu ra nhỏ hơn hơn tốc độ lưu.
- Level6 cân bằng tốc độ lưu và kích thước tệp. Đây là mức mặc định.
- Level7 và Level8 tiếp tục ưu tiên đầu ra nhỏ hơn hơn tốc độ lưu.
- Level9 cung cấp mức nén mạnh nhất và yêu cầu thời gian xử lý lâu nhất.
Ví dụ sau lưu một bản trình chiếu mà không nén:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import CompressionLevel, PptxOptions, Presentation, SaveFormat
presentation = Presentation("Sample.pptx")
try:
options = PptxOptions()
options.setCompressionLevel(CompressionLevel.None_)
presentation.save("OutputNoCompression.pptx", SaveFormat.Pptx, options)
finally:
presentation.dispose()
Ví dụ sau sử dụng mức nén tối đa:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import CompressionLevel, PptxOptions, Presentation, SaveFormat
presentation = Presentation("Sample.pptx")
try:
options = PptxOptions()
options.setCompressionLevel(CompressionLevel.Level9)
presentation.save("OutputMaximumCompression.pptx", SaveFormat.Pptx, options)
finally:
presentation.dispose()
Lưu Bản Trình Chiếu mà Không Làm Mới Hình Thu Nhỏ
Khi một bản trình chiếu được lưu dưới dạng PPTX, phương thức PptxOptions.setRefreshThumbnail kiểm soát ảnh thu nhỏ của tài liệu:
Truetạo lại ảnh thu nhỏ trong quá trình lưu. Đây là giá trị mặc định.Falsegiữ lại ảnh thu nhỏ hiện có. Nếu bản trình chiếu không có ảnh thu nhỏ, Aspose.Slides sẽ không tạo mới.
Ví dụ sau lưu một bản trình chiếu mà không làm mới ảnh thu nhỏ của nó:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import PptxOptions, Presentation, SaveFormat
presentation = Presentation("Sample.pptx")
try:
options = PptxOptions()
options.setRefreshThumbnail(False)
presentation.save("Output.pptx", SaveFormat.Pptx, options)
finally:
presentation.dispose()
Ghi chú
Tắt việc làm mới ảnh thu nhỏ có thể giảm thời gian cần thiết để lưu tệp PPTX.Báo Cáo Tiến Trình Lưu dưới Dạng Phần Trăm
Để giám sát một thao tác lưu, đăng ký một bộ xử lý tiến trình Python thông qua jpype.JProxy và truyền nó vào phương thức SaveOptions.setProgressCallback. Aspose.Slides sau đó sẽ gọi phương thức reporting của bộ xử lý với các giá trị tiến độ trong quá trình xuất.
Ví dụ sau báo cáo tiến độ xuất PDF lên console:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import PdfOptions, Presentation, SaveFormat
class ExportProgressHandler:
def reporting(self, progress_value):
progress = int(progress_value)
print(f"{progress}% of the file has been converted.")
handler = ExportProgressHandler()
callback = jpype.JProxy("com.aspose.slides.IProgressCallback", inst=handler)
options = PdfOptions()
options.setProgressCallback(callback)
presentation = Presentation("Sample.pptx")
try:
presentation.save("Output.pdf", SaveFormat.Pdf, options)
finally:
presentation.dispose()
Ghi chú
Aspose cung cấp một công cụ Trình Tách PowerPoint miễn phí được xây dựng bằng API Aspose.Slides. Nó lưu các slide được chọn từ một bản trình chiếu dưới dạng các tệp PPT hoặc PPTX riêng biệt.Câu Hỏi Thường Gặp
Aspose.Slides có hỗ trợ lưu tăng dần hoặc “lưu nhanh” không?
Không. Mỗi thao tác lưu ghi một tệp đầu ra hoàn chỉnh thay vì chỉ cập nhật các phần đã thay đổi.
Nhiều luồng có thể lưu cùng một thể hiện Presentation không?
Không. Một thể hiện Presentation không an toàn với đa luồng. Hãy truy cập và lưu mỗi thể hiện chỉ từ một luồng tại một thời điểm.
Điều gì xảy ra với siêu liên kết và các tệp được liên kết ngoài khi tôi lưu một bản trình chiếu?
Hyperlinks vẫn còn trong bản trình chiếu. Aspose.Slides không sao chép các tệp liên kết bên ngoài, vì vậy bản trình chiếu đã lưu vẫn phải có khả năng truy cập đến vị trí của chúng.
Tôi có thể lưu siêu dữ liệu tài liệu như tác giả, tiêu đề, công ty và ngày tạo không?
Có. Đặt các document properties thích hợp trước khi lưu, và Aspose.Slides sẽ ghi chúng vào tệp đầu ra.