डॉक्यूमेंट प्रॉपर्टीज़ के साथ काम करना
दस्तावेज़ गुणों के साथ काम करना
यह गाइड दिखाता है कि Word दस्तावेज़ की मेटाडेटा को कैसे पढ़ें और प्रबंधित करें — वह गुण जो Word के Info/Properties पैनल में दिखाई देते हैं, साथ ही कोई भी एप्लिकेशन-परिभाषित कस्टम मान। Document.BuiltInDocumentProperties और Document.CustomDocumentProperties इन दो वर्गों को उजागर करते हैं, दोनों अंततः समान अंतर्निहित DocumentProperty प्रतिनिधित्व पर आधारित हैं।
बिल्ट-इन दस्तावेज़ गुण
Document.BuiltInDocumentProperties एक BuiltInDocumentProperties संग्रह लौटाता है जो प्रत्येक दस्तावेज़ के लिए Word द्वारा ट्रैक किए जाने वाले मानक मेटाडेटा को कवर करता है: वर्णनात्मक फ़ील्ड जैसे Title, Subject, Author, Manager, Company, Category, Keywords, और Comments; टाइमस्टैम्प जैसे CreatedTime, LastSavedTime, और LastPrinted, साथ ही LastSavedBy और RevisionNumber; और आँकड़े जैसे Words, Characters, CharactersWithSpaces, Lines, Paragraphs, और Pages. Security दस्तावेज़ की सुरक्षा स्थिति को एक DocumentSecurity मान के रूप में रिपोर्ट करता है, और Template, NameOfApplication, और TotalEditingTime लेखन वातावरण का वर्णन करते हैं। क्योंकि BuiltInDocumentProperties एक निश्चित, ज्ञात गुणों का सेट है, व्यक्तिगत मानों को सामान्य गुणों (BuiltInDocumentProperties.Author = "...") के रूप में पढ़ा और लिखा जाता है, न कि नाम द्वारा खोजा जाता है।
कस्टम दस्तावेज़ गुण
Document.CustomDocumentProperties एक CustomDocumentProperties संग्रह लौटाता है जो एप्लिकेशन-परिभाषित मेटाडेटा के लिए है जो Word के बिल्ट-इन सेट का हिस्सा नहीं है। कई Add(name, value) ओवरलोड नाम और टाइप्ड मान (स्ट्रिंग, नंबर, बूलियन, या तिथि, ओवरलोड के अनुसार) से नया गुण बनाते हैं, और AddLinkToContent(name, linkSource) ऐसा गुण बनाता है जिसका मान दस्तावेज़ में बुकमार्क किए गए सामग्री की रेंज से जुड़ा होता है और उसे ट्रैक करता है, बजाय एक स्थिर मान के। नाम द्वारा इंडेक्सिंग (जैसे properties[name]) और Contains(name) किसी गुण को खोजते हैं, IndexOf(name) उसकी स्थिति लौटाता है, और Remove(name)/RemoveAt(index) उसे हटाते हैं।
The DocumentProperty ऑब्जेक्ट और साझा कलेक्शन बेस
दोनों BuiltInDocumentProperties और CustomDocumentProperties सारभूत DocumentPropertyCollection से व्युत्पन्न होते हैं, जो नाम, GetEnumerator(), Contains(name), IndexOf(name), और Count द्वारा एक इंडेक्सर को परिभाषित करता है — इसलिए दोनों संग्रहों की जांच एक ही तरीके से की जाती है, भले ही अंतर्निहित गुण निश्चित हों और कस्टम गुण खुले हों। व्यक्तिगत रूप से, एक DocumentProperty में एक Name, एक अनटाइप्ड Value, और एक Type होता है (एक PropertyType enum मान: Boolean, DateTime, Double, Number, String, StringArray, ObjectArray, ByteArray, या Other). IsLinkToContent और LinkSource यह रिपोर्ट करते हैं कि क्या गुण दस्तावेज़ की सामग्री से जुड़ा है या स्थिर मान रखता है (ऊपर AddLinkToContent देखें). चूँकि Value अनटाइप्ड है, DocumentProperty टाइप्ड एक्सेसर्स — ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray(), और ToString() — प्रदान करता है ताकि इसे स्पष्ट कास्ट के बिना विशिष्ट प्रकार के रूप में पढ़ा जा सके।
दस्तावेज़ सुरक्षा
BuiltInDocumentProperties.Security एक DocumentSecurity मान रिपोर्ट करता है जो दस्तावेज़ की सुरक्षा स्थिति का वर्णन करता है: None, PasswordProtected, ReadOnlyRecommended, ReadOnlyEnforced, या ReadOnlyExceptAnnotations. यह फ़ाइल की प्रॉपर्टीज़ से पढ़े गए दस्तावेज़ के संग्रहीत सुरक्षा मेटाडेटा को प्रतिबिंबित करता है।
सलाह और सर्वोत्तम प्रथाएँ
- टाइप्ड एक्सेसर्स (
ToInt(),ToDouble(),ToDateTime(),ToBool()) कोDocumentProperty.Valueपर उपयोग करें, बजाय कि अनटाइप्डobjectमान को सीधे कास्ट करें, क्योंकि अंतर्निहित स्टोरेज प्रकारPropertyTypeके अनुसार बदल सकता है। - जब कोई गुण मौजूद नहीं हो सकता है, तो नाम द्वारा किसी भी प्रॉपर्टी कलेक्शन में इंडेक्स करने से पहले
Contains(name)जांचें (उदा.properties[name]), ताकि मिसिंग-प्रॉपर्टी केस को अपवाद मार्ग के रूप में संभालने से बचा जा सके। - जब किसी कस्टम प्रॉपर्टी का मान हमेशा दस्तावेज़ के बुकमार्क किए गए भाग को प्रतिबिंबित करना चाहिए, तो
CustomDocumentProperties.AddLinkToContent(name, linkSource)का उपयोग करें, बजाय इसके कि सामग्री बदलने पर मैन्युअली स्थिर कस्टम प्रॉपर्टी को फिर से सिंक किया जाए। BuiltInDocumentPropertiesआँकड़ों (Words,Characters,Pages, और समान) को फ़ाइल के मेटाडेटा में संग्रहीत मानों के रूप में मानें, न कि हमेशा-लाइव गणना किए गए काउंट के रूप में — यदि दस्तावेज़ अंतिम बार लिखे जाने के बाद बदल गया है तो उन्हें स्पष्ट रूप से रीफ़्रेश करें।- दस्तावेज़ की घोषित सुरक्षा स्थिति की जाँच करने के लिए
BuiltInDocumentProperties.Securityपढ़ें, इससे पहले कि यह तय किया जाए कि आगे की सुरक्षा-संबंधी प्रोसेसिंग की आवश्यकता है या नहीं।
सामान्य समस्याएँ
| समस्या | कारण | समाधान |
|---|---|---|
नाम से CustomDocumentProperties संग्रह को इंडेक्स करने पर कोई उपयोगी परिणाम नहीं मिलता | इस दस्तावेज़ में प्रॉपर्टी मौजूद नहीं है | पहले Contains(name) को कॉल करें, या उपयुक्त Add(name, value) ओवरलोड के साथ प्रॉपर्टी जोड़ें |
| कस्टम प्रॉपर्टी का मान पढ़ने पर गलत प्रकार मिलता है | DocumentProperty.Value अनटाइप्ड object है; कॉलर ने ऐसा प्रकार मान लिया है जो Type से मेल नहीं खाता | उपयुक्त टाइप्ड एक्सेसर (ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) का उपयोग करें DocumentProperty.Type के आधार पर |
| एक जुड़ा हुआ कस्टम प्रॉपर्टी का मान पुराना दिख रहा है | प्रॉपर्टी AddLinkToContent के माध्यम से लिंक की गई है, और लिंक किए गए कंटेंट में बदलाव हुआ है जबकि दस्तावेज़ को सही तरीके से अपडेट नहीं किया गया | पुष्ट करें कि बुकमार्क किया गया linkSource रेंज अभी भी इच्छित सामग्री को दर्शाता है |
शब्द आँकड़े (Words, Pages, आदि) दस्तावेज़ की वास्तविक वर्तमान सामग्री से मेल नहीं खाते | बिल्ट-इन आँकड़े संग्रहीत मेटाडेटा को दर्शाते हैं, न कि वास्तविक समय की पुनः गिनती | यदि अद्यतित गिनती आवश्यक है तो संबंधित BuiltInDocumentProperties मानों को पुनर्गणना करें और अपडेट करें |
FAQ
मैं दस्तावेज़ के लेखक और शीर्षक को कैसे पढ़ूँ या सेट करूँ?
सीधे Document.BuiltInDocumentProperties.Author और .Title का उपयोग करें — वे Document.BuiltInDocumentProperties से पहुँचने वाले BuiltInDocumentProperties संग्रह में सामान्य स्ट्रिंग प्रॉपर्टी हैं।
मैं ऐसी एप्लिकेशन-विशिष्ट मेटाडेटा कैसे जोड़ूँ जो मानक Word प्रॉपर्टी नहीं है?
Document.CustomDocumentProperties.Add(name, value) को प्रॉपर्टी के नाम और मान के साथ उपयोग करें; मान के प्रकार के आधार पर उपयुक्त Add ओवरलोड चुना जाता है।
BuiltInDocumentProperties और CustomDocumentProperties में क्या अंतर है?
BuiltInDocumentProperties Word का स्थिर मानक मेटाडाटा फ़ील्ड्स का सेट है (लेखक, शीर्षक, आँकड़े, आदि), जिसे नामित प्रॉपर्टीज़ के रूप में एक्सेस किया जाता है। CustomDocumentProperties एक खुला, नामित संग्रह है DocumentProperty मानों का, जो एप्लिकेशन-परिभाषित मेटाडाटा के लिए है, जिसे नाम द्वारा इंडेक्सर के माध्यम से एक्सेस किया जाता है (उदाहरण के लिए properties[name]) और Contains।
मैं किसी कस्टम प्रॉपर्टी को उसके सहेजे गए प्रकार को पहले से जाने बिना कैसे पढ़ सकता हूँ?
संग्रह को इंडेक्स करके DocumentProperty प्राप्त करें (उदाहरण के लिए properties[name]), उसके Type (एक PropertyType मान) की जाँच करें, और उसके Value पर ToInt(), ToDouble(), ToDateTime(), या ToBool() जैसे मिलते-जुलते टाइप्ड एक्सेसर का उपयोग करें।
मैं किसी कस्टम प्रॉपर्टी को दस्तावेज़ की सामग्री के एक हिस्से को ट्रैक करने के लिए कैसे बना सकता हूँ?
CustomDocumentProperties.AddLinkToContent(name, linkSource) का उपयोग करें, बुकमार्क नाम को linkSource के रूप में पास करके; फिर प्रॉपर्टी का मान उस बुकमार्क की गई सामग्री को दर्शाता है, न कि एक स्थिर मान को।
API Reference सारांश
| क्लास/मेथड | विवरण |
|---|---|
Document.BuiltInDocumentProperties | Word के मानक मेटाडेटा फ़ील्ड (लेखक, शीर्षक, आँकड़े, सुरक्षा, आदि) |
Document.CustomDocumentProperties | एप्लिकेशन-परिभाषित नामित मेटाडेटा गुण |
CustomDocumentProperties.Add(name, value) | नाम और टाइप किया हुआ मान से एक कस्टम प्रॉपर्टी जोड़ें |
CustomDocumentProperties.AddLinkToContent(name, linkSource) | बुकमार्क की गई दस्तावेज़ सामग्री से जुड़ी कस्टम प्रॉपर्टी जोड़ें |
DocumentPropertyCollection | दोनों प्रॉपर्टी संग्रहों के लिए साझा सारभूत आधार |
DocumentProperty | एकल प्रॉपर्टी का नाम, अनटाइप्ड मान, और PropertyType |
DocumentProperty.ToInt() / ToDouble() / ToDateTime() / ToBool() | प्रॉपर्टी के मान के लिए टाइप्ड एक्सेसर |
PropertyType | एक DocumentProperty के मान प्रकार को दर्शाने वाला एन्युम |
DocumentSecurity | Enum describing a document’s protection state, via BuiltInDocumentProperties.Security |