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

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<>();
// One option for replacing all text is to specify all tab IDs.
requests.add(new Request()
        .setReplaceAllText(new ReplaceAllTextRequest()
                .setContainsText(new SubstringMatchCriteria()
                        .setText("{{customer-name}}")
                        .setMatchCase(true))
                .setReplaceText(customerName)
                .setTabsCriteria(new TabsCriteria()
                        .addTabIds(TAB_ID_1)
                        .addTabIds(TAB_ID_2)
                        .addTabIds(TAB_ID_3))));
// Another option is to omit TabsCriteria if you are replacing across all tabs.
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 = [
    // One option for replacing all text is to specify all tab IDs.
    {
      replaceAllText: {
        containsText: {
          text: '{{customer-name}}',
          matchCase: true,
        },
        replaceText: customerName,
        tabsCriteria: {
          tabIds: [TAB_ID_1, TAB_ID_2, TAB_ID_3],
        },
      },
    },
    // Another option is to omit TabsCriteria if you are replacing across all tabs.
    {
      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 = [
        # One option for replacing all text is to specify all tab IDs.
        {
        'replaceAllText': {
            'containsText': {
                'text': '{{customer-name}}',
                'matchCase':  'true'
            },
            'replaceText': customer_name,
            'tabsCriteria': {
                'tabIds': [TAB_ID_1, TAB_ID_2, TAB_ID_3],
            },
        }},
        # Another option is to omit TabsCriteria if you are replacing across all tabs.
        {
        '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 का इस्तेमाल करके वैल्यू बदलें.