Determinar o Formato Original da Apresentação em Python

Visão geral

Depois de carregar uma apresentação, leia a propriedade somente‑leitura Presentation.source_format para determinar seu formato original. Use‑a quando o processamento subsequente depende do formato a partir do qual a instância atual foi carregada.

O formato de origem é distinto do SaveFormat selecionado para um arquivo de saída. Salvar em outro formato não altera o formato de origem da instância existente.

Ler o formato de origem de um arquivo

Este exemplo requer um arquivo sample.pptx existente. Ele carrega o arquivo e seleciona uma política de processamento da aplicação usando Presentation.source_format, em vez do nome do arquivo. Altere o caminho de entrada para experimentar outros formatos. O exemplo imprime a política selecionada; substitua as mensagens pela lógica da sua aplicação.

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}.")

Reconhecer os valores suportados

A enumeração SourceFormat distingue os seguintes formatos de apresentação. As extensões abaixo são extensões convencionais, não uma reconstrução do nome de arquivo original.

Valor SourceFormat Extensão Formato
PPT .ppt Apresentação PowerPoint 97–2003
PPTX .pptx Apresentação Office Open XML
PPTM .pptm Apresentação Office Open XML com macro
PPS .pps Apresentação de slides PowerPoint 97–2003
PPSX .ppsx Apresentação de slides Office Open XML
PPSM .ppsm Apresentação de slides Office Open XML com macro
POT .pot Modelo PowerPoint 97–2003
POTX .potx Modelo Office Open XML
POTM .potm Modelo Office Open XML com macro
ODP .odp Apresentação OpenDocument
OTP .otp Modelo de apresentação OpenDocument
FODP .fodp Apresentação OpenDocument XML plano
XML .xml Apresentação PowerPoint XML

Ler o formato de origem de um fluxo

Este exemplo requer um arquivo sample.pps existente. Ler seus bytes para um fluxo de memória modela a entrada recebida sem um nome de arquivo, como um valor de banco de dados ou um array de bytes enviado. O construtor Presentation recebe apenas o fluxo.

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 e POT usam o mesmo formato binário subjacente. Ao carregar por caminho de arquivo, a extensão pode ajudar a distinguir uma apresentação de slides ou um modelo. Sem um nome de arquivo, o conteúdo legado PPS e POT pode ser relatado como SourceFormat.PPT; o exemplo PPS acima relata PPT.

Se sua aplicação precisar preservar a distinção, mantenha o nome de arquivo original ou os metadados de subtipo separadamente. Uma extensão é uma dica útil para esses subtipos legados, mas não deve ser a única base para identificar conteúdo de apresentação arbitrário.

Comparar a detecção antes e depois do carregamento

Use PresentationFactory.get_presentation_info e PresentationInfo.load_format quando precisar inspecionar um arquivo antes de carregar seu modelo de objeto de apresentação completo. Use Presentation.source_format quando a instância já existir.

Este exemplo requer sample.pptx e imprime PPTX em ambas as verificações. Em produção, escolha a API apropriada para o seu estágio de processamento; uma apresentação já carregada não precisa de uma segunda inspeção apenas para obter seu formato de origem.

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}")

Os resultados têm tipos de enumeração diferentes: LoadFormat e SourceFormat. Não os compare lançando seus valores numéricos nem presuma que todo formato possui resultados de detecção idênticos. Na verificação de salvar‑e‑reabrir descrita abaixo, o PowerPoint XML foi relatado como LoadFormat.UNKNOWN antes do carregamento e como SourceFormat.XML após o carregamento.

Manter formatos de origem e de saída separados

Este exemplo requer sample.pptx e grava converted.odp. Ele imprime PPTX tanto antes quanto depois de salvar a instância original. Apenas a nova instância carregada a partir da saída ODP relata 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}")

Uma apresentação criada do zero com slides.Presentation() relata SourceFormat.PPTX. Ela não tem arquivo de entrada: esse é o valor padrão para uma instância recém‑criada, não evidência de que um arquivo PPTX foi carregado. Controle se sua aplicação criou ou carregou a instância separadamente se essa distinção for importante.

Mapear um formato de origem para uma extensão

O exemplo a seguir requer sample.pptx. Ele mapeia cada valor atualmente suportado de SourceFormat para uma extensão convencional, sem analisar o nome de arquivo de entrada. O fallback evita atribuir silenciosamente uma extensão a um valor não reconhecido.

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.")

Esse mapeamento não converte um arquivo nem recupera um subtipo legado PPS/POT perdido durante o carregamento do fluxo. Para salvar efetivamente, selecione explicitamente um SaveFormat ou use a conversão mostrada em Save Presentations in Their Original Format.

Verificar formatos salvando e reabrindo

Este exemplo autocontido cria uma apresentação e grava três arquivos no diretório de trabalho, sobrescrevendo arquivos com os mesmos nomes. Ele reabre cada saída tanto por caminho quanto por um fluxo de memória. Para PPTX e ODP, ambas as rotas relatam o formato salvo. Para PPS, carregar por caminho relata PPS, enquanto carregar os mesmos bytes sem nome de arquivo relata 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}")

A mesma verificação com todos os formatos listados acima produziu estes resultados para apresentações geradas com extensões correspondentes:

Formato salvo SourceFormat a partir de caminho de arquivo SourceFormat a partir de fluxo sem nome
PPT PPT PPT
PPTX, PPTM PPTX, PPTM respectivamente Igual ao caminho de arquivo
PPS PPS PPT
PPSX, PPSM PPSX, PPSM respectivamente Igual ao caminho de arquivo
POT POT PPT
POTX, POTM POTX, POTM respectivamente Igual ao caminho de arquivo
ODP, OTP ODP, OTP respectivamente Igual ao caminho de arquivo
FODP FODP FODP
PowerPoint XML XML XML

Nessas verificações, a única normalização de formato de origem foi PPS/POT para PPT em fluxos sem nome. A tabela descreve a identificação de formatos, não a preservação de todos os recursos da apresentação durante a conversão.

Perguntas frequentes

Salvar em ODP altera o formato de origem de uma apresentação carregada de PPTX?

Não. A instância existente ainda relata PPTX. Uma instância carregada a partir do ODP salvo relata ODP.

Um fluxo pode sempre distinguir uma apresentação legada, um show de slides e um modelo?

Não. PPT, PPS e POT compartilham o formato binário. Mantenha o nome de arquivo ou metadados de subtipo separadamente quando essa distinção for necessária.

Qual API devo usar se a apresentação já estiver carregada?

Leia Presentation.source_format. Use PresentationFactory.get_presentation_info para inspeção antes do carregamento.