ดึงและอัปเดตข้อมูลการนำเสนอใน Python ผ่าน Java

ภาพรวม

Aspose.Slides สามารถตรวจสอบรูปแบบของงานนำเสนอและอ่านเมตาดาต้าเอกสารได้โดยไม่ต้องสร้างโมเดลวัตถุของงานนำเสนออย่างสมบูรณ์ ซึ่งเป็นประโยชน์เมื่อคุณต้องการจัดประเภทไฟล์ สร้างรายการสินค้าคงคลัง หรือสำรวจคุณสมบัติก่อนตัดสินใจว่าจะโหลดและประมวลผลเนื้อหาของงานนำเสนอหรือไม่

ตัวอย่างต้องการ Aspose.Slides สำหรับ Python ผ่าน Java และ Java runtime ที่เข้ากันได้ แต่ละตัวอย่างจะเริ่ม JVM หากยังไม่ได้รัน ให้จัดหาไฟล์งานนำเสนอที่มีอยู่ตามเส้นทางที่ใช้ในตัวอย่าง

บทความนี้แสดงการตรวจสอบแบบเบาบางผ่าน PresentationFactory และ PresentationInfo, รวมถึงการอัปเดตแบบเจาะจงผ่าน DocumentProperties.

ตรวจสอบรูปแบบงานนำเสนอ

ใช้ PresentationFactory.getPresentationInfo เพื่อตรวจสอบไฟล์โดยไม่ต้องสร้างอินสแตนซ์ของ Presentation วิธีการ PresentationInfo.getLoadFormat จะรายงานรูปแบบที่ตรวจพบ เช่น PPTX, PPT หรือ 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}")

สร้างสินค้าคงคลังงานนำเสนอแบบเบาบาง

เมื่อคุณประมวลผลไฟล์งานนำเสนอจำนวนมาก คุณอาจต้องการสินค้าคงคลังแบบกะทัดรัดเพื่อการตรวจสอบ การทำดัชนี หรือระบบจัดการเอกสาร ในสถานการณ์นี้ ใช้ PresentationFactory.getPresentationInfo เพื่อรับออบเจ็กต์ PresentationInfo แล้วเรียก PresentationInfo.readDocumentProperties เพื่ออ่านเมตาดาต้าเอกสาร วิธีการนี้ไม่สร้างอินสแตนซ์ของ Presentation หรือบังคับให้คุณต้องสำรวจโมเดลวัตถุของงานนำเสนอทั้งหมด

คุณสมบัติเพิ่มเติมที่ DocumentProperties เผยออกมาจะให้ค่าต่อไปนี้สำหรับสินค้าคงคลัง:

วิธีการ ค่าที่เก็บ
getSlides จำนวนสไลด์ทั้งหมด
getHiddenSlides จำนวนสไลด์ที่ซ่อนอยู่
getNotes จำนวนสไลด์ที่มีบันทึกหมายเหตุ
getParagraphs จำนวนย่อหน้าทั้งหมด หากมี
getWords จำนวนคำทั้งหมด
getMultimediaClips จำนวนคลิปเสียงและวิดีโอทั้งหมด

ตัวอย่างต่อไปนี้อ่านค่าดังกล่าวโดยไม่สร้างออบเจ็กต์ Presentation และพิมพ์สินค้าคงคลังแบบกะทัดรัด นอกจากนี้ยังรวม getHeadingPairs กับ getTitlesOfParts เพื่อแสดงกลุ่มเนื้อหา เช่น แบบอักษร ธีม และชื่อสไลด์

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

แต่ละ HeadingPair จะให้ชื่อกลุ่มและจำนวนรายการในกลุ่มนั้น DocumentProperties.getTitlesOfParts จะคืนค่าอาร์เรย์แบนแบบเรียงลำดับ ดังนั้นจึงใช้จำนวนชื่อที่ต่อเนื่องตามที่แต่ละ HeadingPair ระบุ

ข้อมูลเมตาที่จัดเก็บและข้อจำกัดของรูปแบบ

