| categories |
|
||||
|---|---|---|---|---|---|
| date | 2026-03-06 | ||||
| description | GroupDocs.Comparison for .NET का उपयोग करके दस्तावेज़ तुलना के दौरान लक्ष्य मेटाडेटा को सुरक्षित रखने के तरीके सीखें। C# उदाहरणों के साथ चरण-दर-चरण मार्गदर्शिका। | ||||
| keywords | preserve target metadata, GroupDocs.Comparison metadata preservation, .NET document comparison, metadata preservation tutorial | ||||
| lastmod | 2026-03-06 | ||||
| linktitle | Metadata Preservation Tutorial | ||||
| tags |
|
||||
| title | GroupDocs.Comparison के साथ लक्ष्य मेटाडेटा सुरक्षित रखें – .NET ट्यूटोरियल | ||||
| type | docs | ||||
| url | /hi/net/advanced-comparison/groupdocs-comparison-net-metadata-target/ | ||||
| weight | 1 |
क्या आपने कभी दो दस्तावेज़ों की तुलना की है और प्रक्रिया में महत्वपूर्ण मेटाडाटा खो दिया? आप अकेले नहीं हैं। जब आपको .NET एप्लिकेशन में दस्तावेज़ों की तुलना करते समय target metadata को संरक्षित करें की आवश्यकता होती है, तो कार्य जटिल लग सकता है—पर ऐसा नहीं होना चाहिए।
GroupDocs.Comparison for .NET आपको यह तय करने देता है कि तुलना परिणाम में किस दस्तावेज़ का मेटाडाटा बना रहेगा। चाहे आप दस्तावेज़‑प्रबंधन प्रणाली बना रहे हों, कानूनी अनुबंधों को संभाल रहे हों, या सहयोगी सामग्री का प्रबंधन कर रहे हों, आप हर बार सही स्रोत दस्तावेज़ से मेटाडाटा चाहते हैं।
इस ट्यूटोरियल में आप सीखेंगे कि तुलना के दौरान target metadata को संरक्षित कैसे करें, सामान्य गलतियों से बचें, और वास्तविक‑दुनिया के परिदृश्यों में समाधान को लागू करें।
- “preserve target metadata” का क्या अर्थ है? यह तुलना परिणाम उत्पन्न करते समय लक्ष्य के रूप में निर्दिष्ट दस्तावेज़ से मेटाडाटा (लेखक, निर्माण तिथि, कस्टम प्रॉपर्टीज़ आदि) को रखता है।
- कौन सा GroupDocs.Comparison संस्करण आवश्यक है? संस्करण 25.4.0 या बाद का।
- क्या मैं इसे .NET Core के साथ उपयोग कर सकता हूँ? हाँ – .NET Core 2.0+ या .NET Framework 4.6.1+।
- क्या उत्पादन के लिए लाइसेंस आवश्यक है? उत्पादन के लिए एक व्यावसायिक लाइसेंस आवश्यक है; सीखने के लिए एक मुफ्त ट्रायल काम करता है।
- क्या यह सुविधा PDF और DOCX के साथ काम करेगी? हाँ – सभी प्रमुख Office और PDF फ़ॉर्मेट मेटाडाटा संरक्षण का समर्थन करते हैं।
कोड में कूदने से पहले, चलिए बात करते हैं कि लक्ष्य मेटाडाटा को संरक्षित करना क्यों महत्वपूर्ण है। दस्तावेज़ मेटाडाटा केवल “अच्छा” नहीं है—यह अक्सर कानूनी रूप से आवश्यक या व्यापार‑संबंधी महत्वपूर्ण होता है:
- कानूनी दस्तावेज़ – वकील‑ग्राहक विशेषाधिकार संकेतकों को बनाए रखना आवश्यक है।
- कॉरपोरेट फ़ाइलें – अनुपालन टैग और अनुमोदन श्रृंखलाओं को रखना आवश्यक है।
- शैक्षणिक पत्र – लेखक का उल्लेख और संशोधन इतिहास आवश्यक है।
- तकनीकी दस्तावेज़ – संस्करण नियंत्रण और समीक्षा स्थिति महत्वपूर्ण है।
उचित हैंडलिंग के बिना, आप अनजाने में वह जानकारी हटा सकते हैं जो स्थापित करने में महीनों लगे। यही वह जगह है जहाँ target metadata को संरक्षित विकल्प चमकता है।
- GroupDocs.Comparison for .NET: संस्करण 25.4.0 या बाद (पहले संस्करणों में मेटाडाटा विकल्प सीमित हैं)।
- .NET Framework: 4.6.1 या उच्चतर, या .NET Core 2.0+।
- Visual Studio (या कोई भी C# IDE जो आप पसंद करते हैं)।
- बुनियादी C# ज्ञान (बहुत उन्नत नहीं, वादा!).
- परीक्षण के लिए दो नमूना दस्तावेज़ (Word .docx बहुत अच्छा काम करता है)।
आपको GroupDocs विशेषज्ञ होने की आवश्यकता नहीं है, लेकिन आपको इन चीज़ों में सहज होना चाहिए:
- C#
usingस्टेटमेंट्स और फ़ाइल हैंडलिंग। - बुनियादी दस्तावेज़‑प्रसंस्करण अवधारणाएँ।
- मेटाडाटा वास्तव में क्या है (लेखक, शीर्षक, कस्टम प्रॉपर्टीज़ आदि)।
तैयार हैं? चलिए इसे सेटअप करते हैं।
GroupDocs.Comparison को स्थापित करना सीधा है, लेकिन कुछ बातों का ध्यान रखना आवश्यक है।
NuGet पैकेज मैनेजर कंसोल (सबसे आसान तरीका):
Install-Package GroupDocs.Comparison -Version 25.4.0.NET CLI (यदि आप कमांड लाइन पसंद करते हैं):
dotnet add package GroupDocs.Comparison --version 25.4.0प्रो टिप: अपने प्रोजेक्ट में अनपेक्षित ब्रेकिंग बदलावों से बचने के लिए हमेशा संस्करण निर्दिष्ट करें।
यहीं पर कई डेवलपर्स शुरुआती में फँस जाते हैं। GroupDocs.Comparison मुफ्त नहीं है, लेकिन आपके पास विकल्प हैं:
- Free Trial – 30 दिनों के लिए पूरी कार्यक्षमता, मूल्यांकन के लिए उत्तम।
- Temporary License – यदि आपको अधिक समय चाहिए तो विस्तारित मूल्यांकन अवधि।
- Commercial License – उत्पादन उपयोग के लिए (विभिन्न मूल्य स्तर उपलब्ध)।
यदि आप अभी सीख रहे हैं तो लाइसेंसिंग की चिंता न करें—ट्रायल संस्करण में सभी target metadata को संरक्षित सुविधाएँ शामिल हैं।
आइए एक सरल परीक्षण के साथ सुनिश्चित करें कि सब कुछ काम कर रहा है:
using System.IO;
using GroupDocs.Comparison;
string sourceFilePath = "source.docx";
string targetFilePath = "target.docx";
// Initialize the Comparer object.
using (Comparer comparer = new Comparer(sourceFilePath))
{
// Add the target document for comparison.
comparer.Add(targetFilePath);
}यदि यह बिना त्रुटियों के संकलित हो जाता है, तो आप आगे बढ़ सकते हैं। यदि नहीं, तो अपने पैकेज इंस्टॉलेशन और using स्टेटमेंट्स को दोबारा जांचें।
अब मुख्य भाग—दस्तावेज़ तुलना के दौरान वास्तव में मेटाडाटा को संरक्षित करना। यही वह जगह है जहाँ GroupDocs.Comparison वास्तव में चमकता है।
एक सामान्य तुलना के दौरान:
- Source document बेस कंटेंट प्रदान करता है।
- Target document तुलना के लिए परिवर्तन प्रदान करता है।
- output document दोनों को मिलाता है, लेकिन किसका मेटाडाटा जीतता है?
डिफ़ॉल्ट रूप से, GroupDocs.Comparison स्रोत दस्तावेज़ का मेटाडाटा उपयोग करता है। target metadata को संरक्षित करने के लिए, आपको API को स्पष्ट रूप से बताना होगा।
यह “baseline” दस्तावेज़ स्थापित करता है—जिसके खिलाफ आप तुलना कर रहे हैं:
using (Comparer comparer = new Comparer(sourceFilePath))
{
// All comparison operations happen within this scope
}using स्टेटमेंट्स क्यों उपयोग करें? वे स्वचालित रूप से संसाधनों को डिस्पोज़ करते हैं, बड़े दस्तावेज़ों को प्रोसेस करते समय मेमोरी लीक को रोकते हैं। भरोसा करें, 50 MB Word फ़ाइलों से निपटते समय आप बाद में खुद को धन्यवाद देंगे।
Comparer को बताएं कि कौन सा दस्तावेज़ वह परिवर्तन रखता है जिसे आप विश्लेषण करना चाहते हैं:
comparer.Add(targetFilePath);सामान्य गलती: स्रोत और लक्ष्य को भ्रमित करना। इस तरह सोचें—source आपका “मूल” है, target आपका “अपडेटेड संस्करण” है।
आउटपुट में कौन सा दस्तावेज़ का मेटाडाटा रखा जाना चाहिए, यह निर्दिष्ट करें:
comparer.Compare(outputFileName, new SaveOptions() { CloneMetadataType = MetadataType.Target });क्या हो रहा है? CloneMetadataType = MetadataType.Target GroupDocs.Comparison को बताता है: “अरे, मैं अपने अंतिम परिणाम में लक्ष्य दस्तावेज़ का मेटाडाटा रखना चाहता हूँ।”
यहाँ सब कुछ एक चलाने योग्य प्रोग्राम में एक साथ है:
using System;
using System.IO;
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
class Program
{
static void Main(string[] args)
{
try
{
string sourceFile = "original_document.docx";
string targetFile = "updated_document.docx";
string outputFile = "comparison_result.docx";
using (Comparer comparer = new Comparer(sourceFile))
{
comparer.Add(targetFile);
// Preserve target document metadata
comparer.Compare(outputFile, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
Console.WriteLine($"Comparison completed! Check {outputFile}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error during comparison: {ex.Message}");
}
}
}File Path Issues – हमेशा पूर्ण पथ उपयोग करें या सुनिश्चित करें कि आपकी फ़ाइलें कार्य निर्देशिका में हों:
// Good
string sourceFile = Path.Combine(Directory.GetCurrentDirectory(), "docs", "source.docx");
// Risky (might work locally but fail in production)
string sourceFile = "source.docx";Memory Management – बड़े दस्तावेज़ों के लिए, हमेशा Comparer ऑब्जेक्ट्स को using स्टेटमेंट्स में रैप करें।
Version Compatibility – विभिन्न GroupDocs.Comparison रिलीज़ अलग‑अलग मेटाडाटा विकल्प प्रदान करती हैं—सर्वोत्तम परिणामों के लिए 25.4.0 या उससे नए संस्करण का उपयोग करें।
| परिदृश्य | Target मेटाडाटा को प्राथमिकता दें | Source मेटाडाटा को प्राथमिकता दें |
|---|---|---|
| अपडेटेड लेखक जानकारी चाहिए | ✅ | ❌ |
| मूल दस्तावेज़ का कानूनी प्राधिकार है | ❌ | ✅ |
| कस्टम प्रॉपर्टीज़ केवल नए फ़ाइल में जोड़ी गई हैं | ✅ | ❌ |
| आप “मास्टर” दस्तावेज़ का इतिहास रखना चाहते हैं | ❌ | ✅ |
आप कई लक्ष्य फ़ाइलों के खिलाफ तुलना कर सकते हैं जबकि पहले जोड़े गए लक्ष्य से मेटाडाटा संरक्षित रहता है:
using (Comparer comparer = new Comparer(sourceFilePath))
{
comparer.Add(targetFilePath1);
comparer.Add(targetFilePath2);
comparer.Add(targetFilePath3);
// Metadata will come from the first target document
comparer.Compare(outputFileName, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
}Law firms often need to compare contract versions while preserving specific metadata markers:
// Preserve client metadata from updated contract
using (Comparer comparer = new Comparer("original_contract.docx"))
{
comparer.Add("client_revised_contract.docx");
comparer.Compare("final_contract_comparison.docx", new SaveOptions()
{
CloneMetadataType = MetadataType.Target // Keep client's metadata
});
}When multiple researchers collaborate, you want to preserve the most recent author information:
// Keep metadata from the researcher's latest submission
using (Comparer comparer = new Comparer("draft_paper.docx"))
{
comparer.Add("researcher_updates.docx");
comparer.Compare("paper_comparison.docx", new SaveOptions()
{
CloneMetadataType = MetadataType.Target // Preserve researcher metadata
});
}In regulated industries, maintaining compliance metadata is critical:
// Preserve compliance tags from updated policy document
using (Comparer comparer = new Comparer("old_policy.docx"))
{
comparer.Add("compliance_approved_policy.docx");
comparer.Compare("policy_comparison.docx", new SaveOptions()
{
CloneMetadataType = MetadataType.Target // Keep compliance metadata
});
}The most common issue. Debug with explicit checks:
string sourceFile = "source.docx";
// Always check if files exist before comparison
if (!File.Exists(sourceFile))
{
Console.WriteLine($"Source file not found: {Path.GetFullPath(sourceFile)}");
return;
}
// Same for target files
if (!File.Exists(targetFile))
{
Console.WriteLine($"Target file not found: {Path.GetFullPath(targetFile)}");
return;
}For documents over 10 MB, consider these optimizations:
// Use explicit disposal for large documents
using (var comparer = new Comparer(sourceFile))
{
comparer.Add(targetFile);
var saveOptions = new SaveOptions()
{
CloneMetadataType = MetadataType.Target
};
comparer.Compare(outputFile, saveOptions);
// Explicitly clean up
GC.Collect();
GC.WaitForPendingFinalizers();
}When working with protected files or network shares:
try
{
using (var comparer = new Comparer(sourceFile))
{
comparer.Add(targetFile);
comparer.Compare(outputFile, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
}
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine("Access denied. Check file permissions.");
Console.WriteLine($"Details: {ex.Message}");
}
catch (IOException ex)
{
Console.WriteLine("File I/O error occurred.");
Console.WriteLine($"Details: {ex.Message}");
}GroupDocs.Comparison can be memory‑intensive. Use using statements to guarantee disposal:
// Good - automatic resource cleanup
using (var comparer = new Comparer(sourceFile))
{
// comparison logic here
}
// Bad - potential memory leaks
var comparer = new Comparer(sourceFile);
// ... comparison logic
// comparer.Dispose(); // Easy to forget!दस्तावेज़ों को बैच में प्रोसेस करें – यदि आप कई फ़ाइलों की तुलना कर रहे हैं, तो मेमोरी उपयोग कम रखने के लिए उन्हें छोटे समूहों में संभालें।
For desktop or web apps, wrap comparison in an async method:
public async Task<bool> CompareDocumentsAsync(string source, string target, string output)
{
return await Task.Run(() =>
{
try
{
using (var comparer = new Comparer(source))
{
comparer.Add(target);
comparer.Compare(output, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
return true;
}
}
catch
{
return false;
}
});
}- छोटा (< 1 MB) – सीधे प्रोसेस करें।
- मध्यम (1‑10 MB) – UI को उत्तरदायी रखने के लिए प्रोग्रेस दिखाएँ।
- बड़ा (> 10 MB) – हमेशा async प्रोसेसिंग उपयोग करें और ऊपर दिखाए गए अनुसार स्पष्ट GC पर विचार करें।
Below is a ready‑to‑use controller that accepts two uploaded files, runs the comparison, and returns the result while preserving target metadata:
[ApiController]
[Route("api/[controller]")]
public class DocumentComparisonController : ControllerBase
{
[HttpPost("compare-with-target-metadata")]
public async Task<IActionResult> CompareWithTargetMetadata(
IFormFile sourceFile,
IFormFile targetFile)
{
var tempSource = Path.GetTempFileName();
var tempTarget = Path.GetTempFileName();
var outputPath = Path.GetTempFileName();
try
{
// Save uploaded files temporarily
await sourceFile.CopyToAsync(new FileStream(tempSource, FileMode.Create));
await targetFile.CopyToAsync(new FileStream(tempTarget, FileMode.Create));
// Perform comparison with target metadata preservation
using (var comparer = new Comparer(tempSource))
{
comparer.Add(tempTarget);
comparer.Compare(outputPath, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
}
// Return comparison result
var resultBytes = await System.IO.File.ReadAllBytesAsync(outputPath);
return File(resultBytes, "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"comparison_result.docx");
}
finally
{
// Clean up temporary files
if (System.IO.File.Exists(tempSource)) System.IO.File.Delete(tempSource);
if (System.IO.File.Exists(tempTarget)) System.IO.File.Delete(tempTarget);
if (System.IO.File.Exists(outputPath)) System.IO.File.Delete(outputPath);
}
}
}प्र: क्या मैं तुलना करते समय कई लक्ष्य दस्तावेज़ों से मेटाडाटा संरक्षित कर सकता हूँ?
उ: जब आप कई लक्ष्य फ़ाइलें जोड़ते हैं, तो GroupDocs.Comparison पहले जोड़े गए पहले लक्ष्य दस्तावेज़ का मेटाडाटा उपयोग करता है। वह दस्तावेज़ पहले जोड़ें जिसका मेटाडाटा आप रखना चाहते हैं।
प्र: यदि लक्ष्य दस्तावेज़ में कुछ मेटाडाटा फ़ील्ड नहीं हैं तो क्या होता है?
उ: केवल वही मेटाडाटा जो लक्ष्य में मौजूद है, आउटपुट में कॉपी किया जाएगा। अनुपलब्ध फ़ील्ड बस छोड़ दिए जाते हैं; तुलना फिर भी सफल होती है।
प्र: मैं पासवर्ड‑सुरक्षित दस्तावेज़ों को कैसे संभालूँ?
उ: Use a LoadOptions object with the password, then pass it to the Comparer constructor:
var loadOptions = new LoadOptions() { Password = "your_password" };
using (var comparer = new Comparer(sourceFile, loadOptions))
{
// comparison logic here
}प्र: क्या केवल चयनित मेटाडाटा प्रॉपर्टीज़ को संरक्षित करने का कोई तरीका है?
उ: वर्तमान API चुने हुए स्रोत (Target या Source) से सभी मेटाडाटा संरक्षित करता है। सूक्ष्म नियंत्रण के लिए आपको तुलना के बाद प्रॉपर्टीज़ निकालनी होंगी और मैन्युअली पुनः लागू करनी होंगी।
प्र: कौन से दस्तावेज़ फ़ॉर्मेट मेटाडाटा संरक्षण का समर्थन करते हैं?
उ: अधिकांश सामान्य व्यावसायिक फ़ॉर्मेट—DOCX, PDF, PPTX, XLSX, और कई अन्य—मेटाडाटा संरक्षण का समर्थन करते हैं। पूरी सूची के लिए आधिकारिक दस्तावेज़ देखें।
प्र: यदि मुझे समस्याएँ आती हैं तो मैं मदद कहाँ प्राप्त कर सकता हूँ?
उ: समुदाय सहायता के लिए GroupDocs Support Forum पर जाएँ, या यदि आपके पास व्यावसायिक लाइसेंस है तो सीधे GroupDocs सपोर्ट से संपर्क करें।
- Official Documentation: GroupDocs.Comparison for .NET Docs
- API Reference: Complete API Reference
- Download Latest Version: GroupDocs Downloads
- Free Trial: Start Your Trial
- Purchase Options: Licensing and Pricing
अंतिम अपडेट: 2026-03-06
परीक्षण किया गया: GroupDocs.Comparison 25.4.0 for .NET
लेखक: GroupDocs