Python के माध्यम से Java में प्रस्तुति जानकारी पुनः प्राप्त करें और अपडेट करें

परिचय

Aspose.Slides प्रस्तुति का फ़ॉर्मेट पहचान सकता है और उसके दस्तावेज़ मेटाडाटा को पूरी प्रस्तुति ऑब्जेक्ट मॉडल बनाए बिना पढ़ सकता है। यह तब उपयोगी होता है जब आपको फ़ाइलों को वर्गीकृत करना हो, एक इन्वेंट्री बनानी हो, या प्रॉपर्टीज़ का निरीक्षण करना हो इससे पहले कि आप प्रस्तुति की सामग्री को लोड और प्रोसेस करने का निर्णय लें।

उदाहरणों के लिए Aspose.Slides for Python via Java और एक संगत Java रनटाइम की आवश्यकता होती है। प्रत्येक उदाहरण JVM को शुरू करता है यदि वह पहले से चल नहीं रहा है। उदाहरणों में प्रयुक्त पथों पर मौजूदा प्रस्तुति फ़ाइलें प्रदान करें।

यह लेख हल्के निरीक्षण को PresentationFactory और PresentationInfo के माध्यम से तथा लक्षित अपडेट को DocumentProperties के माध्यम से प्रदर्शित करता है।

प्रस्तुति फ़ॉर्मेट जांचें

फ़ाइल का निरीक्षण बिना Presentation इंस्टेंस बनाए करने के लिए PresentationFactory.getPresentationInfo का उपयोग करें। 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 एक फ्लैट, क्रमबद्ध ऐरे लौटाता है, इसलिए प्रत्येक heading pair द्वारा निर्दिष्ट क्रमिक शीर्षकों की संख्या को उपभोग करें।

संग्रहीत मेटाडाटा और फ़ॉर्मेट सीमाएँ

PresentationInfo.readDocumentProperties द्वारा लौटाए गए इन्वेंट्री प्रॉपर्टीज़ स्रोत दस्तावेज़ में उपलब्ध मेटाडाटा को प्रतिबिंबित करते हैं। Aspose.Slides इस कॉल के लिए इन मानों की पुनः गणना करने हेतु प्रस्तुति ऑब्जेक्ट मॉडल को लोड और पार नहीं करता। अनुपलब्ध प्रॉपर्टीज़ को डिफ़ॉल्ट मानों से दर्शाया जाता है, और संग्रहीत मान पुराने हो सकते हैं यदि फ़ाइल को अंतिम बार सहेजने वाले अनुप्रयोग ने अपने दस्तावेज़ प्रॉपर्टीज़ को अपडेट नहीं किया था।

  • PPTX: फ़ॉर्मेट स्लाइड, नोट, छिपी हुई स्लाइड, पैराग्राफ, शब्द और मल्टीमीडिया गिनती के लिए विस्तारित दस्तावेज़ प्रॉपर्टीज़ प्रदान करता है, साथ ही heading pairs और part titles भी। उपलब्धता इस पर निर्भर करती है कि दस्तावेज़ निर्माता ने कौन‑से प्रॉपर्टीज़ लिखे हैं।
  • PPT: बाइनरी फ़ॉर्मेट समान document‑summary प्रॉपर्टीज़ संग्रहीत कर सकता है। यदि कोई प्रॉपर्टी अनुपस्थित है या निर्माता ने उसे अपडेट नहीं किया है, तो Aspose.Slides उसके संग्रहीत या डिफ़ॉल्ट मान को लौटाता है, न कि स्लाइड्स से पुनः गणना करके।
  • ODP: OpenDocument मेटाडाटा सामान्य दस्तावेज़ आँकड़े प्रदान करता है, जैसे पृष्ठ, पैराग्राफ और शब्द गिनती, लेकिन ये मान हर PowerPoint‑विशिष्ट विस्तारित प्रॉपर्टी से मेल नहीं खाते। छिपी हुई स्लाइड, नोट‑स्लाइड, मल्टीमीडिया, heading‑pair और part‑title मेटाडाटा उपलब्ध नहीं हो सकता, और इन्वेंट्री प्रॉपर्टीज़ डिफ़ॉल्ट मान लौट सकती हैं। शून्य मान या खाली ऐरे को इस बात का अधिकारिक प्रमाण न मानें कि संबंधित कंटेंट अनुपस्थित है।

