टेक्स्ट को किसी दस्तावेज़ में मर्ज करना

Google Docs API का एक उपयोगी ऐप्लिकेशन, एक या ज़्यादा डेटा सोर्स से जानकारी को दस्तावेज़ में मर्ज करना है.

इस पेज पर बताया गया है कि किसी बाहरी सोर्स से डेटा कैसे लेकर उसे एक मौजूदा टेंप्लेट दस्तावेज़ में शामिल किया जा सकता है.

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

यह तरीका आपके काम का क्यों होता है, इसकी कई वजहें होती हैं:

  • डिज़ाइनर के लिए Google Docs एडिटर्स का इस्तेमाल करके किसी दस्तावेज़ के डिज़ाइन को बेहतर बनाना आसान होता है. यह रेंडर किए गए लेआउट को सेट करने के लिए अपने ऐप्लिकेशन में पैरामीटर ट्यूनिंग से ज़्यादा आसान है.

  • प्रज़ेंटेशन से कॉन्टेंट को अलग करना, डिज़ाइन का एक जाना-पहचाना सिद्धांत है और इसके कई फ़ायदे हैं.

मर्ज का कॉन्सेप्ट दिखाने वाला डायग्राम.

एक सामान्य रेसिपी

इस उदाहरण में बताया गया है कि किसी दस्तावेज़ में डेटा मर्ज करने के लिए, Docs API का इस्तेमाल कैसे किया जा सकता है:

  1. प्लेसहोल्डर कॉन्टेंट का इस्तेमाल करके अपना दस्तावेज़ बनाएं, ताकि आप डिज़ाइन और फ़ॉर्मैट को आसानी से समझ सकें. उस टेक्स्ट फ़ॉर्मैटिंग को सुरक्षित रखा जाता है जिसे आपको बदलना है.

  2. डाले जाने वाले हर एलिमेंट के लिए, प्लेसहोल्डर कॉन्टेंट को एक टैग से बदलें. उन स्ट्रिंग का ही इस्तेमाल करें जिनके सामान्य होने की संभावना नहीं है. उदाहरण के लिए, {{account-holder-name}} एक अच्छा टैग हो सकता है.

  3. अपने कोड में, दस्तावेज़ की कॉपी बनाने के लिए Google Drive API का इस्तेमाल करें.

  4. अपने कोड में, दस्तावेज़ के नाम के साथ Docs API के batchUpdate() तरीके का इस्तेमाल करें और उसमें कोई ReplaceAllTextRequest शामिल करें.

दस्तावेज़ आईडी किसी दस्तावेज़ के बारे में बताते हैं और उन्हें यूआरएल से लिया जा सकता है

https://docs.google.com/document/d/documentId/edit

उदाहरण

नीचे दिया गया उदाहरण देखें, जिसमें टेंप्लेट में दो फ़ील्ड को, असल वैल्यू से बदल दिया जाता है. इससे, तैयार दस्तावेज़ को जनरेट किया जाता है.

मर्ज करने के लिए, नीचे दिए गए कोड का इस्तेमाल किया जा सकता है.

Java

        String customerName = "Alice";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
        String date = formatter.format(LocalDate.now());

        List<Request> requests = new ArrayList<>();
        requests.add(new Request()
                .setReplaceAllText(new ReplaceAllTextRequest()
                        .setContainsText(new SubstringMatchCriteria()
                                .setText("{{customer-name}}")
                                .setMatchCase(true))
                        .setReplaceText(customerName)));
        requests.add(new Request()
                .setReplaceAllText(new ReplaceAllTextRequest()
                        .setContainsText(new SubstringMatchCriteria()
                                .setText("{{date}}")
                                .setMatchCase(true))
                        .setReplaceText(date)));

        BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
        service.documents().batchUpdate(documentId, body.setRequests(requests)).execute();

Node.js

  let customerName = 'Alice';
  let date = yyyymmdd()
  let requests = [
    {
      replaceAllText: {
        containsText: {
          text: '{{customer-name}}',
          matchCase: true,
        },
        replaceText: customerName,
      },
    },
    {
      replaceAllText: {
        containsText: {
          text: '{{date}}',
          matchCase: true,
        },
        replaceText: date,
      },
    },
  ];

  google.options({auth: auth});
  google
      .discoverAPI(
          'https://docs.googleapis.com/$discovery/rest?version=v1&key={YOUR_API_KEY}')
      .then(function(docs) {
        docs.documents.batchUpdate(
            {
              documentId: '1yBx6HSnu_gbV2sk1nChJOFo_g3AizBhr-PpkyKAwcTg',
              resource: {
                requests,
              },
            },
            (err, {data}) => {
              if (err) return console.log('The API returned an error: ' + err);
              console.log(data);
            });
      });

Python

    customer_name = 'Alice'
    date = datetime.datetime.now().strftime("%y/%m/%d")

    requests = [
         {
            'replaceAllText': {
                'containsText': {
                    'text': '{{customer-name}}',
                    'matchCase':  'true'
                },
                'replaceText': customer_name,
            }}, {
            'replaceAllText': {
                'containsText': {
                    'text': '{{date}}',
                    'matchCase':  'true'
                },
                'replaceText': str(date),
            }
        }
    ]

    result = service.documents().batchUpdate(
        documentId=document_id, body={'requests': requests}).execute()

टेंप्लेट मैनेज करें

ऐप्लिकेशन के बताए गए और मालिकाना हक वाले टेंप्लेट दस्तावेज़ों के लिए, ऐप्लिकेशन का प्रतिनिधित्व करने वाले एक खास खाते का इस्तेमाल करके टेंप्लेट बनाएं. सेवा खाते अच्छे विकल्प हैं. साथ ही, शेयर करने पर पाबंदी लगाने वाली Google Workspace की नीतियों का पालन न करने से जुड़ी समस्याओं से बचें.

टेंप्लेट से दस्तावेज़ों के इंस्टेंस बनाते समय, हमेशा असली उपयोगकर्ता के क्रेडेंशियल का इस्तेमाल करें. इससे उपयोगकर्ताओं को नतीजे मिलने वाले दस्तावेज़ पर पूरा कंट्रोल मिल जाता है. साथ ही, Drive में हर उपयोगकर्ता की सीमाओं से जुड़ी गड़बड़ियों को घटाने या बढ़ाने से बचा जा सकता है.

सेवा खाते का इस्तेमाल करके टेंप्लेट बनाने के लिए, ऐप्लिकेशन क्रेडेंशियल के साथ नीचे दिया गया तरीका अपनाएं:

  1. Docs एपीआई में documents.create का इस्तेमाल करके दस्तावेज़ बनाएं.
  2. दस्तावेज़ पाने वाले लोगों को, Drive API में permissions.create इस्तेमाल करके, इसे पढ़ने की अनुमति दें. इसके लिए, अनुमतियों को अपडेट करें.
  3. अनुमतियां अपडेट करें, ताकि टेंप्लेट के लेखक Drive API में permissions.create इस्तेमाल करके, उस टेंप्लेट में बदलाव कर सकें.
  4. ज़रूरत के हिसाब से टेंप्लेट में बदलाव करें.

दस्तावेज़ का इंस्टेंस बनाने के लिए, उपयोगकर्ता क्रेडेंशियल के साथ यहां दिया गया तरीका अपनाएं:

  1. Drive API में files.copy का इस्तेमाल करके, टेंप्लेट की एक कॉपी बनाएं.
  2. Docs एपीआई में documents.batchUpdate का इस्तेमाल करके वैल्यू बदलें.