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

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 API में, documents.create का इस्तेमाल करके, दस्तावेज़ बनाएं.
  2. अनुमतियां अपडेट करें, ताकि दस्तावेज़ पाने वाले लोग, Drive API में permissions.create इस्तेमाल करके उसे पढ़ सकें.
  3. अनुमतियां अपडेट करें, ताकि Drive API में permissions.create इस्तेमाल करके टेंप्लेट लेखक उसमें लिख सकें.
  4. ज़रूरत के हिसाब से टेंप्लेट में बदलाव करें.

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

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