परिचय

यह गाइड देखता है कि Aspose.Words FOSS .NET के लिए मेमोरी में एक Word दस्तावेज़ को कैसे दर्शाता है, और उन API को जो इस प्रतिनिधित्व को बनाने, नेविगेट करने और बदलने के लिए उपयोग किए जाते हैं: क्रमिक लेखन के लिए DocumentBuilder, प्रत्यक्ष संरचनात्मक पहुँच के लिए नोड ट्री (Node, CompositeNode, NodeCollection), एक ही पास में प्रत्येक नोड प्रकार को प्रोसेस करने के लिए DocumentVisitor, Range और FindReplaceOptions के माध्यम से खोज-और-प्रतिस्थापना, और दस्तावेज़ों को मिलाने और क्लोन करने के तरीकों। Where घोषणा पोस्ट लाइब्रेरी को संपूर्ण रूप में परिचय कराता है, यह संस्करण दस्तावेज़ ऑब्जेक्ट मॉडल (DOM) पर केंद्रित रहता है — API सतह का सबसे बड़ा क्षेत्र — और इसके भाग कैसे साथ जुड़ते हैं।

Aspose.Words FOSS for .NET MIT लाइसेंस के तहत जारी किया गया है और इसमें कोई मूल निर्भरताएँ नहीं हैं; यह .NET Standard 2.0 को लक्षित करता है, इसलिए यहाँ वर्णित DOM .NET Framework 4.6.2+ और .NET 6, 8, और 10 पर, Windows, Linux, और macOS पर उपलब्ध है। इसे NuGet के माध्यम से स्थापित करें, या स्रोत से बनाएं — नीचे Quick Start देखें।

नीचे वर्णित प्रत्येक कार्य — शून्य से रिपोर्ट लिखना, मौजूदा .docx फ़ाइल को पुनर्गठित करना, विश्लेषण के लिए उसकी सामग्री को चलाना, या कई दस्तावेज़ों को एक में जोड़ना — समान कुछ बेस टाइप्स से शुरू होता है: Document, DocumentBuilder, और उनके नीचे की Node पदानुक्रम।


यह Document Object Model

DocumentBuilder के साथ दस्तावेज़ बनाना

DocumentBuilder एक कर्सर-आधारित राइटर है जो Document के ऊपर स्थित है और क्रमिक रूप से सामग्री डालता है। Write(text) और Writeln(text) वर्तमान स्थिति पर पाठ जोड़ते हैं; InsertParagraph() और InsertBreak(breakType) अनुच्छेद तथा पृष्ठ/स्तम्भ/सेक्शन ब्रेक जोड़ते हैं। फ़ॉर्मेटिंग स्थिति-निर्भर होती है: बिल्डर की Font, ParagraphFormat, ListFormat, और PageSetup प्रॉपर्टीज़ उसके बाद लिखी गई सभी सामग्री पर लागू होती हैं, और PushFont() / PopFont() वर्तमान फ़ॉन्ट स्थिति को सहेजते और पुनर्स्थापित करते हैं ताकि अस्थायी शैली परिवर्तन को मैन्युअल रूप से वापस करने की आवश्यकता न पड़े। नेविगेशन मेथड्स कर्सर को मौजूदा दस्तावेज़ में कहीं भी पुनः स्थित कर सकते हैं — MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName), MoveToParagraph(paragraphIndex, characterIndex), और सामान्य प्रयोजन MoveTo(node) — और DocumentBuilder.CurrentNode, DocumentBuilder.CurrentParagraph, तथा DocumentBuilder.CurrentSection रिपोर्ट करते हैं कि बिल्डर वर्तमान में कहाँ स्थित है। जब केवल पढ़ने के लिए टेक्स्ट निष्कर्षण की आवश्यकता हो और पूर्ण DOM की ज़रूरत न हो, तो PlainTextDocument एक हल्का मार्ग प्रदान करता है: new PlainTextDocument(fileName) केवल PlainTextDocument.Text प्रॉपर्टी और दस्तावेज़ की अंतर्निहित तथा कस्टम प्रॉपर्टीज़ को उजागर करता है।

