Ambil dan Perbarui Informasi Presentasi dengan Python melalui Java

Gambaran Umum

Aspose.Slides dapat mengidentifikasi format presentasi dan membaca metadata dokumennya tanpa membuat model objek presentasi yang lengkap. Ini berguna ketika Anda perlu mengklasifikasikan file, membuat inventaris, atau memeriksa properti sebelum memutuskan apakah akan memuat dan memproses konten presentasi.

Contoh-contoh memerlukan Aspose.Slides untuk Python via Java dan runtime Java yang kompatibel. Setiap contoh memulai JVM jika belum berjalan. Sediakan file presentasi yang ada pada jalur yang digunakan dalam contoh.

Artikel ini menunjukkan inspeksi ringan melalui PresentationFactory dan PresentationInfo, serta pembaruan terarah melalui DocumentProperties.

Periksa Format Presentasi

Jika Anda sudah memiliki presentasi yang dimuat, lihat Determine the Original Presentation Format untuk deteksi setelah memuat dan batasan aliran PPT, PPS, dan POT warisan.

Gunakan PresentationFactory.getPresentationInfo untuk memeriksa file tanpa membuat instance Presentation. Metode PresentationInfo.getLoadFormat melaporkan format yang terdeteksi, seperti PPTX, PPT, atau 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}")

Buat Inventaris Presentasi Ringan

Saat Anda memproses banyak file presentasi, Anda mungkin membutuhkan inventaris ringkas untuk validasi, pengindeksan, atau sistem manajemen dokumen. Dalam skenario ini, gunakan PresentationFactory.getPresentationInfo untuk memperoleh objek PresentationInfo, lalu panggil PresentationInfo.readDocumentProperties untuk membaca metadata dokumen. Pendekatan ini tidak membuat instance Presentation atau mengharuskan Anda menelusuri model objek presentasi secara lengkap.

Properti tambahan yang disediakan oleh DocumentProperties memberikan nilai inventaris berikut:

Metode Nilai inventaris
getSlides Jumlah total slide.
getHiddenSlides Jumlah slide tersembunyi.
getNotes Jumlah slide yang berisi catatan.
getParagraphs Jumlah total paragraf, bila tersedia.
getWords Jumlah total kata.
getMultimediaClips Jumlah total klip audio dan video.

Contoh berikut membaca nilai-nilai ini tanpa membuat objek [Presentation] dan mencetak inventaris ringkas. Itu juga menggabungkan [getHeadingPairs] dengan [getTitlesOfParts] untuk menampilkan grup konten seperti font, tema, dan judul slide.

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

Setiap [HeadingPair] menyediakan nama grup dan jumlah item dalam grup tersebut. [DocumentProperties.getTitlesOfParts] mengembalikan array datar yang terurut, sehingga konsumsi jumlah judul berurutan yang ditentukan oleh setiap heading pair.

Metadata yang Disimpan dan Batasan Format

Properti inventaris yang dikembalikan oleh [PresentationInfo.readDocumentProperties] mencerminkan metadata yang tersedia di dokumen sumber. Aspose.Slides tidak memuat dan menelusuri model objek presentasi untuk menghitung ulang nilai-nilai ini pada panggilan ini. Properti yang tidak ada direpresentasikan dengan nilai default, dan nilai yang disimpan mungkin usang jika aplikasi yang terakhir menyimpan file tidak memperbarui properti dokumennya.

  • PPTX: Format ini menyediakan properti dokumen tambahan untuk hitungan slide, catatan, slide tersembunyi, paragraf, kata, dan multimedia, serta heading pair dan judul bagian. Ketersediaannya tergantung pada properti apa yang ditulis oleh pembuat dokumen.
  • PPT: Format biner dapat menyimpan properti ringkasan dokumen yang sesuai. Jika sebuah properti tidak ada atau tidak diperbarui oleh pembuat dokumen, Aspose.Slides mengembalikan nilai yang disimpan atau nilai default daripada menghitungnya dari slide.
  • ODP: Metadata OpenDocument menyediakan statistik dokumen umum, seperti jumlah halaman, paragraf, dan kata, tetapi nilai ini tidak berkorespondensi dengan setiap properti tambahan khusus PowerPoint. Metadata slide tersembunyi, slide catatan, multimedia, heading-pair, dan judul bagian mungkin tidak tersedia, dan properti inventaris dapat mengembalikan nilai default. Jangan menganggap nilai nol atau array kosong sebagai bukti otoritatif bahwa konten yang bersangkutan tidak ada.

