Python का उपयोग करके प्रस्तुतियों में ActiveX नियंत्रण प्रबंधित करना

परिचय

ActiveX नियंत्रण प्रस्तुतियों में उपयोग किए जाते हैं। Aspose.Slides for Python via Java आपको ActiveX नियंत्रण जोड़ने और प्रबंधित करने की अनुमति देता है, लेकिन वे सामान्य प्रस्तुति आकारों की तुलना में थोड़ा जटिल होते हैं। Aspose.Slides Media Player ActiveX नियंत्रण जोड़ने का समर्थन करता है। ध्यान दें कि ActiveX नियंत्रण आकार नहीं होते; वे प्रस्तुति के ShapeCollection का हिस्सा नहीं हैं। वे इसके बजाय अलग ControlCollection का हिस्सा होते हैं। इस विषय में, हम आपको दिखाएंगे कि उनके साथ कैसे काम किया जाए।

स्लाइड में Media Player ActiveX नियंत्रण जोड़ें

ActiveX Media Player नियंत्रण जोड़ने के लिए, निम्न कार्य करें:

  1. Presentation क्लास का एक उदाहरण बनाएं और एक खाली प्रस्तुति इंस्टेंस उत्पन्न करें।
  2. Presentation में लक्षित स्लाइड तक पहुंचें।
  3. ControlCollection द्वारा प्रदत्त addControl मेथड का उपयोग कर Media Player ActiveX नियंत्रण जोड़ें।
  4. Media Player ActiveX नियंत्रण तक पहुंचें और उसकी प्रॉपर्टीज़ का उपयोग करके वीडियो पथ सेट करें।
  5. प्रस्तुति को PPTX फ़ाइल के रूप में सहेजें।

यह नमूना कोड, ऊपर बताए गए चरणों पर आधारित, स्लाइड में Media Player ActiveX नियंत्रण जोड़ने का तरीका दर्शाता है:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ControlType, Presentation, SaveFormat

