पेज एलिमेंट का साइज़ बदलना और पोज़िशन करना

पेज एलिमेंट को देखने और उसका साइज़ और पोज़िशन बदलने के दो अलग-अलग तरीके हैं:

  1. साइज़ और पोज़िशन के लिए, गेटर और सेटर फ़ंक्शन का इस्तेमाल करना.
  2. इसके अफ़िलिएट ट्रांसफ़ॉर्म में बदलाव करना. इसके लिए, getTransform() और setTransform() फ़ंक्शन का इस्तेमाल किया जाता है और इसमें इंटरनल साइज़ को सुरक्षित रखा जाता है.

पेज एलिमेंट प्रॉपर्टी पढ़ना

आकार देना और घुमाना

जैसा कि ऊपर दिए गए डायग्राम में दिखाया गया है, रेंडर किए गए पेज के एलिमेंट के बाउंडिंग बॉक्स के हिसाब से, साइज़ और पोज़िशन को तब मापा जाता है, जब उसका कोई रोटेशन न हो:

  • बाएं और ऊपर: पेज के ऊपरी बाएं कोने से, बिना घुमाए गए बाउंडिंग बॉक्स के ऊपर बाएं कोने तक मापा जाता है. वैल्यू पढ़ने के लिए, getLeft() और getTop() का इस्तेमाल करें.
  • चौड़ाई और ऊंचाई: बिना घुमाए गए बाउंडिंग बॉक्स की चौड़ाई और ऊंचाई. वैल्यू पढ़ने के लिए, getWidth() और getHeight() का इस्तेमाल करें.
  • घुमाव: बाउंडिंग बॉक्स के केंद्र के आस-पास की वर्टिकल लाइन के हिसाब से घड़ी की दिशा में घुमाना. वैल्यू पढ़ने के लिए, getRotation() का इस्तेमाल करें.

सभी लंबाई पॉइंट (pt) में मापी जाती हैं. रोटेशन को डिग्री (°) में मापा जाता है.

पेज एलिमेंट प्रॉपर्टी सेट करना

पेज एलिमेंट बनाते समय, उसका साइज़ और उसकी पोज़िशन सेट की जा सकती है. ऐसा करने के लिए, insertShape() जैसे शामिल करने वाले तरीके का इस्तेमाल किया जाता है. किसी मौजूदा आकार के लिए, साइज़, जगह, और रोटेशन सेट किया जा सकता है. साथ ही, किसी एलिमेंट की स्केलिंग को, साइज़ बदलने या उसके किसी किनारे पर दिखाने के लिए भी सेट किया जा सकता है.

बनाए जाने पर

पेज एलिमेंट बनाते समय, पोज़िशन और साइज़ की जानकारी दी जा सकती है.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
Logger.log('Left: ' + shape.getLeft() + 'pt; Top: '
                    + shape.getTop() + 'pt; Width: '
                    + shape.getWidth() + 'pt; Height: '
                    + shape.getHeight() + 'pt; Rotation: '
                    + shape.getRotation() + ' degrees.');

ऊपर दी गई स्क्रिप्ट, ऐक्टिव प्रज़ेंटेशन की पहली स्लाइड पर आकार और जगह तय करती है. साथ ही, शेप की पोज़िशन और साइज़ की जानकारी भी बताती है. लॉग इस तरह होना चाहिए:

Left: 100pt; Top: 200pt; Width: 300pt; Height: 60pt; Rotation: 0 degrees.

आकार, पोज़िशन, और घुमाव

पेज एलिमेंट बनाने के बाद, उसका साइज़ और उसकी पोज़िशन अपडेट की जा सकती है:

  • बिना घुमाए गए बाउंडिंग बॉक्स के ऊपरी बाएं कोने की जगह सेट करने के लिए, setLeft() और setTop() का इस्तेमाल करें.
  • बाउंडिंग बॉक्स की रेंडर की गई चौड़ाई और ऊंचाई को सेट करने के लिए, setWidth() और setHeight() का इस्तेमाल करें.
  • बाउंडिंग बॉक्स के केंद्र के चारों ओर घड़ी की दिशा में घुमाने के लिए, setRotation() का इस्तेमाल करें.

