PPTX में चार्ट रीसेज़िंग के लिए कार्यशील समाधान

पृष्ठभूमि

यह देखा गया है कि Aspose घटकों के माध्यम से PowerPoint प्रस्तुति में OLE ऑब्जेक्ट के रूप में एम्बेड किए गए Excel चार्ट को पहली बार सक्रिय करने के बाद अनिर्दिष्ट स्केल पर आकार बदल दिया जाता है। यह व्यवहार चार्ट की सक्रियता से पहले और बाद की स्थिति में प्रस्तुति में एक स्पष्ट दृश्य अंतर पैदा करता है। Aspose टीम ने इस समस्या की विस्तृत जांच की है और एक समाधान पाया है। यह लेख समस्या के कारणों और संबंधित समाधान का वर्णन करता है।

पिछले लेख में, हमने बताया था कि Aspose.Cells for Java का उपयोग करके Excel चार्ट कैसे बनाएं और Aspose.Slides for Java का उपयोग करके उसे PowerPoint प्रस्तुति में OLE ऑब्जेक्ट के रूप में एम्बेड करें। ऑब्जेक्ट प्रीव्यू समस्या को संबोधित करने के लिए, हमने चार्ट की छवि को चार्ट के OLE ऑब्जेक्ट फ्रेम को असाइन किया था। आउटपुट प्रस्तुति में, जब आप OLE ऑब्जेक्ट फ्रेम (जिसमें चार्ट छवि दर्शाई गई है) पर डबल‑क्लिक करते हैं, तो Excel चार्ट सक्रिय हो जाता है। अंतिम उपयोगकर्ता अंतर्निहित Excel वर्कबुक में आवश्यक परिवर्तन कर सकते हैं और फिर सक्रिय वर्कबुक के बाहर क्लिक करके संबंधित स्लाइड पर वापस आ सकते हैं। उपयोगकर्ता के स्लाइड पर लौटने पर OLE ऑब्जेक्ट फ्रेम का आकार बदल जाता है, और रीट्रेसिंग फैक्टर OLE ऑब्जेक्ट फ्रेम और एम्बेडेड Excel वर्कबुक दोनों के मूल आकारों पर निर्भर करता है।

रीसाइज़िंग का कारण

चूँकि Excel वर्कबुक की अपनी विंडो आकार होती है, यह पहली सक्रियता पर अपने मूल आकार को बनाए रखने की कोशिश करता है। OLE ऑब्जेक्ट फ्रेम की भी अपनी आकार होती है। माइक्रोसॉफ्ट के अनुसार, जब Excel वर्कबुक सक्रिय होती है, तो Excel और PowerPoint आकार पर बातचीत करते हैं और एम्बेडिंग प्रक्रिया के हिस्से के रूप में सही अनुपात बनाए रखते हैं। Excel विंडो आकार और OLE ऑब्जेक्ट फ्रेम के आकार या स्थिति के अंतर के आधार पर रीसाइज़िंग होती है।

काम करने वाला समाधान

Aspose.Slides for Java का उपयोग करके PowerPoint प्रस्तुतियों को बनाने के दो संभावित परिदृश्य हैं।

परिदृश्य 1: मौजूदा टेम्प्लेट के आधार पर प्रस्तुति बनाएं।

परिदृश्य 2: शून्य से प्रस्तुति बनाएं।

यहाँ दिया गया समाधान दोनों परिदृश्यों पर लागू होता है। सभी समाधान दृष्टिकोणों की मूल सिद्धांत समान है: एम्बेडेड OLE ऑब्जेक्ट की विंडो आकार को PowerPoint स्लाइड में OLE ऑब्जेक्ट फ्रेम के आकार के समान होना चाहिए। अब हम इस समाधान के दो तरीकों पर चर्चा करेंगे।

पहला तरीका