# एक खाली प्रस्तुति बनाएँ।
presentation = Presentation()
try:
    # Media Player ActiveX नियंत्रण जोड़ें।
    slide = presentation.getSlides().get_Item(0)
    control = slide.getControls().addControl(ControlType.WindowsMediaPlayer, 100, 100, 400, 400)

    # वीडियो पथ सेट करें।
    control.getProperties().set_Item("URL", "Wildlife.wmv")

    # प्रस्तुति सहेजें।
    presentation.save("Output.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

ActiveX नियंत्रण को संशोधित करें

स्लाइड पर टेक्स्ट बॉक्स और साधारण कमांड बटन जैसे सरल ActiveX नियंत्रण को प्रबंधित करने के लिए, निम्न कार्य करें:

  1. Presentation क्लास का एक उदाहरण बनाएं और उसमें ActiveX नियंत्रणों वाली प्रस्तुति लोड करें।
  2. उसका इंडेक्स द्वारा स्लाइड संदर्भ प्राप्त करें।
  3. स्लाइड में ControlCollection तक पहुंचकर ActiveX नियंत्रणों तक पहुंचें।
  4. Control ऑब्जेक्ट का उपयोग करके TextBox1 ActiveX नियंत्रण तक पहुंचें।
  5. TextBox1 ActiveX नियंत्रण की प्रॉपर्टीज़ जैसे टेक्स्ट, फ़ॉन्ट, फ़ॉन्ट ऊँचाई और फ्रेम स्थिति बदलें।
  6. CommandButton1 नामक दूसरे ActiveX नियंत्रण तक पहुंचें।
  7. बटन का शीर्षक, फ़ॉन्ट और स्थिति बदलें।
  8. ActiveX नियंत्रणों के फ्रेम की स्थिति को स्थानांतरित करें।
  9. संशोधित प्रस्तुति को PPTM फ़ाइल के रूप में लिखें।

यह नमूना कोड, ऊपर बताए गए चरणों पर आधारित, एक सरल ActiveX नियंत्रण के प्रबंधन का तरीका दर्शाता है:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, ShapeFrame
from java.awt import Font, SystemColor
from java.awt.image import BufferedImage
from java.io import ByteArrayOutputStream
from javax.imageio import ImageIO

# ActiveX नियंत्रणों के साथ प्रस्तुति लोड करें।
presentation = Presentation("ActiveX.pptm")
try:
    if presentation.getSlides().size() > 0 and presentation.getSlides().get_Item(0).getControls().size() >= 2:
        # पहली स्लाइड तक पहुंचें।
        slide = presentation.getSlides().get_Item(0)

        # टेक्स्ट बॉक्स का टेक्स्ट बदलें।
        control = slide.getControls().get_Item(0)

        if str(control.getName()).lower() == "textbox1" and control.getProperties() is not None:
            new_text = "Changed text"
            control.getProperties().set_Item("Value", new_text)

            # प्रतिस्थापन छवि बदलें। PowerPoint ActiveX सक्रियण के दौरान इसे बदल देता है,
            # इसलिए यह कभी-कभी जैसा का तैसा रह सकता है।
            image = BufferedImage(int(control.getFrame().getWidth()), int(control.getFrame().getHeight()), BufferedImage.TYPE_INT_ARGB)

            graphics = image.getGraphics()
            graphics.setColor(SystemColor.window)
            graphics.fillRect(0, 0, image.getWidth(), image.getHeight())

            font = Font(control.getProperties().get_Item("FontName"), Font.PLAIN, 16)
            graphics.setColor(SystemColor.windowText)
            graphics.setFont(font)
            graphics.drawString(new_text, 10, 20)

            graphics.setColor(SystemColor.controlShadow)
            graphics.drawLine(0, image.getHeight() - 1, 0, 0)
            graphics.drawLine(0, 0, image.getWidth() - 1, 0)

            graphics.setColor(SystemColor.controlDkShadow)
            graphics.drawLine(1, image.getHeight() - 2, 1, 1)
            graphics.drawLine(1, 1, image.getWidth() - 2, 1)

            graphics.setColor(SystemColor.controlHighlight)
            graphics.drawLine(1, image.getHeight() - 1, image.getWidth() - 1, image.getHeight() - 1)
            graphics.drawLine(image.getWidth() - 1, image.getHeight() - 1, image.getWidth() - 1, 1)

            graphics.setColor(SystemColor.controlLtHighlight)
            graphics.drawLine(0, image.getHeight(), image.getWidth(), image.getHeight())
            graphics.drawLine(image.getWidth(), image.getHeight(), image.getWidth(), 0)

            graphics.dispose()

            image_stream = ByteArrayOutputStream()
            ImageIO.write(image, "PNG", image_stream)

            image_bytes = image_stream.toByteArray()
            substitute_image = presentation.getImages().addImage(image_bytes)
            control.getSubstitutePictureFormat().getPicture().setImage(substitute_image)

        # बटन का शीर्षक बदलें।
        control = presentation.getSlides().get_Item(0).getControls().get_Item(1)

        if str(control.getName()).lower() == "commandbutton1" and control.getProperties() is not None:
            new_caption = "Show MessageBox"
            control.getProperties().set_Item("Caption", new_caption)
            # प्रतिस्थापन छवि बदलें।
            image = BufferedImage(int(control.getFrame().getWidth()), int(control.getFrame().getHeight()), BufferedImage.TYPE_INT_ARGB)
            graphics = image.getGraphics()
            graphics.setColor(SystemColor.control)
            graphics.fillRect(0, 0, image.getWidth(), image.getHeight())

            font = Font(control.getProperties().get_Item("FontName"), Font.PLAIN, 16)
            graphics.setColor(SystemColor.windowText)
            graphics.setFont(font)
            metrics = graphics.getFontMetrics(font)
            graphics.drawString(new_caption, (image.getWidth() - metrics.stringWidth(new_caption)) // 2, 20)

            graphics.setColor(SystemColor.controlLtHighlight)
            graphics.drawLine(0, image.getHeight() - 1, 0, 0)
            graphics.drawLine(0, 0, image.getWidth() - 1, 0)

            graphics.setColor(SystemColor.controlHighlight)
            graphics.drawLine(1, image.getHeight() - 2, 1, 1)
            graphics.drawLine(1, 1, image.getWidth() - 2, 1)

            graphics.setColor(SystemColor.controlShadow)
            graphics.drawLine(1, image.getHeight() - 1, image.getWidth() - 1, image.getHeight() - 1)
            graphics.drawLine(image.getWidth() - 1, image.getHeight() - 1, image.getWidth() - 1, 1)

            graphics.setColor(SystemColor.controlDkShadow)
            graphics.drawLine(0, image.getHeight(), image.getWidth(), image.getHeight())
            graphics.drawLine(image.getWidth(), image.getHeight(), image.getWidth(), 0)

            graphics.dispose()

            image_stream = ByteArrayOutputStream()
            ImageIO.write(image, "PNG", image_stream)

            image_bytes = image_stream.toByteArray()
            substitute_image = presentation.getImages().addImage(image_bytes)
            control.getSubstitutePictureFormat().getPicture().setImage(substitute_image)

        # नियंत्रणों को 100 पॉइंट नीचे ले जाएँ।
        for control in slide.getControls():
            frame = control.getFrame()
            new_frame = ShapeFrame(frame.getX(), frame.getY() + 100, frame.getWidth(), frame.getHeight(), frame.getFlipH(), frame.getFlipV(), frame.getRotation())
            control.setFrame(new_frame)
        presentation.save("withActiveX-edited_python.pptm", SaveFormat.Pptm)

        # नियंत्रणों को हटाएँ।
        presentation.getSlides().get_Item(0).getControls().clear()
        presentation.save("withActiveX-cleared_python.pptm", SaveFormat.Pptm)
    else:
        print("The first slide must contain the TextBox1 and CommandButton1 ActiveX controls.")
finally:
    presentation.dispose()

अक्सर पूछे जाने वाले प्रश्न

क्या Aspose.Slides सक्रिय नियंत्रणों को पढ़ते और पुनः‑सहेजते समय संरक्षित रखता है यदि उन्हें Python रनटाइम में निष्पादित नहीं किया जा सकता?

हाँ। Aspose.Slides उन्हें प्रस्तुति का हिस्सा मानता है और उनकी प्रॉपर्टीज़ और फ्रेम को पढ़/संशोधित कर सकता है; नियंत्रनों को स्वयं निष्पादित करना इनको संरक्षित रखने के लिए आवश्यक नहीं है।

ActiveX नियंत्रण प्रस्तुति में OLE ऑब्जेक्ट्स से कैसे भिन्न होते हैं?

ActiveX नियंत्रण इंटरैक्टिव प्रबंधित नियंत्रण होते हैं (बटन, टेक्स्ट बॉक्स, मीडिया प्लेयर), जबकि OLE एम्बेडेड एप्लिकेशन ऑब्जेक्ट्स को दर्शाता है (उदाहरण के लिए, एक Excel वर्कशीट)। वे अलग तरीके से संग्रहीत और संभाले जाते हैं और उनकी प्रॉपर्टी मॉडल अलग होती है।

यदि फ़ाइल को Aspose.Slides द्वारा संशोधित किया गया हो तो क्या ActiveX इवेंट्स और VBA मैक्रो काम करते हैं?

Aspose.Slides मौजूदा मार्कअप और मेटाडेटा को संरक्षित रखता है; हालांकि, इवेंट्स और मैक्रो केवल Windows पर PowerPoint में ही चलाते हैं जब सुरक्षा अनुमति देती है। यह लाइब्रेरी VBA को निष्पादित नहीं करती।