Gunakan pendekatan metadata ringan untuk inventaris dan pemeriksaan awal. Muat presentasi dan inspeksi model objeknya yang aktif ketika hasil harus mencerminkan perubahan dalam memori atau ketika Anda perlu memverifikasi konten presentasi yang sebenarnya.

Perbarui Properti Presentasi

Properti yang dikembalikan oleh [PresentationInfo.readDocumentProperties] juga dapat diubah tanpa membuat instance [Presentation]. Terapkan perubahan dengan [PresentationInfo.updateDocumentProperties], dan kemudian tulis presentasi yang terikat dengan [PresentationInfo.writeBindedPresentation].

Gambar berikut menunjukkan properti dokumen asli.

Properti dokumen asli dari presentasi PowerPoint

Contoh berikut mengubah judul dan waktu penyimpanan terakhir serta menulis hasilnya ke file baru:

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

Gambar berikut menunjukkan properti dokumen yang diperbarui.

Properti dokumen yang diubah dari presentasi PowerPoint

Tautan Berguna

Untuk pemeriksaan keamanan terkait dan pengaturan perlindungan, lihat artikel berikut:

FAQ

Bagaimana saya dapat memeriksa apakah font disematkan dan mana saja yang disematkan?

Muat presentasi dan gunakan Presentation.getFontsManager. Panggil FontsManager.getEmbeddedFonts untuk memperoleh font yang disematkan dan FontsManager.getFonts untuk memperoleh font yang digunakan oleh presentasi. Bandingkan dua hasil tersebut untuk menemukan font yang diperlukan untuk rendering tetapi tidak disematkan.

Bagaimana saya dapat dengan cepat mengetahui apakah file memiliki slide tersembunyi dan berapa banyak?

Ketika metadata dokumen yang disimpan cukup, baca DocumentProperties.getHiddenSlides melalui PresentationFactory.getPresentationInfo dan PresentationInfo.readDocumentProperties. Ini cocok untuk inventaris ringan. Jika presentasi telah dimodifikasi dalam memori, metadata yang disimpan mungkin tidak ada atau usang, atau Anda perlu memverifikasi nilai langsung, iterasi melalui Presentation.getSlides dan inspeksi metode Slide.getHidden tiap slide sebagai gantinya.

Apakah saya dapat mendeteksi apakah ukuran dan orientasi slide khusus digunakan, dan apakah berbeda dari default?

Ya. Muat presentasi dan panggil Presentation.getSlideSize. Gunakan SlideSize.getType, SlideSize.getSize, dan SlideSize.getOrientation untuk membandingkan pengaturan saat ini dengan preset dan dimensi yang diharapkan.

Apakah ada cara cepat untuk melihat apakah grafik merujuk ke sumber data eksternal?

Ya. Temukan setiap Chart dan panggil ChartData.getDataSourceType. Untuk buku kerja eksternal, panggil ChartData.getExternalWorkbookPath. Tipe sumber data dan path mengidentifikasi referensi eksternal, tetapi memverifikasi apakah target tersedia memerlukan pengecekan sumber terpisah.

Bagaimana saya dapat menilai slide ‘berat’ yang mungkin memperlambat rendering atau ekspor PDF?

Tidak ada properti kompleksitas tunggal. Telusuri Presentation.getSlides dan koleksi BaseSlide.getShapes tiap slide. Gunakan jumlah shape serta keberadaan gambar besar, efek, animasi, atau multimedia sebagai sinyal penyaringan, dan ukur render atau ekspor representatif sebelum menganggap slide sebagai hambatan kinerja yang terkonfirmasi.