नीचे दी गई स्क्रिप्ट ऐक्टिव प्रज़ेंटेशन की पहली स्लाइड पर आकार बनाती है. इसकी पोज़िशन, साइज़, और रोटेशन को अपडेट करने के लिए, सेटर का इस्तेमाल करती है. साथ ही, आकृति की पोज़िशन और साइज़ की जानकारी को पढ़ती है.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setLeft(100).setTop(200).setWidth(50).setHeight(60).setRotation(90);
Logger.log('Left: ' + shape.getLeft()
                    + 'pt; Top: ' + shape.getTop()
                    + 'pt; Width: ' + shape.getWidth()
                    + 'pt; Height: ' + shape.getHeight()
                    + 'pt; Rotation: ' + shape.getRotation() + '\u00B0.');

इस स्क्रिप्ट से होने वाला अनुमानित लॉग आउटपुट इस तरह दिखाया जाता है:

Left: 100pt; Top: 200pt; Width: 50pt; Height: 60pt; Rotation: 90°.

साइज़, पोज़िशन, और रोटेशन सेटर का इस्तेमाल किसी भी क्रम या कॉम्बिनेशन में किया जा सकता है. ऊपर दी गई तीसरी लाइन को नीचे दी गई स्क्रिप्ट से बदलने पर एक जैसा नतीजा मिलेगा:

shape.setWidth(55);
shape.setRotation(90).setHeight(60).setLeft(100);
shape.setWidth(50).setTop(200);

स्केलिंग:

आकार के साइज़ को ऐब्सलूट वैल्यू पर सेट करने के लिए, ऊपर दिए गए setWidth() और setHeight() का इस्तेमाल करने के बजाय, scaleWidth() और scaleHeight() का इस्तेमाल, मिलते-जुलते स्केलिंग फ़ैक्टर के ज़रिए पेज एलिमेंट को खींचने या दबाने के लिए किया जा सकता है.

shape.scaleHeight(0.5).scaleWidth(2);

नीचे दी गई इमेज में दिखाया गया है कि ऊपर दिया गया कोड, 45° घुमाएं वाले स्क्वेयर के आकार पर कैसे काम करता है. ध्यान दें कि स्केलिंग के दौरान बाउंडिंग बॉक्स के ऊपरी बाएं कोने को तय किया जाता है.

स्लाइड स्केलिंग

किनारे पर रिफ़्लेक्शन

scaleWidth() और scaleHeight() में दिए गए तर्क नेगेटिव हो सकते हैं, ताकि उनका इस्तेमाल पेज एलिमेंट को हॉरिज़ॉन्टल या वर्टिकल तौर पर पलटने के लिए किया जा सके.

shape.scaleWidth(-1); // Flip horizontally along the left edge of the bounding box.
shape.scaleHeight(-1); // Flip vertically along the top edge of the bounding box.

नीचे दिए गए चित्र में दिखाया गया है कि ऊपर दिया गया कोड 45°-घुमाए गए आकार पर कैसे काम करता है. ध्यान दें कि पेज एलिमेंट को बाउंडिंग बॉक्स के किसी एक किनारे पर फ़्लिप किया गया है, लेकिन बीच में नहीं.

स्लाइड रिफ़्लेक्शन

लाइन घुमाना

पेज के अन्य एलिमेंट की तरह, लाइन का रोटेशन, लाइन का वर्टिकल ऐंगल नहीं होता, बल्कि लाइन के बाउंडिंग बॉक्स का रोटेशन होता है. जब किसी लाइन के शुरू और खत्म होने का समय तय किया जाता है, तो उसका रोटेशन हमेशा 0° होता है. Google Slides के यूज़र इंटरफ़ेस (यूआई) में लाइन के एंडपॉइंट को खींचने और छोड़ने से, उसके वर्टिकल ऐंगल के साथ-साथ बाउंडिंग बॉक्स का साइज़ और जगह भी बदल जाती है, लेकिन इससे रोटेशन में बदलाव नहीं होता. setRotation() का इस्तेमाल करने से, लाइन का बाउंडिंग बॉक्स घूमता है. इससे लाइन का वर्टिकल ऐंगल बेहतर तरीके से बदल जाता है. इसलिए, दो लाइनों के विज़ुअल वर्टिकल ऐंगल एक जैसे हो सकते हैं, लेकिन बाउंडिंग बॉक्स अलग-अलग हो सकते हैं. इसलिए, इन लाइनों के साइज़, पोज़िशन, और रोटेशन वैल्यू भी अलग-अलग हो सकती हैं.

