Ukládání prezentací v Pythonu pomocí Java
Přehled
Po vytvoření prezentace nebo otevření existující, použijte metodu Presentation.save k zápisu výsledku. Aspose.Slides pro Python prostřednictvím Java může uložit prezentaci do souboru nebo proudu ve formátech PowerPoint, OpenDocument, PDF a dalších. Následující sekce popisují standardní operace ukládání a možnosti dostupné pro výstup PPTX.
Ukládání prezentací do souborů
Pro uložení prezentace do souboru předložte cestu k výstupu a hodnotu SaveFormat metodě Presentation.save. Hodnota formátu určuje typ souboru, který Aspose.Slides vytvoří.
Následující příklad vytvoří prezentaci a uloží ji jako soubor PPTX:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation()
try:
# Přidejte nebo upravte obsah prezentace zde.
presentation.save("Output.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Ukládání prezentací v jejich původním formátu
Pro příklady detekce souboru a proudu, chování nově vytvořených prezentací a rozdíl mezi zdrojovým a výstupním formátem viz Určení původního formátu prezentace.
V aplikaci pro dávkové zpracování nemusí být vstupní formát znám předem. Po načtení souboru přečtěte jeho původní formát z metody Presentation.getSourceFormat. Výslednou hodnotu SourceFormat předložte metodě SlideUtil.toSaveFormat, abyste získali odpovídající hodnotu SaveFormat, a poté použijte Presentation.save k zápisu upravené prezentace.
Následující kompletní příklad zpracuje každý soubor ve vstupním adresáři, aktualizuje jeho název a uloží jej do výstupního adresáře ve formátu, ze kterého byl načten:
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 mapuje PPT, PPTX, ODP, PPTM, PPSX, PPSM, POTX, POTM, PPS, POT, OTP, FODP a PowerPoint XML na jejich odpovídající formáty ukládání prezentací. Mapuje pouze zdrojové formáty prezentací; není určeno k výběru exportních formátů, jako jsou PDF, HTML, TIFF nebo obrázky. Předání nepodporované nebo neplatné hodnoty SourceFormat vede k výjimce IllegalArgumentException.
Starší soubory PPT, PPS a POT používají stejný binární kontejner. Když je taková prezentace načtena z proudu bez přípony souboru, může být soubor PPS nebo POT identifikován jako PPT. Pokud je vyžadováno zachování těchto starších podtypů, uchovejte původní název souboru nebo metadata formátu zvlášť a použijte je při výběru výstupního názvu souboru a formátu.
Ukládání prezentací do proudů
Pro zápis prezentace bez spoléhaní se na konečnou cestu k souboru předložte zapisovatelný proud a hodnotu SaveFormat metodě Presentation.save. Tento přístup je užitečný, když musí být výstup vrácen z webové služby, uložen v databázi nebo zpracován v paměti.
Následující příklad uloží novou prezentaci do souborového proudu:
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()
Ukládání prezentací s předdefinovaným typem zobrazení
Můžete určit zobrazení, ve kterém PowerPoint při otevření načte uloženou prezentaci. Použijte metodu ViewProperties.setLastView s hodnotou ViewType před uložením.
Následující příklad nastaví zobrazení Slide Master jako výchozí zobrazení:
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()
Ukládání prezentací ve striktním formátu Office Open XML
Pro vytvoření souboru PPTX, který odpovídá striktnímu profilu Office Open XML, vytvořte instanci PptxOptions a použijte její metodu setConformance s hodnotou Conformance.Iso29500_2008_Strict. Poté předejte možnosti metodě 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()
Ukládání prezentací v Office Open XML formátu v režimu Zip64
Standardní ZIP archiv omezuje komprimovanou i nekomprimovanou velikost každé položky, celkovou velikost archivu a počet položek. Protože je soubor PPTX ZIP archivem, velmi velká prezentace může tato omezení překročit. Rozšíření ZIP64 zvyšují příslušná omezení velikosti a počtu položek.
Použijte metodu PptxOptions.setZip64Mode k řízení, zda Aspose.Slides zapisuje rozšíření ZIP64:
- IfNecessary používá ZIP64 pouze tehdy, když prezentace překročí standardní limity ZIP. Toto je výchozí režim.
- Never zakazuje rozšíření ZIP64.
- Always vždy zapisuje rozšíření ZIP64.
Následující příklad vždy povolí rozšíření ZIP64 pro výstupní prezentaci:
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()
Upozornění
Pokud je použito Zip64Mode.Never a prezentace se nevejde do standardních limitů ZIP, operace uložení vyhodí výjimku PptxException.Ukládání prezentací v Office Open XML formátu s úrovněmi komprese
Pro výstup PPTX můžete vyvážit rychlost ukládání oproti velikosti souboru pomocí metody PptxOptions.setCompressionLevel. Třída CompressionLevel poskytuje následující hodnoty:
- None ukládá data bez komprese.
- Level1 poskytuje nejrychlejší kompresi a největší komprimovaný výstup.
- Level2 až Level5 postupně upřednostňují menší výstup před rychlostí ukládání.
- Level6 vyvažuje rychlost ukládání a velikost souboru. Toto je výchozí úroveň.
- Level7 a Level8 dále upřednostňují menší výstup před rychlostí ukládání.
- Level9 poskytuje nejsilnější kompresi a vyžaduje nejvíce zpracování.
Následující příklad uloží prezentaci bez komprese:
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()
Následující příklad použije maximální úroveň komprese:
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()
Ukládání prezentací bez obnovení miniatury
Když je prezentace uložena jako PPTX, metoda PptxOptions.setRefreshThumbnail řídí její miniaturu dokumentu:
Trueznovu vytvoří miniaturu během operace uložení. Toto je výchozí hodnota.Falsezachová existující miniaturu. Pokud prezentace nemá miniaturu, Aspose.Slides ji nevytvoří.
Následující příklad uloží prezentaci bez obnovení miniatury:
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()
Poznámka
Zakázání obnovení miniatury může zkrátit čas potřebný k uložení souboru PPTX.Zpráva o postupu ukládání v procentech
Pro sledování operace ukládání zaregistrujte v Pythonu obslužnou rutinu pomocí jpype.JProxy a předložte ji metodě SaveOptions.setProgressCallback. Aspose.Slides pak během exportu volá metodu reporting obslužné rutiny s hodnotami postupu.
Následující příklad vypisuje postup exportu PDF do konzole:
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()
Poznámka
Aspose poskytuje zdarma PowerPoint Splitter postavený na API Aspose.Slides. Ukládá vybrané snímky z prezentace jako samostatné soubory PPT nebo PPTX.Často kladené otázky
Podporuje Aspose.Slides inkrementální nebo „rychlé uložení“?
Ne. Každá operace uložení zapíše kompletní výstupní soubor namísto aktualizace pouze změněných částí.
Mohou více vláken ukládat stejnou instanci Presentation?
Ne. Instance Presentation není vlákny‑bezpečná. Přistupujte a ukládejte každou instanci pouze z jednoho vlákna najednou.
Co se stane s hypertextovými odkazy a externě propojenými soubory při uložení prezentace?
Hypertextové odkazy zůstávají v prezentaci. Aspose.Slides nekopíruje externě propojené soubory, takže uložená prezentace musí stále mít přístup k jejich umístěním.
Mohu uložit metadata dokumentu, jako je autor, název, společnost a datum vytvoření?
Ano. Nastavte příslušné vlastnosti dokumentu před uložením a Aspose.Slides je zapíše do výstupního souboru.