इन्वेंट्री और प्रारंभिक जाँचों के लिए हल्का मेटाडाटा दृष्टिकोण उपयोग करें। जब परिणाम को इन‑मे़मोरी बदलावों को दर्शाना हो या आपको वास्तविक प्रस्तुति कंटेंट को सत्यापित करने की आवश्यकता हो तो प्रस्तुति को लोड करें और उसकी लाइव ऑब्जेक्ट मॉडल का निरीक्षण करें।

प्रस्तुति प्रॉपर्टीज़ अपडेट करें

PresentationInfo.readDocumentProperties द्वारा लौटाए गए प्रॉपर्टीज़ को बिना Presentation इंस्टेंस बनाए बदला जा सकता है। परिवर्तन को PresentationInfo.updateDocumentProperties के साथ लागू करें, और फिर PresentationInfo.writeBindedPresentation से बंधी हुई प्रस्तुति लिखें।

निम्न छवि मूल दस्तावेज़ प्रॉपर्टीज़ को दिखाती है।

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 प्रस्तुति की बदली हुई दस्तावेज़ प्रॉपर्टीज़

उपयोगी लिंक

संबंधित सुरक्षा जाँचों और सुरक्षा सेटिंग्स के लिए निम्न लेख देखें:

FAQ

मैं कैसे जांच सकता हूँ कि फ़ॉन्ट एम्बेडेड हैं या नहीं और कौन‑से हैं?

प्रेजेंटेशन लोड करें और Presentation.getFontsManager का उपयोग करें। एम्बेडेड फ़ॉन्ट्स प्राप्त करने के लिए FontsManager.getEmbeddedFonts कॉल करें और प्रस्तुति द्वारा उपयोग किए गए फ़ॉन्ट्स प्राप्त करने के लिए FontsManager.getFonts कॉल करें। दोनों परिणामों की तुलना करके उन फ़ॉन्ट्स को पहचानें जो रेंडरिंग के लिए आवश्यक हैं लेकिन एम्बेडेड नहीं हैं।

फ़ाइल में छिपी हुई स्लाइड्स हैं या नहीं और उनकी संख्या कैसे जल्दी पता करूँ?

जब संग्रहीत दस्तावेज़ मेटाडाटा पर्याप्त हो, तो PresentationFactory.getPresentationInfo और PresentationInfo.readDocumentProperties के माध्यम से DocumentProperties.getHiddenSlides पढ़ें। यह हल्की इन्वेंट्री के लिये उपयुक्त है। यदि प्रस्तुति मेमोरी में संशोधित हुई है, तो संग्रहीत मेटाडाटा गायब या पुराना हो सकता है, या आपको लाइव मानों की जाँच करनी हो, तो Presentation.getSlides के माध्यम से इटरिटेट करें और प्रत्येक स्लाइड के Slide.getHidden मेथड को देखें।

क्या मैं यह पता लगा सकता हूँ कि कस्टम स्लाइड आकार और अभिविन्यास उपयोग में है, और क्या वह डिफ़ॉल्ट से अलग है?

हां। प्रस्तुति लोड करें और Presentation.getSlideSize कॉल करें। वर्तमान सेटिंग्स की तुलना अपेक्षित प्रिसेट और आयामों से करने के लिए SlideSize.getType, SlideSize.getSize और SlideSize.getOrientation का उपयोग करें।

क्या चार्ट्स के बाहरी डेटा स्रोतों को संदर्भित करने का कोई त्वरित तरीका है?

हां। प्रत्येक Chart खोजें और ChartData.getDataSourceType को कॉल करें। बाहरी वर्कबुक के लिए, ChartData.getExternalWorkbookPath कॉल करें। डेटा स्रोत प्रकार और पथ बाहरी संदर्भ को पहचानते हैं, लेकिन लक्ष्य की उपलब्धता की पुष्टि के लिये अलग संसाधन जाँच आवश्यक है।

मैं ‘भारी’ स्लाइड्स को कैसे आकलन करूं जो रेंडरिंग या PDF निर्यात को धीमा कर सकती हैं?

एक एकल जटिलता प्रॉपर्टी नहीं है। Presentation.getSlides और प्रत्येक स्लाइड के BaseSlide.getShapes संग्रह को पार करें। आकृति गिनती और बड़े चित्रों, इफ़ेक्ट्स, एनिमेशन्स या मल्टीमीडिया की उपस्थिति को स्क्रीनिंग संकेत के रूप में उपयोग करें, और एक प्रतिनिधि रेंडर या निर्यात मापें इससे पहले कि आप स्लाइड को निश्चित प्रदर्शन बाधा मानें।