.NET में फ़ील्ड्स के साथ कैसे काम करें

.NET में फ़ील्ड्स के साथ कैसे काम करें

यह गाइड दिखाता है कि Aspose.Words FOSS for .NET में Word फ़ील्ड्स — DATE, IF, REF, DATABASE, और कई अन्य — के साथ कैसे काम किया जाए: फ़ील्ड डालना और उसका परिणाम पढ़ना, प्रोग्रामेटिक संपादन के बाद फ़ील्ड्स को अपडेट करना, अपडेट व्यवहार को कॉन्फ़िगर करना, कॉलबैक के साथ अपडेट्स को ट्रैक करना, और फ़ील्ड को परिवर्तित या हटाना। Aspose.Words FOSS for .NET NuGet के माध्यम से या स्रोत से बनाकर उपलब्ध है।

कदम दर कदम गाइड

चरण 1: लाइब्रेरी प्राप्त करें

रिपोज़िटरी को क्लोन करें और बिल्ड करें Aspose.Words.sln रिलीज़ कॉन्फ़िगरेशन में, फिर एक प्रोजेक्ट रेफ़रेंस जोड़ें Aspose.Words.csproj अपने स्वयं के .NET प्रोजेक्ट से, जैसा कि इंस्टॉलेशन गाइड. जोड़ें using Aspose.Words; and using Aspose.Words.Fields; फ़ील्ड्स के साथ काम करने वाली किसी भी फ़ाइल के शीर्ष पर।


चरण 2: फ़ील्ड डालें और उसका परिणाम पढ़ें

DocumentBuilder.InsertField() कर्सर पर एक नया फ़ील्ड डालता है, जिसमें ओवरलोड्स होते हैं जो या तो फ़ील्ड के परिणाम को तुरंत अपडेट करते हैं या बाद की अपडेट पास के लिए छोड़ देते हैं। प्रत्येक फ़ील्ड एक Field इंस्टेंस है जो तीन मार्कर नोड्स — FieldStart, Separator, और FieldEnd — से बना होता है, जिन्हें Field.Start / Field.Separator / Field.End के रूप में एक्स्पोज़ किया जाता है। Field.Type यह पहचानता है कि वह किस FieldType का प्रतिनिधित्व करता है, Field.Result और Field.DisplayResult अंतिम गणना किए गए मान को रखते हैं, Field.Format कोड से जुड़े किसी भी फ़ॉर्मेट स्विच को रखता है, और Field.GetFieldCode() कच्चा फ़ील्ड कोड टेक्स्ट लौटाता है।


चरण 3: प्रोग्रामेटिक संपादन के बाद फ़ील्ड अपडेट करें

Aspose.Words FOSS दस्तावेज़ लोड या सहेजते समय फ़ील्ड को पुनर्गणना नहीं करता है। एक संपादन के बाद जो फ़ील्ड के परिणाम को बदलना चाहिए, Range.UpdateFields() को कॉल करें ताकि उस रेंज में हर फ़ील्ड को पुनः गणना किया जा सके — पूरे दस्तावेज़ के लिए Document.Range.UpdateFields() का उपयोग करें — या एकल फ़ील्ड के लिए Field.Update() का उपयोग करें। Range.UnlinkFields() एक ही कॉल में रेंज के सभी फ़ील्ड को स्थैतिक पाठ में बदल देता है, और Range.NormalizeFieldTypes() मैन्युअल संपादन के बाद फ़ील्ड के संग्रहीत प्रकार कोड को उसके वास्तविक फ़ील्ड कोड के साथ मिलाता है।


चरण 4: FieldOptions के साथ फ़ील्ड अपडेट व्यवहार को कॉन्फ़िगर करें

Document.FieldOptions (एक FieldOptions इंस्टेंस) यह निर्धारित करता है कि अपडेट के दौरान पूरे दस्तावेज़ के फ़ील्ड कैसे व्यवहार करेंगे: CurrentUser (एक UserInformation इंस्टेंस — Name, Initials, Address) वह पहचान प्रदान करता है जिससे लेखक-और उपयोगकर्ता-नाम-संबंधित फ़ील्ड पढ़ते हैं, DefaultDocumentAuthor लेखक-संबंधी परिणामों को सीड करता है, और LegacyNumberFormat / UseInvariantCultureNumberFormat / PreProcessCulture / FieldUpdateCultureSource संख्या और तिथि फ़ॉर्मेटिंग को नियंत्रित करते हैं। अनदेखी पाइपलाइन के लिए, FieldOptions.UserPromptRespondent (एक IFieldUserPromptRespondent) को असाइन करें ताकि ASK और FILLIN जैसे प्रॉम्प्ट-ड्रिवेन फ़ील्ड इंटरैक्टिव इनपुट की प्रतीक्षा में ब्लॉक न हों, और IFieldDatabaseProvider को FieldOptions.FieldDatabaseProvider में एक कस्टम असाइन करें ताकि DATABASE फ़ील्ड की पंक्तियों को वास्तविक डेटाबेस कनेक्शन के बजाय आपके अपने डेटा स्रोत से प्रदान किया जा सके।


चरण 5: कॉलबैक के साथ फ़ील्ड अपडेट को ट्रैक करें

