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

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

  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° घूमने वाले आकार पर ऊपर दिया गया कोड कैसे काम करता है. ध्यान दें कि पेज एलिमेंट को उसके बॉउंडिंग बॉक्स के किसी एक किनारे पर फ़्लिप किया गया है, न कि उसके बीच में.

Slides Reflection

लाइन रोटेशन

पेज के अन्य एलिमेंट की तरह, किसी लाइन का रोटेशन, लाइन का वर्टिकल ऐंगल नहीं होता, बल्कि उसके बाउंडिंग बॉक्स का रोटेशन होता है. शुरू और खत्म होने के तय बिंदुओं वाली लाइन बनाने पर, उसका रोटेशन हमेशा 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(), पेज एलिमेंट का अफ़ाइन ट्रांसफ़ॉर्म सेट करने के लिए (यह ABSOLUTE मोड जैसा ही है);
    • preconcatenateTransform(), पेज एलिमेंट के मौजूदा ट्रांसफ़ॉर्म में, ऐफ़ाइन ट्रांसफ़ॉर्म को पहले से जोड़ने के लिए (RELATIVE मोड की तरह).

नीचे दी गई स्क्रिप्ट कोई आकार बनाती है, उसका ट्रांसफ़ॉर्म सेट करती है, उसके ओरिजनल साइज़ को पढ़ती है, और उसके अफ़ाइन ट्रांसफ़ॉर्म को पढ़ती है.

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°.