इस तरीके में, हम सीखेंगे कि एम्बेडेड Excel वर्कबुक की विंडो आकार को कैसे सेट करें ताकि वह PowerPoint स्लाइड में OLE ऑब्जेक्ट फ्रेम के आकार से मेल खाए।

परिदृश्य 1

मान लीजिए हमने एक टेम्प्लेट परिभाषित किया है और उसकी आधार पर प्रस्तुतियां बनाना चाहते हैं। टेम्प्लेट में इंडेक्स 2 पर एक शेप है जहाँ हमें एम्बेडेड Excel वर्कबुक वाला OLE फ्रेम रखना है। इस परिदृश्य में, OLE ऑब्जेक्ट फ्रेम का आकार पहले से निर्धारित है—यह टेम्प्लेट में इंडेक्स 2 के शेप के आकार के समान है। हमें केवल वर्कबुक की विंडो आकार को उसी शेप के आकार के बराबर सेट करना है। इसके लिए नीचे दिया गया कोड स्निपेट उपयोगी है:

// वर्कबुक की विंडो चौड़ाई को इंच में सेट करें (PowerPoint प्रति इंच 576 पिक्सेल उपयोग करता है, इसलिए 576 से विभाजित)।
workbook.getSettings().setWindowWidthInch(slide.getShapes().get_Item(2).getWidth() / 72f);
 
// वर्कबुक की विंडो ऊँचाई को इंच में सेट करें।
workbook.getSettings().setWindowHeightInch(slide.getShapes().get_Item(2).getHeight() / 72f);
 
// वर्कबुक को मेमोरी स्ट्रीम में सहेजें।
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// एम्बेडेड Excel डेटा के साथ OLE ऑब्जेक्ट फ्रेम बनाएं।
IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(
    slide.getShapes().get_Item(2).getX(),
    slide.getShapes().get_Item (2).getY(),
    slide.getShapes().get_Item (2).getWidth(),
    slide.getShapes().get_Item (2).getHeight(),
    "Excel.Sheet.8",
    workbookStream.toByteArray());

परिदृश्य 2

मान लीजिए हम शून्य से एक प्रस्तुति बनाते हैं और किसी भी आकार के OLE ऑब्जेक्ट फ्रेम को एम्बेडेड Excel वर्कबुक के साथ शामिल करना चाहते हैं। नीचे दिए गए कोड स्निपेट में, हम स्लाइड पर x = 0.5 इंच और y = 1 इंच पर 4 इंच ऊँचा और 9.5 इंच चौड़ा OLE ऑब्जेक्ट फ्रेम बनाते हैं। फिर हम Excel वर्कबुक की विंडो को उसी आकार—4 इंच ऊँचा और 9.5 इंच चौड़ा—से सेट करते हैं।

// हमारी इच्छित ऊँचाई।
int desiredHeight = 288; // 4 इंच (4 * 72)
 
// हमारी इच्छित चौड़ाई।
int desiredWidth = 684; // 9.5 इंच (9.5 * 72)
 
// विंडो के साथ चार्ट आकार निर्धारित करें।
chart.setSizeWithWindow(true);
 
// वर्कबुक की विंडो चौड़ाई को इंच में सेट करें (PowerPoint प्रति इंच 576 पिक्सेल उपयोग करता है, इसलिए 576 से विभाजित)।
workbook.getSettings().setWindowWidthInch(desiredHeight / 72f);
 
// वर्कबुक की विंडो ऊँचाई को इंच में सेट करें।
workbook.getSettings().setWindowHeightInch(desiredWidth / 72f);
 
// वर्कबुक को मेमोरी स्ट्रीम में सहेजें।
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// एम्बेडेड Excel डेटा के साथ OLE ऑब्जेक्ट फ्रेम बनाएं।
IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(
    288,
    576,
    desiredWidth,
    desiredHeight,
    "Excel.Sheet.8",
    workbookStream.toByteArray());

दूसरा तरीका