คุณสมบัติสินค้าคงคลังที่คืนโดย PresentationInfo.readDocumentProperties สะท้อนเมตาดาต้าที่มีในเอกสารต้นทาง Aspose.Slides จะไม่โหลดและสำรวจโมเดลวัตถุของงานนำเสนอเพื่อคำนวณค่าที่เหล่านี้ใหม่สำหรับการเรียกนี้ คุณสมบัติที่หายไปจะแสดงเป็นค่าดีฟอลต์ และค่าที่จัดเก็บอาจล้าสมัยหากแอปพลิเคชันที่บันทึกไฟล์ครั้งสุดท้ายไม่ได้อัปเดตคุณสมบัติเบื้องหลังของเอกสาร

  • PPTX: รูปแบบนี้ให้คุณสมบัติเพิ่มเติมของเอกสารสำหรับจำนวนสไลด์, หมายเหตุ, สไลด์ที่ซ่อน, ย่อหน้า, คำและสื่อมัลติมีเดีย รวมถึง heading pairs และ part titles ความพร้อมใช้งานขึ้นอยู่กับว่าผู้ผลิตเอกสารได้เขียนคุณสมบัติใดบ้าง
  • PPT: รูปแบบไบนารีสามารถเก็บคุณสมบัติสรุปของเอกสารที่สอดคล้องกัน หากคุณสมบัติเข้าขาดหรือไม่ถูกรีเฟรชโดยผู้ผลิตเอกสาร Aspose.Slides จะคืนค่าที่จัดเก็บหรือค่าดีฟอลต์แทนการคำนวณจากสไลด์
  • ODP: เมตาดาต้า OpenDocument ให้สถิติทั่วไปของเอกสาร เช่น จำนวนหน้า, ย่อหน้าและคำ แต่ค่าต่าง ๆ เหล่านี้ไม่สอดคล้องกับคุณสมบัติเพิ่มเติมของ PowerPoint ทั้งหมด เมตาดาต้าสไลด์ที่ซ่อน, สไลด์บันทึกหมายเหตุ, สื่อมัลติมีเดีย, heading-pair และ part-title อาจไม่มีให้บริการ และคุณสมบัติสินค้าคงคลังอาจคืนค่าดีฟอลต์ อย่าใช้ค่าศูนย์หรืออาร์เรย์ว่างเป็นหลักฐานที่แน่ชัดว่ามีเนื้อหาที่สอดคล้องไม่มีอยู่

ใช้วิธีเมตาดาต้าแบบเบาบางสำหรับสินค้าคงคลังและการตรวจสอบเบื้องต้น โหลดงานนำเสนอและตรวจสอบโมเดลวัตถุที่ทำงานอยู่เมื่อผลลัพธ์ต้องสะท้อนการเปลี่ยนแปลงในหน่วยความจำหรือเมื่อคุณต้องการยืนยันเนื้อหาจริงของงานนำเสนอ

อัปเดตคุณสมบัติงานนำเสนอ

คุณสมบัติที่ได้รับจาก PresentationInfo.readDocumentProperties สามารถเปลี่ยนแปลงได้โดยไม่ต้องสร้างอินสแตนซ์ของ Presentation ใช้ PresentationInfo.updateDocumentProperties เพื่อใช้การเปลี่ยนแปลงแล้วเขียนงานนำเสนอที่ผูกไว้ด้วย PresentationInfo.writeBindedPresentation.

รูปภาพต่อไปนี้แสดงคุณสมบัติเบื้องหลังของเอกสารต้นฉบับของงานนำเสนอ PowerPoint
คุณสมบัติเบื้องหลังเอกสารต้นฉบับของงานนำเสนอ PowerPoint

ตัวอย่างต่อไปนี้เปลี่ยนชื่อเรื่องและเวลาการบันทึกล่าสุดและเขียนผลลัพธ์ไปยังไฟล์ใหม่:

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

รูปภาพต่อไปนี้แสดงคุณสมบัติเบื้องหลังที่เปลี่ยนแปลงของงานนำเสนอ PowerPoint
คุณสมบัติเบื้องหลังที่เปลี่ยนแปลงของงานนำเสนอ PowerPoint