नोड ट्री: सेक्शन, पैराग्राफ, रन, और टेबल

Document एक Node वस्तुओं का पेड़ है जो दस्तावेज़ स्वयं पर मूल रूप से स्थित है: SectionBodyParagraphRun बॉडी टेक्स्ट के लिए, तथा जहाँ भी टेबल आती है वहाँ TableRowCell शाखा बनती है। CompositeNode, प्रत्येक कंटेनर नोड की बेस क्लास, CompositeNode.FirstChild, CompositeNode.LastChild, Node.NextSibling, और Node.PreviousSibling को सीधे ट्रैवर्सल के लिए उजागर करता है, GetChildNodes(nodeType, isDeep) किसी दिए गए NodeType (Paragraph, Run, Table, आदि) के सभी नोड्स को किसी भी गहराई पर एकत्र करने के लिए, और GetChild(nodeType, index, isDeep) अनुक्रमित लुकअप के लिए। AppendChild(newChild), InsertBefore(newChild, refChild), InsertAfter(newChild, refChild), और RemoveChild(oldChild) पेड़ को सीधे बदलते हैं। CompositeNode.SelectNodes(xpath) और SelectSingleNode(xpath) XPath-शैली अभिव्यक्ति के साथ नोड्स का चयन करते हैं, हाथ से पेड़ को चलाने के बजाय, और बहुत बड़े दस्तावेज़ों के लिए, Node.NextPreOrder(rootNode) / PreviousPreOrder(rootNode) प्रत्येक नोड को एक-एक करके पुनरावृत्ति के बिना पार करते हैं।

डॉक्यूमेंटविज़िटर: एक पास में हर नोड प्रकार को प्रोसेस करना

DocumentVisitor को सबक्लास करना वह तरीका है जिससे आप किसी दस्तावेज़ को उसकी संरचना को हार्ड-कोड किए बिना प्रोसेस कर सकते हैं। यह हर कॉम्पोज़िट नोड प्रकार के लिए जोड़ीदार Visit-Start / Visit-End मेथड्स परिभाषित करता है, जिसमें DocumentVisitor.VisitSectionStart, DocumentVisitor.VisitParagraphStart, DocumentVisitor.VisitTableStart, DocumentVisitor.VisitRowStart, DocumentVisitor.VisitCellStart, और DocumentVisitor.VisitBookmarkStart शामिल हैं — प्रत्येक का मिलते-जुलते End कॉलबैक होता है — साथ ही व्यक्तिगत टेक्स्ट रन के लिए DocumentVisitor.VisitFieldStart, DocumentVisitor.VisitFieldSeparator, DocumentVisitor.VisitFieldEnd, और DocumentVisitor.VisitRun भी हैं। Accept(visitor) को एक Document, Section, या किसी अन्य नोड पर कॉल करें ताकि विज़िटर उस नोड और उसके नीचे की सभी चीज़ों पर चल सके; AcceptStart(visitor) और AcceptEnd(visitor) केवल एक सिंगल कॉम्पोज़िट नोड के एंट्री और एग्ज़िट कॉलबैक को invoke करते हैं। प्रत्येक Visit मेथड एक VisitorAction वैल्यू रिटर्न करता है जो नियंत्रित करता है कि ट्रैवर्सल कैसे जारी रहे — Continue करके सबट्री में जाएँ, SkipThisNode से उसे स्किप करें, या Stop करके पूरी तरह रोक दें।

टेक्स्ट ढूँढना और बदलना