इस तरीके में, हम सीखेंगे कि एम्बेडेड Excel वर्कबुक में चार्ट के आकार को PowerPoint स्लाइड में OLE ऑब्जेक्ट फ्रेम के आकार से मेल खाने के लिए कैसे सेट किया जाए। यह तरीका तब उपयोगी है जब चार्ट का आकार पहले से ज्ञात हो और बाद में न बदले।

परिदृश्य 1

मान लीजिए हमने एक टेम्प्लेट परिभाषित किया है और उसकी आधार पर प्रस्तुतियां बनाना चाहते हैं। टेम्प्लेट में इंडेक्स 2 पर एक शेप है जहाँ हम एम्बेडेड Excel वर्कबुक वाला OLE फ्रेम रखना चाहते हैं। इस परिदृश्य में, OLE फ्रेम का आकार पहले से निर्धारित है—जो टेम्प्लेट में इंडेक्स 2 के शेप के आकार से मेल खाता है। हमें केवल वर्कबुक में चार्ट के आकार को उसी शेप के आकार के बराबर सेट करना है। इसके लिए नीचे दिया गया कोड स्निपेट उपयोगी है:

// विंडो के बिना चार्ट आकार निर्धारित करें.
chart.setSizeWithWindow(false);
 
// चार्ट की चौड़ाई पिक्सेल में सेट करें (Excel प्रति इंच 96 पिक्सेल उपयोग करता है, इसलिए 96 से गुणा करें).
chart.getChartObject().setWidth((int)((slide.getShapes().get_Item(2).getWidth() / 72f) * 96f));
 
// चार्ट की ऊँचाई पिक्सेल में सेट करें.
chart.getChartObject().setHeight((int)((slide.getShapes().get_Item(2).getHeight() / 72f) * 96f));
 
// चार्ट की प्रिंट आकार निर्धारित करें.
chart.setPrintSize(PrintSizeType.CUSTOM);
 
// वर्कबुक को मेमोरी स्ट्रीम में सहेजें.
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// एम्बेडेड Excel डेटा के साथ OLE ऑब्जेक्ट फ्रेम बनाएं.
IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(
    slide.getShapes().get_Item(2).getX(),
    slide.getShapes().get_Item (2).getY(),
    slide.getShapes().get_Item (2).getWidth(),
    slide.getShapes().get_Item (2).getHeight(),
    "Excel.Sheet.8",
    workbookStream.toByteArray());

परिदृश्य 2:

मान लीजिए हम शून्य से प्रस्तुति बनाते हैं और किसी भी आकार के OLE ऑब्जेक्ट फ्रेम को एम्बेडेड Excel वर्कबुक के साथ शामिल करना चाहते हैं। नीचे दिए गए कोड स्निपेट में, हम स्लाइड पर x = 0.5 इंच और y = 1 इंच पर 4 इंच ऊँचा और 9.5 इंच चौड़ा OLE ऑब्जेक्ट फ्रेम बनाते हैं। साथ ही हम संबंधित चार्ट का आकार भी वही बनाते हैं: 4 इंच ऊँचा और 9.5 इंच चौड़ा।

// हमारी इच्छित ऊँचाई।
int desiredHeight = 288; // 4 इंच (4 * 72)
 
// हमारी इच्छित चौड़ाई।
int desiredWidth = 684; // 9.5 इंच (9.5 * 72)
 
// विंडो के बिना चार्ट का आकार निर्धारित करें।
chart.setSizeWithWindow(false);
 
// पिक्सेल में चार्ट की चौड़ाई सेट करें (Excel प्रति इंच 96 पिक्सेल उपयोग करता है, इसलिए 96 से गुणा करें)।
chart.getChartObject().setWidth((int)((slide.getShapes().get_Item(2).getWidth() / 576f) * 96f));
 
