दस्तावेज़ों के साथ काम करना
दस्तावेज़ों के साथ काम करना
Aspose.Words FOSS for .NET प्रत्येक Word फ़ाइल को Document क्लास पर आधारित इन-मेरी मॉडल के रूप में प्रस्तुत करता है, जहाँ DocumentBuilder सामग्री लेखन के लिए उच्च-स्तरीय, कर्सर-आधारित API प्रदान करता है। यह मार्गदर्शिका दस्तावेज़ बनाने व लोड करने, DocumentBuilder के साथ लेखन, सेक्शन/बॉडी संरचना, नोड ट्री की यात्रा, दस्तावेज़ों को मिलाने, तथा उन्हें संरक्षित करने को कवर करती है।
दस्तावेज़ बनाना और लोड करना
new Document() से एक खाली दस्तावेज़ बनाएं, या पाथ या Stream को Document(fileName) या Document(stream) कंस्ट्रक्टर में पास कर मौजूदा फ़ाइल खोलें। LoadOptions तर्क स्वीकार करने वाले ओवरलोड आपको लोडिंग व्यवहार नियंत्रित करने देते हैं, जैसे एन्क्रिप्टेड फ़ाइल के लिए पासवर्ड प्रदान करना।
अज्ञात या अविश्वसनीय स्रोत से फ़ाइल लोड करने से पहले, FileFormatUtil.DetectFileFormat(fileName) (या Stream ओवरलोड) एक FileFormatInfo लौटाता है जो पाए गए LoadFormat को वर्णित करता है, तथा फ़ाइल IsEncrypted, HasDigitalSignature या HasMacros है या नहीं।
DocumentBuilder के साथ लेखन
DocumentBuilder एक Document को घेरता है और एक कर्सर प्रदान करता है जिसे आप दस्तावेज़ में सामग्री डालते हुए चलाते हैं। Write(text) और Writeln(text) कर्सर पर पाठ डालते हैं; InsertParagraph() नया पैराग्राफ शुरू करता है। बिल्डर पर फ़ॉर्मेटिंग गुण — Font, ParagraphFormat, ListFormat, PageSetup — अगले लिखे जाने वाले हिस्से पर लागू होते हैं।
कर्सर को MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName) या MoveToParagraph(paragraphIndex, characterIndex) के साथ ले जाएँ। बिल्डर की CurrentNode, CurrentParagraph और CurrentSection प्रॉपर्टीज़ वर्तमान स्थिति को ट्री में दर्शाती हैं।
दस्तावेज़ संरचना: अनुभाग और मुख्य भाग
Document एक SectionCollection रखता है (Document.Sections, साथ ही FirstSection / LastSection); प्रत्येक Section में एक Body होता है, वैकल्पिक हेडर/फूटर संग्रह, और उसका अपना PageSetup। Section.AppendContent(sourceSection) और PrependContent(sourceSection) अनुभागों के बीच सामग्री की प्रतिलिपि बनाते हैं, और ClearContent() दस्तावेज़ से हटाए बिना अनुभाग को रीसेट करता है।
Body के भीतर, सामग्री Body.Paragraphs (एक ParagraphCollection) और Body.Tables के माध्यम से उपलब्ध कराई जाती है। एक Range — जो Document, Section, Paragraph और अन्य नोड्स से प्राप्त किया जा सकता है — ट्री का एक सतत क्षेत्र दर्शाता है; Range.Text उसका सादा पाठ पढ़ता है और Range.Replace(pattern, replacement) केवल उस क्षेत्र पर खोज-और-प्रतिस्थापन करता है।
DocumentVisitor के साथ नोड ट्री को चलाना
दस्तावेज़ का प्रत्येक भाग — अनुभाग, अनुच्छेद, रन, तालिकाएँ, फ़ील्ड, आकार, टिप्पणी, फुटनोट — Document पर स्थित एक सम्मिश्र ट्री में Node होता है। किसी विशिष्ट प्रकार के सभी नोड्स को मैन्युअल रूप से पुनरावृति किए बिना संसाधित करने के लिए, अमूर्त DocumentVisitor को सबक्लास करें और आवश्यक Visit*Start / Visit*End कॉलबैक को ओवरराइड करें, जैसे VisitParagraphStart(paragraph) या VisitRun(run), फिर document.Accept(visitor) को कॉल करें। प्रत्येक कॉलबैक एक VisitorAction (Continue, SkipThisNode, या Stop) लौटा सकता है जिससे यात्रा की दिशा नियंत्रित होती है।
क्लोनिंग, इम्पोर्ट और सामग्री जोड़ना
Document.Clone() संपूर्ण दस्तावेज़ की एक डीप कॉपी बनाता है। दो अलग-अलग Document उदाहरणों के बीच सामग्री स्थानांतरित करने के लिए, गंतव्य दस्तावेज़ पर ImportNode(srcNode, isImportChildren) को कॉल करें जिससे विदेशी ट्री से नोड लाया जा सके, या Document.AppendDocument(srcDoc, importFormatMode) को उपयोग करके किसी दस्तावेज़ के अनुभागों को दूसरे में चुने हुए ImportFormatMode — KeepSourceFormatting, UseDestinationStyles या KeepDifferentStyles — के माध्यम से जोड़ें। DocumentBuilder.InsertDocument(srcDoc, importFormatMode) स्रोत दस्तावेज़ की सामग्री को बिल्डर के कर्सर पर, अंत में नहीं, सम्मिलित करता है।
दस्तावेज़ की सुरक्षा
Document.Protect(type, password) संपादन को ProtectionType मान के अनुसार प्रतिबंधित करता है — ReadOnly, AllowOnlyComments, AllowOnlyRevisions, AllowOnlyFormFields, या NoProtection से सुरक्षा हटाई जा सकती है। Unprotect() (पासवर्ड के साथ या बिना) इसे उलट देता है। यह Word द्वारा लागू किया गया एक संपादन प्रतिबंध है, जो OoxmlSaveOptions.Password द्वारा फ़ाइल सहेजते समय लागू किए जाने वाले OOXML पासवर्ड एन्क्रिप्शन से अलग है।
सलाह और सर्वोत्तम प्रथाएँ
DocumentBuilderको नई सामग्री बनाने के लिए प्राथमिकता दें; जब मौजूदा पेड़ पर सूक्ष्म नियंत्रण चाहिए तो सीधे नोड मैनिपुलेशन (AppendChild,InsertAfter,Clone) का उपयोग करें।- अविश्वसनीय या उपयोगकर्ता-प्रदान स्रोत से फ़ाइल लोड करने से पहले
FileFormatUtil.DetectFileFormatको लागू करें ताकि आपLoadFormatकी जाँच कर सकें और असमर्थित या एन्क्रिप्टेड इनपुट को शीघ्र अस्वीकार कर सकें। AppendDocumentयाInsertDocumentसे दस्तावेज़ मिलाते समय,ImportFormatModeको जानबूझकर चुनें —KeepSourceFormattingस्रोत की रूप-रेखा को बनाए रखता है, जबकिUseDestinationStylesलक्ष्य दस्तावेज़ के शैली सेट से मेल खाता है।- जब आपको किसी नोड प्रकार के सभी उदाहरणों को सुसंगत रूप से प्रोसेस करना हो, तो मैन्युअल पुनरावर्ती ट्री-वॉकिंग के बजाय
DocumentVisitorउपवर्ग का उपयोग करें। Document.Protectएक संपादन प्रतिबंध है, एन्क्रिप्शन नहीं — यदि सहेजी गई फ़ाइल को खोलने के लिए पासवर्ड आवश्यक हो तो इसेOoxmlSaveOptions.Passwordके साथ जोड़ें।
आम समस्याएँ
| समस्या | कारण | समाधान |
|---|---|---|
Document(fileName) ऐसी फ़ाइल के लिए त्रुटि देता है जो Word में ठीक से खुलती है | फ़ाइल का फ़ॉर्मेट इस संस्करण द्वारा लोड करने के लिए समर्थित नहीं है | पहले FileFormatUtil.DetectFileFormat को कॉल करें और लोड करने से पहले लौटाए गए LoadFormat की जाँच करें |
| संलग्न सामग्री गलत फ़ॉन्ट या शैली ले लेती है | ImportFormatMode स्रोत और गंतव्य शैली सेटों के बीच बेमेल | डिफ़ॉल्ट पर निर्भर रहने के बजाय, KeepSourceFormatting या UseDestinationStyles को स्पष्ट रूप से पास करें |
DocumentVisitor ट्रैवर्सल जल्दी रुक जाता है या सामग्री को छोड़ देता है | एक Visit*Start / Visit*End ओवरराइड अनजाने में SkipThisNode या Stop लौटाता है | हर ओवरराइड से VisitorAction.Continue वापस दें, जब तक आप विशेष रूप से छोड़ने या रोकने का इरादा न रखें |
Unprotect() का कोई प्रभाव नहीं है | दस्तावेज़ पासवर्ड से सुरक्षित नहीं था, या गलत पासवर्ड प्रदान किया गया था | यदि Protect बिना पासवर्ड के बुलाया गया था, तो Unprotect() को बिना तर्क के चलाएँ; अन्यथा मिलते-जुलते पासवर्ड को पास करें |
FAQ
Document.Clone() और ImportNode में क्या अंतर है?
Clone() एक संपूर्ण दस्तावेज़ को नई Document इंस्टेंस में कॉपी करता है। ImportNode(srcNode, isImportChildren) एकल नोड (और वैकल्पिक रूप से उसके बच्चों) को एक दस्तावेज़ के ट्री से दूसरे में लाता है, जो आप विशिष्ट सामग्री को संयोजित करने के समय उपयोग करते हैं, न कि पूरे दस्तावेज़ों को।
कौन से फ़ाइल फ़ॉर्मैट Document(fileName) लोड कर सकता है?
Document(fileName) DOCX, DOCM, DOTX, DOTM, Flat OPC (और उसके मैक्रो-सक्षम तथा टेम्प्लेट संस्करण), Markdown, और प्लेन टेक्स्ट लोड करता है। पुराने वर्ड-प्रोसेसिंग और वेब फ़ॉर्मैट इस संस्करण के लोडर्स में शामिल नहीं हैं।
मैं यह कैसे पता करूँ कि DocumentBuilder वर्तमान में कहाँ स्थित है?
बिल्डर इंस्टेंस पर CurrentNode, CurrentParagraph या CurrentSection पढ़ें।
क्या Document.Protect सहेजी गई फ़ाइल को एन्क्रिप्ट करता है?
नहीं — यह एक संपादन प्रतिबंध है जो फ़ाइल खोलते समय Word द्वारा लागू किया जाता है। सहेजते समय OoxmlSaveOptions.Password सेट करें ताकि फ़ाइल खोलते समय पासवर्ड आवश्यक हो।
मैं दस्तावेज़ के मुख्य भाग में केवल पैराग्राफ कैसे पढ़ूँ?
Body.Paragraphs संग्रह का उपयोग करें, या अन्य नोड प्रकारों हेतु Body.GetChildNodes(nodeType, isDeep) का प्रयोग करें।
API Reference सारांश
| क्लास/मेथड | विवरण |
|---|---|
Document | डॉक्यूमेंट ऑब्जेक्ट मॉडल की जड़; कंस्ट्रक्टर्स फ़ाइल या स्ट्रीम से लोड होते हैं, या एक खाली दस्तावेज़ बनाते हैं। |
Document.Save | दस्तावेज़ को फ़ाइल, स्ट्रीम, या HTTP प्रतिक्रिया में चयनित प्रारूप में लिखता है। |
Document.Clone() | पूरे दस्तावेज़ की गहरी प्रतिलिपि बनाता है। |
Document.Protect(type, password) / Unprotect() | एक संपादन प्रतिबंध लागू करता है या हटाता है। |
Document.AppendDocument(srcDoc, importFormatMode) | दूसरे दस्तावेज़ के अनुभागों को इस में जोड़ता है। |
DocumentBuilder | कर्सर-आधारित API पाठ लिखने और दस्तावेज़ में सामग्री सम्मिलित करने के लिए। |
DocumentBuilder.InsertDocument(srcDoc, importFormatMode) | कर्सर पर स्रोत दस्तावेज़ की सामग्री सम्मिलित करता है। |
Section / SectionCollection | एक दस्तावेज़ का एकल अनुभाग, तथा सभी अनुभागों का संग्रह। |
Body | एक अनुभाग के मुख्य पाठ (पैराग्राफ और तालिकाएँ) के लिए कंटेनर। |
Range | दस्तावेज़ वृक्ष का एक सतत क्षेत्र; Text और Replace का समर्थन करता है। |
DocumentVisitor | दस्तावेज़ वृक्ष के सभी नोड्स को क्रमशः travers करने हेतु सारभूत आधार वर्ग। |
ProtectionType | दस्तावेज़-स्तर के संपादन प्रतिबंधों का Enum। |
FileFormatUtil.DetectFileFormat | फ़ाइल या स्ट्रीम का स्वरूप लोड करने से पहले पता करता है। |