Range.Replace(pattern, replacement) एक find-and-replace चलाता है उस Range पर जो इसे धारण करता है — एक सम्पूर्ण Document, एक Section, या किसी भी नोड की अपनी Range प्रॉपर्टी — जहाँ खोज पैटर्न को या तो एक लिटरल स्ट्रिंग या एक रेगुलर एक्सप्रेशन के रूप में स्वीकार किया जाता है। Range.Replace(pattern, replacement, options) ओवरलोड एक FindReplaceOptions इंस्टेंस लेता है जिससे FindReplaceOptions.MatchCase, FindReplaceOptions.FindWholeWordsOnly, खोज FindReplaceOptions.Direction (जो FindReplaceDirection का मान Forward या Backward हो सकता है), प्रतिस्थापन टेक्स्ट पर लागू फ़ॉर्मेटिंग (FindReplaceOptions.ApplyFont, FindReplaceOptions.ApplyParagraphFormat), और कौन सी आसपास की सामग्री को अनछुआ छोड़ना है (FindReplaceOptions.IgnoreFields, FindReplaceOptions.IgnoreFootnotes, FindReplaceOptions.IgnoreFieldCodes, तथा संबंधित Ignore* फ़्लैग) को नियंत्रित किया जा सके। सरल प्रतिस्थापन से आगे प्रति-मैच लॉजिक के लिए, IReplacingCallback के Replacing(args) मेथड को इम्प्लीमेंट करें और इम्प्लीमेंटेशन को FindReplaceOptions.ReplacingCallback में असाइन करें; प्रत्येक मैच एक ReplacingArgs के साथ कॉल बैक होता है जो मैच का विवरण देता है, और कॉलबैक का रिटर्न वैल्यू — एक ReplaceAction वैल्यू जो Replace, Skip, या Stop हो सकता है — यह तय करता है कि उसके साथ क्या किया जाए।

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

Document.AppendDocument(srcDoc, importFormatMode) एक Document की पूरी सामग्री को दूसरे के अंत में जोड़ता है। इसका importFormatMode तर्क — ImportFormatMode का मान UseDestinationStyles, KeepSourceFormatting, या KeepDifferentStyles — स्रोत और गंतव्य के बीच शैली टकराव को कैसे हल किया जाए, यह तय करता है, और Document.AppendDocument(srcDoc, importFormatMode, importFormatOptions) ओवरलोड ImportFormatOptions (ImportFormatOptions.KeepSourceNumbering, ImportFormatOptions.IgnoreHeaderFooter, ImportFormatOptions.MergePastedLists, और इसी तरह के फ़्लैग) के माध्यम से अधिक सूक्ष्म नियंत्रण जोड़ता है। किसी दस्तावेज़ की सामग्री को अंत के बजाय किसी विशिष्ट स्थिति में डालने के लिए, DocumentBuilder.InsertDocument(srcDoc, importFormatMode, importFormatOptions) बिल्डर की वर्तमान कर्सर स्थिति से समान कार्य करता है, और DocumentBuilder.InsertDocumentInline(srcDoc, importFormatMode, importFormatOptions) वही सामग्री बिना पैराग्राफ या सेक्शन ब्रेक जोड़े insertion point पर डालता है। Document.ImportNode(srcNode, isImportChildren) एक नोड — वैकल्पिक रूप से उसके बच्चों के साथ — किसी अलग दस्तावेज़ से कॉपी करता है ताकि उसे वर्तमान में जोड़ा जा सके, और Node.Clone(isCloneChildren) मेथड जो किसी भी नोड पर उपलब्ध है, समान दस्तावेज़ के भीतर संरचना की प्रतिलिपि बनाता है, जैसे कि Section को दोहराए जाने वाले सामग्री के टेम्पलेट के रूप में पुनः उपयोग करना।

बुकमार्क्स और दस्तावेज़ वेरिएबल्स

Range.Bookmarks प्रॉपर्टी उस रेंज के भीतर नामित एंकर की BookmarkCollection को एक्सपोज़ करती है। DocumentBuilder.StartBookmark(bookmarkName) और EndBookmark(bookmarkName) निर्माण के दौरान बुकमार्क की सीमा को चिह्नित करते हैं; BookmarkCollection इंडेक्सर, bookmarks[name], बाद में DocumentBuilder.MoveToBookmark(bookmarkName) नेविगेशन के लिए या Bookmark.Text पढ़ने के लिए एक बुकमार्क प्राप्त करता है। अलग से, Document.Variables — एक VariableCollection — सीधे दस्तावेज़ पर मनमाने नाम/मान स्ट्रिंग जोड़े संग्रहीत करता है, जो दस्तावेज़-जनरेशन पाइपलाइन के माध्यम से छोटी स्थिति के टुकड़े ले जाने के लिए उपयोगी है, बिना दृश्यमान सामग्री जोड़े।


