Recuperar e Atualizar Informações da Apresentação em Python via Java

Visão geral

Aspose.Slides pode identificar o formato de uma apresentação e ler seus metadados de documento sem criar um modelo completo de objeto da apresentação. Isso é útil quando você precisa classificar arquivos, montar um inventário ou inspecionar propriedades antes de decidir se carregará e processará o conteúdo da apresentação.

Os exemplos exigem Aspose.Slides for Python via Java e um runtime Java compatível. Cada exemplo inicia a JVM se ela ainda não estiver em execução. Forneça arquivos de apresentação existentes nos caminhos usados nos exemplos.

Este artigo demonstra inspeção leve através de PresentationFactory e PresentationInfo, bem como atualizações direcionadas através de DocumentProperties.

Verificar o formato de uma apresentação

Se você já tem uma apresentação carregada, consulte Determine the Original Presentation Format para detecção após o carregamento e as limitações dos streams legados PPT, PPS e POT.

Use PresentationFactory.getPresentationInfo para inspecionar um arquivo sem criar uma instância de Presentation. O método PresentationInfo.getLoadFormat informa o formato detectado, como PPTX, PPT ou 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}")

Criar um inventário de apresentações leve

Ao processar muitos arquivos de apresentação, pode ser necessário um inventário compacto para validação, indexação ou um sistema de gerenciamento de documentos. Nesse cenário, use PresentationFactory.getPresentationInfo para obter um objeto PresentationInfo, e então chame PresentationInfo.readDocumentProperties para ler os metadados do documento. Essa abordagem não cria uma instância de Presentation nem exige que você percorra todo o modelo de objeto da apresentação.

As propriedades estendidas expostas por DocumentProperties fornecem os seguintes valores de inventário:

Método Valor de inventário
getSlides Número total de slides.
getHiddenSlides Número de slides ocultos.
getNotes Número de slides que contêm notas.
getParagraphs Número total de parágrafos, quando disponível.
getWords Número total de palavras.
getMultimediaClips Número total de clipes de áudio e vídeo.

O exemplo a seguir lê esses valores sem criar um objeto Presentation e imprime um inventário compacto. Ele também combina getHeadingPairs com getTitlesOfParts para exibir grupos de conteúdo como fontes, temas e títulos de slides.

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

Cada HeadingPair fornece um nome de grupo e o número de itens nesse grupo. DocumentProperties.getTitlesOfParts retorna um array plano e ordenado, portanto consuma o número de títulos consecutivos especificado por cada par de cabeçalho.

Metadados armazenados e limitações de formato

As propriedades de inventário retornadas por PresentationInfo.readDocumentProperties refletem os metadados disponíveis no documento de origem. Aspose.Slides não carrega e percorre o modelo de objeto da apresentação para recalcular esses valores nesta chamada. Propriedades ausentes são representadas por valores padrão, e valores armazenados podem estar desatualizados se o aplicativo que salvou o arquivo pela última vez não atualizou suas propriedades de documento.

  • PPTX: O formato fornece propriedades de documento estendidas para contagens de slides, notas, slides ocultos, parágrafos, palavras e multimeios, além de pares de cabeçalhos e títulos de partes. A disponibilidade depende de quais propriedades foram escritas pelo produtor do documento.
  • PPT: O formato binário pode armazenar propriedades correspondentes de resumo de documento. Se uma propriedade estiver ausente ou não for atualizada pelo produtor do documento, Aspose.Slides retorna seu valor armazenado ou padrão em vez de calculá‑lo a partir dos slides.
  • ODP: Os metadados do OpenDocument fornecem estatísticas gerais do documento, como contagens de páginas, parágrafos e palavras, mas esses valores não correspondem a todas as propriedades estendidas específicas do PowerPoint. Metadados de slides ocultos, notas, multimeios, pares de cabeçalhos e títulos de partes podem estar indisponíveis, e as propriedades de inventário podem retornar valores padrão. Não trate um valor zero ou um array vazio como prova autoritária de que o conteúdo correspondente está ausente.

Use a abordagem de metadados leves para inventários e verificações preliminares. Carregue a apresentação e inspecione seu modelo de objeto ativo quando o resultado precisar refletir alterações em memória ou quando for necessário verificar o conteúdo real da apresentação.

Atualizar propriedades da apresentação

As propriedades retornadas por PresentationInfo.readDocumentProperties também podem ser alteradas sem criar uma instância de Presentation. Aplique as alterações com PresentationInfo.updateDocumentProperties e, em seguida, grave a apresentação vinculada com PresentationInfo.writeBindedPresentation.

A imagem a seguir mostra as propriedades originais do documento da apresentação PowerPoint.

Original document properties of the PowerPoint presentation

O exemplo a seguir altera o título e a hora da última gravação e grava o resultado em um novo arquivo:

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()

A imagem a seguir mostra as propriedades do documento atualizadas.

Changed document properties of the PowerPoint presentation

Para verificações de segurança relacionadas e configurações de proteção, veja os artigos a seguir:

Perguntas frequentes

Como verificar se as fontes estão incorporadas e quais são?

Carregue a apresentação e use Presentation.getFontsManager. Chame FontsManager.getEmbeddedFonts para obter as fontes incorporadas e FontsManager.getFonts para obter as fontes usadas pela apresentação. Compare os dois resultados para encontrar fontes necessárias para renderização que não estejam incorporadas.

Como descobrir rapidamente se o arquivo tem slides ocultos e quantos?

Quando os metadados armazenados do documento são suficientes, leia DocumentProperties.getHiddenSlides através de PresentationFactory.getPresentationInfo e PresentationInfo.readDocumentProperties. Isso é adequado para um inventário leve. Se a apresentação foi modificada na memória, os metadados armazenados podem estar ausentes ou desatualizados, ou se precisar verificar valores ativos, itere através de Presentation.getSlides e inspecione o método Slide.getHidden de cada slide.

Posso detectar se um tamanho de slide personalizado e orientação são usados, e se diferem dos padrões?

Sim. Carregue a apresentação e chame Presentation.getSlideSize. Use SlideSize.getType, SlideSize.getSize e SlideSize.getOrientation para comparar as configurações atuais com o preset esperado e as dimensões.

Existe uma maneira rápida de ver se os gráficos referenciam fontes de dados externas?

Sim. Localize cada Chart e chame ChartData.getDataSourceType. Para uma planilha externa, chame ChartData.getExternalWorkbookPath. O tipo de fonte de dados e o caminho identificam uma referência externa, mas verificar se o alvo está disponível requer uma verificação de recurso separada.

Como avaliar slides ‘pesados’ que podem desacelerar a renderização ou exportação PDF?

Não há uma única propriedade de complexidade. Percorra Presentation.getSlides e a coleção BaseSlide.getShapes de cada slide. Use contagens de formas e a presença de imagens grandes, efeitos, animações ou multimeios como sinais de triagem, e meça uma renderização ou exportação representativa antes de considerar um slide como um gargalo de desempenho confirmado.