Ukládání prezentací v Pythonu přes 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 via Java může uložit prezentaci do souboru nebo proudu v 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.
Uložit prezentaci do souborů
Pro uložení prezentace do souboru předá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()
Uložit prezentaci v jejich původním formátu
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 pomocí metody Presentation.getSourceFormat. Výslednou hodnotu SourceFormat předáte metodě SlideUtil.toSaveFormat, abyste získali odpovídající hodnotu SaveFormat, a poté použijete Presentation.save, aby se zapsala upravená prezentace.
Následující kompletní příklad zpracovává každý soubor ve vstupním adresáři, aktualizuje jeho název a uloží ho do výstupního adresáře ve formátu, ve kterém 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 pro uložení prezentace. Mapuje pouze zdrojové formáty prezentace; není určen 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 vyvolání IllegalArgumentException.
Staré soubory PPT, PPS a POT používají stejný binární kontejner. Když je taková prezentace načtena ze streamu 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 samostatně a použijte je při výběru výstupního názvu souboru a formátu.
Uložit prezentaci do streamu
Napsáním prezentace bez závislosti na konečné cestě k souboru předáte zapisovatelný stream a hodnotu SaveFormat metodě Presentation.save. Tento přístup je užitečný, když výstup musí být 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 streamu:
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()
Uložit prezentaci s předdefinovaným typem zobrazení
Můžete určit zobrazení, ve kterém PowerPoint při otevření uložené prezentace nejprve zobrazí. Před uložením použijte metodu ViewProperties.setLastView s hodnotou ViewType.
Následující příklad nastaví zobrazení Slide Master jako počáteční zobrazení:
import jpype
import asposeslides
if not jpime.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()
Uložit prezentaci ve striktním formátu Office Open XML
Abychom vytvořili soubor 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ředáte 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()
Uložit prezentaci v formátu Office Open XML v režimu Zip64
Standardní archiv ZIP omezuje komprimovanou i nekomprimovanou velikost každé položky, celkovou velikost archivu a počet položek. Protože je soubor PPTX archiv ZIP, může velmi velká prezentace překročit tato omezení. 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 když prezentace překročí standardní omezení 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í vyvolá PptxException.Uložit prezentaci v formátu Office Open XML s úrovněmi komprese
Pro výstup PPTX můžete vyvážit rychlost ukládání a velikost 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 času na 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žívá 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()
Uložit prezentaci bez aktualizace miniatury
Když je prezentace uložena jako PPTX, metoda PptxOptions.setRefreshThumbnail řídí její miniaturu dokumentu:
Trueregeneruje 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 aktualizace její 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
Vypnutí aktualizace miniatury může zkrátit čas potřebný k uložení souboru PPTX.Zpráva o průběhu ukládání v procentech
Aby bylo možné sledovat operaci ukládání, zaregistrujte Python handler pro průběh pomocí jpype.JProxy a předávejte jej metodě SaveOptions.setProgressCallback. Aspose.Slides pak během exportu volá metodu reporting handleru s hodnotami průběhu.
Následující příklad hlásí průběh exportu do PDF na konzoli:
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, místo aktualizace jen změněných částí.
Mohou více vláken ukládat stejnou instanci Presentation?
Ne. Instance Presentation není thread-safe. Přístup a ukládání každé instance provádějte pouze z jednoho vlákna najednou.
Co se stane s hypertextovými odkazy a externě odkazovanými soubory při uložení prezentace?
Hyperlinks zůstávají v prezentaci. Aspose.Slides nekopíruje externě odkazované soubory, takže uložená prezentace musí nadále mít přístup k jejich umístěním.
Mohu uložit metadata dokumentu, jako autor, název, společnost a datum vytvoření?
Ano. Před uložením nastavte příslušné vlastnosti dokumentu a Aspose.Slides je zapíše do výstupního souboru.