// पिक्सेल में चार्ट की ऊँचाई सेट करें।
chart.getChartObject().setHeight((int)((slide.getShapes().get_Item(2).getHeight() / 576f) * 96f));
 
// वर्कबुक को मेमोरी स्ट्रीम में सहेजें।
ByteArrayOutputStream workbookStream = new ByteArrayOutputStream();
workbook.save(workbookStream, com.aspose.cells.SaveFormat.EXCEL_97_TO_2003);
 
// एम्बेडेड Excel डेटा के साथ OLE ऑब्जेक्ट फ्रेम बनाएं।
IOleObjectFrame oleFrame = slide.getShapes().addOleObjectFrame(
    288,
    576,
    desiredWidth,
    desiredHeight,
    "Excel.Sheet.8",
    workbookStream.toByteArray());

निष्कर्ष

चार्ट‑रीसाइज़िंग समस्या को ठीक करने के दो तरीके हैं। तरीका चयन आवश्यकताओं और उपयोग केस पर निर्भर करता है। दोनों तरीके समान रूप से काम करते हैं चाहे प्रस्तुतियां टेम्प्लेट से बनाई गई हों या शून्य से। साथ ही इस समाधान में OLE ऑब्जेक्ट फ्रेम के आकार पर कोई सीमा नहीं है।

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

मेरी एम्बेडेड Excel चार्ट PowerPoint में सक्रिय करने के बाद आकार क्यों बदल जाता है?

जब Excel पहली बार सक्रिय होता है तो वह मूल विंडो आकार को पुनः स्थापित करने की कोशिश करता है, जबकि PowerPoint में OLE ऑब्जेक्ट फ्रेम की अपनी आयाम होते हैं। PowerPoint और Excel आकार पर बातचीत करके अनुपात बनाए रखते हैं, जिससे रीसाइज़िंग हो सकती है।

क्या इस रीसाइज़िंग समस्या को पूरी तरह रोकना संभव है?

हाँ। एम्बेड करने से पहले Excel वर्कबुक की विंडो आकार या चार्ट का आकार OLE ऑब्जेक्ट फ्रेम के आकार से मिलाकर आप आकार में स्थिरता बनाए रख सकते हैं।

मुझे कौन सा तरीका चुनना चाहिए‑विंडो आकार सेट करना या चार्ट आकार सेट करना?

यदि आप वर्कबुक के अनुपात को बनाए रखना चाहते हैं और बाद में रिसाइज़िंग की संभावना रखना चाहते हैं तो तरीका 1 (विंडो आकार) उपयोग करें।
यदि चार्ट के आयाम निश्चित हैं और एम्बेड करने के बाद नहीं बदलेंगे तो तरीका 2 (चार्ट आकार) उपयोग करें।

क्या ये विधियां टेम्प्लेट‑आधारित प्रस्तुतियों और नई प्रस्तुतियों दोनों में काम करती हैं?

हाँ। दोनों तरीके टेम्प्लेट से बनाई गई प्रस्तुतियों और शून्य से बनाई गई प्रस्तुतियों दोनों के लिए समान रूप से कार्य करते हैं।

OLE ऑब्जेक्ट फ्रेम के आकार पर कोई सीमा है क्या?

नहीं। आप OLE फ्रेम को किसी भी आकार में सेट कर सकते हैं, बशर्ते वह वर्कबुक या चार्ट आकार के अनुसार उचित रूप से स्केल हो।

क्या मैं इन विधियों का उपयोग अन्य स्प्रेडशीट प्रोग्रामों में बनाए गए चार्ट के साथ कर सकता हूँ?

उदाहरण विशेष रूप से Aspose.Cells के साथ बनाए गए Excel चार्ट के लिए हैं, परंतु सिद्धांत अन्य OLE‑अनुप्रयुक्त स्प्रेडशीट प्रोग्रामों पर भी लागू होते हैं, बशर्ते वे समान आकार विकल्प प्रदान करते हों।

संबंधित अनुभाग