सीमाएं

साइज़ और पोज़िशन तय करने के कुछ तरीके, पेज के कुछ खास तरह के एलिमेंट के साथ काम नहीं करते हैं. नीचे दी गई टेबल में उन तरीकों के बारे में बताया गया है जो पेज के कुछ खास तरह के एलिमेंट के साथ काम नहीं करते हैं.

तरीके आकार वीडियो टेबल
getHeight(), getWidth() नहीं (शून्य दिखाता है)
setHeight(), setWidth() नहीं
setRotation() नहीं नहीं
scaleHeight(), scaleWidth() नहीं

अगर पेज एलिमेंट में कटाई की गई है, तो साइज़ और पोज़िशन तय करने के सभी तरीकों से अनचाहे नतीजे मिल सकते हैं. सभी सीमाओं में बदलाव हो सकता है. अप-टू-डेट जानकारी के लिए रेफ़रंस देखें.

संबंधित ट्रांसफ़ॉर्म का इस्तेमाल करना

बेहतर कंट्रोल के लिए, पेज के एलिमेंट के साइज़ और पोज़िशन का, पहले से मौजूद (नेटिव) साइज़ और अफ़िलिएट ट्रांसफ़ॉर्म की मदद से भी हिसाब लगाया और अडजस्ट किया जा सकता है.

Google Apps Script, Google Slides API के तौर पर अफ़िलिएट ट्रांसफ़ॉर्म का इस्तेमाल करने के लिए, मिलता-जुलता इंटरफ़ेस उपलब्ध कराती है.

  • पढ़ने के लिए, इस लेख में बताया गया है कि एफ़ाईन ट्रांसफ़ॉर्मेशन के सिद्धांत क्या हैं. साथ ही, यह भी बताया गया है कि मूल (नेटिव) साइज़ और पेज एलिमेंट के लिए रेंडर किए गए साइज़ का अनुमान कैसे लगाया जा सकता है. Apps Script में,
      का इस्तेमाल करें
    • पेज एलिमेंट के नेटिव साइज़ के लिए getInherentWidth() और getInherentHeight();
    • getTransform() का इस्तेमाल पेज के एलिमेंट को बदलने के लिए करें.
  • लिखने के लिए, इस लेख में बताया गया है कि स्केलिंग, रोटेशन, रिफ़्लेक्शन वगैरह पाने के लिए, 'अफ़िलिएट ट्रांसफ़ॉर्म' सुविधा का इस्तेमाल करके पेज के एलिमेंट का साइज़ कैसे रखें और उन्हें कैसे रखें. Apps Script में,
    • पेज एलिमेंट के अफ़िलिएट ट्रांसफ़ॉर्म को सेट करने के लिए, setTransform() (जैसे, कार्रवाई मोड),
    • preconcatenateTransform() का इस्तेमाल, पेज एलिमेंट के मौजूदा ट्रांसफ़ॉर्म (रिलेटिव मोड की तरह) में, अफ़िलिएट ट्रांसफ़ॉर्म को पहले से जोड़ने के लिए करें.

यह स्क्रिप्ट एक आकार बनाती है, उसके ट्रांसफ़ॉर्म को सेट करती है, पहले से मौजूद साइज़ को पढ़ती है, और उसके एफ़िन ट्रांसफ़ॉर्म को पढ़ती है.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setTransform(SlidesApp.newAffineTransformBuilder()
                   .setScaleX(2)
                   .setScaleY(1)
                   .setTranslateX(100)
                   .setTranslateY(200)
                   .build());
Logger.log('Inherent width: ' + shape.getInherentWidth()
                              + 'pt; Inherent height: '
                              + shape.getInherentHeight() + 'pt.');

इस स्क्रिप्ट से होने वाला अनुमानित लॉग आउटपुट इस तरह दिखाया जाता है:

Inherent width: 236.2pt; Inherent height: 236.2pt.

नतीजे में मिलने वाले आकार में ये बदलाव होंगे. साथ ही, इनमें रेंडर किया गया साइज़ और जगह भी होगी:

AffineTransform{scaleX=2.0, scaleY=1.0, shearX=0.0, shearY=0.0, translateX=100.0, translateY=200.0}
Left: 100pt; Top: 200pt; Width: 472.4pt; Height: 236.2pt; Rotation: 0°.