त्वरित प्रारंभ

Aspose.Words FOSS .NET के लिए NuGet के माध्यम से उपलब्ध है:

dotnet add package Aspose.Words.FOSS

इसके बजाय स्रोत से बनाना:

git clone https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git
cd Aspose.Words-FOSS-for-.NET
dotnet build Aspose.Words.sln -c Release

जब Aspose.Words.csproj का प्रोजेक्ट रेफ़रेंस मौजूद हो, तो दस्तावेज़ तक का सबसे छोटा रास्ता इस पोस्ट में उपयोग किए गए समान पैटर्न का पालन करता है: एक Document बनाएं, उसे DocumentBuilder में लपेटें, टेक्स्ट जोड़ने के लिए Write() या Writeln() कॉल करें — बिल्डर के Font और ParagraphFormat प्रॉपर्टीज़ पर सेट फ़ॉर्मेटिंग हर अगले लिखने में लागू होती है — और Document.Save(fileName) कॉल करके इसे .docx, .docm, .dotx, .dotm, Flat OPC, Markdown, या साधारण टेक्स्ट के रूप में लिखें। शुरू से न बनाकर मौजूदा फ़ाइल को संपादित करने के लिए, इसे सीधे new Document(fileName) से लोड करें, बिल्डर को MoveToBookmark(), MoveToParagraph(), या MoveTo(node) के द्वारा किसी विशिष्ट स्थान पर ले जाएँ, और वहाँ से लिखना जारी रखें।


समर्थित फ़ॉर्मैट्स

फ़ॉर्मेटएक्सटेंशनपढ़ेंलिखें
DOCX.docx
DOCM.docm
DOTX.dotx
DOTM.dotm
Flat OPC (सभी रूपांतर)(विभिन्न)
Markdown.md
Text.txt

ऊपर वर्णित नोड ट्री उसी तरह उपलब्ध है चाहे दस्तावेज़ किसी भी फ़ॉर्मेट से लोड किया गया हो या सहेजा जाएगा — DOM आंतरिक रूप से फ़ॉर्मेट-स्वतंत्र है। इस संस्करण में वह सब नहीं शामिल है जो पेज लेआउट पर निर्भर करता है: न PDF, न XPS, न इमेज एक्सपोर्ट, और न प्रिंटिंग, इसलिए लेआउट-निर्भर फ़ील्ड मान जैसे पेज नंबर प्लेसहोल्डर के रूप में मूल्यांकित होते हैं न कि गणना किए गए। अतिरिक्त फ़ॉर्मेट कन्वर्टर (DOC, RTF, ODT, HTML, EPUB, MHTML, MOBI, AZW3, और WordML) पढ़े या लिखे नहीं जाते, और मेल मर्ज निष्पादन, LINQ रिपोर्टिंग, और दस्तावेज़ तुलना शामिल नहीं हैं। जिन डेवलपर्स को ये क्षमताएँ चाहिए वे वाणिज्यिक commercial Aspose.Words के लिए .NET यहाँ दिखाए गए DOM कोड को पुनर्लेखन किए बिना, क्योंकि दोनों संस्करण एक ही अंतर्निहित API को साझा करते हैं।


ओपन सोर्स और लाइसेंसिंग

Aspose.Words FOSS for .NET MIT लाइसेंस के तहत जारी किया गया है, व्यावसायिक और व्यक्तिगत उपयोग के लिए निःशुल्क, बिना किसी रॉयल्टी या पुनर्वितरण प्रतिबंध के। स्रोत, जिसमें Document, DocumentBuilder, और ऊपर वर्णित node-tree कार्यान्वयन, उपलब्ध है Aspose.Words FOSS for .NET रिपॉजिटरी GitHub पर।


शुरुआत

संबंधित संसाधन