IFieldUpdatingCallback (FieldUpdating और FieldUpdated) को लागू करें और इसे FieldOptions को असाइन करें ताकि हर फ़ील्ड के पुनर्गणना से पहले और बाद में तुरंत कोड चलाया जा सके — यह बैच जॉब में ठीक कौन से फ़ील्ड बदलें, इसका ऑडिट करने में उपयोगी है। बड़े दस्तावेज़ में प्रगति रिपोर्टिंग के लिए, IFieldUpdatingProgressCallback (Notify) को लागू करें, जो एक FieldUpdatingProgressArgs प्राप्त करता है जो TotalFieldsCount, UpdatedFieldsCount, और UpdateCompleted को उजागर करता है।


चरण 6: फ़ील्ड को परिवर्तित या हटाएँ

Field.Unlink() फ़ील्ड को उसके अंतिम-गणना परिणाम के साथ सामान्य स्थैतिक पाठ में बदल देता है, मूल फ़ील्ड कोड को हटाकर — इसे तब उपयोग करें जब आप चाहते हैं कि मान स्थायी रूप से दस्तावेज़ में समाहित हो। Field.Remove() FieldStart, Separator, और FieldEnd नोड्स को फ़ील्ड के कोड और परिणाम के साथ ही हटा देता है, जिससे फ़ील्ड पूरी तरह से हट जाता है। इन दो विधियों को सीधे मार्कर नोड्स को हटाने की तुलना में प्राथमिकता दें, क्योंकि फ़ील्ड की संरचना का केवल भाग मैन्युअली हटाने से दस्तावेज़ ट्री असंगत रह सकता है।

सामान्य समस्याएँ और समाधान

फ़ील्ड का प्रदर्शित परिणाम दस्तावेज़ को संपादित करने के बाद पुराना हो जाता है। Aspose.Words FOSS लोड या सहेजने पर फ़ील्ड्स को स्वतः अपडेट नहीं करता। कॉल करें Range.UpdateFields() or Field.Update() स्पष्ट रूप से संपादन के बाद।

PAGE, NUMPAGES, या एक अनुक्रमणिका पृष्ठ संख्या हमेशा दिखती है 0. पृष्ठ-लेआउट/रेंडरिंग इस संस्करण का हिस्सा नहीं है, इसलिए उन फ़ील्ड्स जिनका परिणाम पेजिनेशन पर निर्भर करता है, एक प्लेसहोल्डर में मूल्यांकित होते हैं 0. यह इस संस्करण में अपेक्षित व्यवहार है।

एक बैच फ़ील्ड अपडेट लटकता हुआ प्रतीत होता है। एक प्रॉम्प्ट-ड्रिवन फ़ील्ड (ASK, FILLIN) में कोई नहीं IFieldUserPromptRespondent असाइन किया गया है। असाइन करें FieldOptions.UserPromptRespondent, या सेट DefaultResponse व्यक्तिगत फ़ील्ड इंस्टेंस पर।

यह DATABASE फ़ील्ड कोई पंक्तियाँ उत्पन्न नहीं करता। कोई IFieldDatabaseProvider को सौंपा गया है FieldOptions.FieldDatabaseProvider. इंटरफ़ेस को लागू करें और कॉल करने से पहले इसे असाइन करें Range.UpdateFields().

अक्सर पूछे जाने वाले प्रश्न

क्या Aspose.Words FOSS हर Word फ़ील्ड प्रकार का मूल्यांकन करता है?

Field ऑब्जेक्ट मॉडल हर FieldType मान को दर्शाता है और अधिकांश को अपडेट करता है, लेकिन ऐसे फ़ील्ड जिनका परिणाम पेज लेआउट पर निर्भर करता है — जैसे PAGE और NUMPAGES — एक प्लेसहोल्डर 0 के रूप में मूल्यांकन होते हैं क्योंकि इस संस्करण में लेआउट/रेंडरिंग इंजन शामिल नहीं है।

प्रोग्रामेटिक संपादन के बाद मैं फ़ील्ड्स को फिर से कैसे मूल्यांकन करूँ?

संपादित सामग्री को कवर करने वाली रेंज पर Range.UpdateFields() को कॉल करें, या पूरे दस्तावेज़ के लिए Document.Range.UpdateFields() का उपयोग करें।

क्या मैं किसी फ़ील्ड को साधारण, स्थिर पाठ में बदल सकता हूँ?

हाँ — Field.Unlink() फ़ील्ड को उसके अंतिम-गणना परिणाम के रूप में साधारण पाठ से बदल देता है।

मैं फ़ील्ड को पूरी तरह से, उसके परिणाम सहित, कैसे हटा सकता हूँ?

Field.Remove() को कॉल करें। यह FieldStart, Separator, और FieldEnd नोड्स को फ़ील्ड के कोड और परिणाम सामग्री के साथ हटा देता है।

मैं DATABASE फ़ील्ड को कस्टम डेटा कैसे प्रदान करूँ?

IFieldDatabaseProvider को लागू करें और इसे Document.FieldOptions.FieldDatabaseProvider को असाइन करें। इसका GetQueryResult() कार्यान्वयन FieldDatabaseDataRow इंस्टेंसों से निर्मित एक FieldDatabaseDataTable लौटाता है।

यह भी देखें

 हिन्दी