ลิงก์ที่เป็นประโยชน์

สำหรับการตรวจสอบความปลอดภัยที่เกี่ยวข้องและการตั้งค่าการปกป้อง ดูบทความต่อไปนี้:

คำถามที่พบบ่อย

ฉันจะตรวจสอบได้อย่างไรว่าฟอนต์ถูกฝังไว้และเป็นฟอนต์อะไรบ้าง?

โหลดงานนำเสนอและใช้ Presentation.getFontsManager เรียก FontsManager.getEmbeddedFonts เพื่อรับฟอนต์ที่ฝังอยู่และ FontsManager.getFonts เพื่อรับฟอนต์ที่งานนำใช้ เปรียบเทียบผลลัพธ์สองชุดเพื่อค้นหาฟอนต์ที่จำเป็นสำหรับการแสดงผลแต่ไม่ได้ฝังไว้

ฉันจะตรวจสอบได้อย่างรวดเร็วว่าไฟล์มีสไลด์ที่ซ่อนอยู่หรือไม่และมีจำนวนเท่าไร?

เมื่อเมตาดาต้าเอกสารที่จัดเก็บไว้เพียงพอ ให้อ่านข้อความ DocumentProperties.getHiddenSlides ผ่าน PresentationFactory.getPresentationInfo และ PresentationInfo.readDocumentProperties วิธีนี้เหมาะสำหรับสินค้าคงคลังแบบเบาบาง หากงานนำเสนอได้รับการแก้ไขในหน่วยความจำ เมตาดาต้าที่จัดเก็บอาจหายหรือเก่า หรือคุณต้องการตรวจสอบค่าปัจจุบัน ให้วนผ่าน Presentation.getSlides และตรวจสอบเมธอด Slide.getHidden ของแต่ละสไลด์แทน

ฉันสามารถตรวจจับได้หรือไม่ว่ามีการใช้ขนาดและทิศทางสไลด์ที่กำหนดเองและว่ามันแตกต่างจากค่าเริ่มต้นหรือไม่?

ได้เลย โหลดงานนำเสนอและเรียก Presentation.getSlideSize ใช้ SlideSize.getType, SlideSize.getSize และ SlideSize.getOrientation เพื่อเปรียบเทียบการตั้งค่าปัจจุบันกับค่าที่กำหนดไว้ล่วงหน้าและขนาดที่คาดหวัง

มีวิธีรวดเร็วในการตรวจสอบว่ากราฟอ้างอิงแหล่งข้อมูลภายนอกหรือไม่?

ได้เลย ค้นหาแต่ละ Chart แล้วเรียก ChartData.getDataSourceType สำหรับสมุดงานภายนอก ให้เรียก ChartData.getExternalWorkbookPath ประเภทและเส้นทางของแหล่งข้อมูลบ่งชี้การอ้างอิงภายนอก แต่การตรวจสอบว่ามีเป้าหมายพร้อมใช้งานหรือไม่ต้องทำการตรวจสอบทรัพยากรแยกต่างหาก

ฉันจะประเมินสไลด์ ‘หนัก’ ที่อาจทำให้การเรนเดอร์หรือการส่งออกเป็น PDF ช้าลงได้อย่างไร?

ไม่มีคุณสมบัติความซับซ้อนแบบเดียวที่ใช้ได้ทั้งหมด ให้สำรวจ Presentation.getSlides และคอลlection ของ BaseSlide.getShapes ของแต่ละสไลด์ ใช้นับจำนวนรูปร่างและการมีอยู่ของภาพขนาดใหญ่ เอฟเฟกต์ แอนิเมชัน หรือมัลติมีเดียเป็นสัญญาณคัดกรอง และทำการวัดการเรนเดอร์หรือการส่งออกที่เป็นตัวอย่างก่อนที่จะถือว่าสไลด์นั้นเป็นคอขวดประสิทธิภาพที่ยืนยันแล้ว