पासवर्ड‑सुरक्षित Doc को लोड करना और जावा में दस्तावेज़ों की तुलना करना – पूर्ण सुरक्षा गाइड

परिचय

क्या आप अपने जावा एप्लिकेशन में एन्क्रिप्टेड दस्तावेज़ों के विभिन्न संस्करणों की तुलना करने में संघर्ष कर रहे हैं? आप अकेले नहीं हैं। संवेदनशील व्यावसायिक दस्तावेज़ों, कानूनी अनुबंधों या गोपनीय रिपोर्टों से निपटते समय आप तुलना करने के लिए पासवर्ड सुरक्षा को हटा नहीं सकते। यही वह जगह है जहाँ सुरक्षित दस्तावेज़ तुलना अत्यंत महत्वपूर्ण बनती है।

इस व्यापक गाइड में, आप पासवर्ड‑सुरक्षित doc फ़ाइलों को लोड करने और उन्हें GroupDocs.Comparison for Java का उपयोग करके तुलना करने का तरीका जानेंगे। हम बुनियादी सेटअप से लेकर एंटरप्राइज़‑ग्रेड सुरक्षा विचारों तक, साथ ही वास्तविक‑दुनिया की समस्या‑समाधान स्थितियों को कवर करेंगे जो आप संभवतः सामना करेंगे।

इस गाइड के अंत तक आप जो सीखेंगे:

  • जावा एप्लिकेशन में सुरक्षित दस्तावेज़ तुलना सेट‑अप करना
  • विभिन्न पासवर्ड‑सुरक्षित फ़ाइल फ़ॉर्मेट को सुरक्षित रूप से संभालना
  • एंटरप्राइज़‑स्तर की सुरक्षा सर्वोत्तम प्रथाओं को लागू करना
  • सामान्य समस्याओं और प्रदर्शन बाधाओं का समाधान करना
  • मौजूदा वर्कफ़्लो में सुरक्षित तुलना को एकीकृत करना

त्वरित उत्तर

  • क्या मैं एन्क्रिप्टेड Word और PDF फ़ाइलों की तुलना कर सकता हूँ? हाँ, GroupDocs.Comparison सीधे पासवर्ड‑सुरक्षित दस्तावेज़ों के साथ काम करता है।
  • क्या उत्पादन के लिए लाइसेंस की आवश्यकता है? पूर्ण लाइसेंस आवश्यक है; परीक्षण और अस्थायी लाइसेंस परीक्षण के लिए उपलब्ध हैं।
  • मैं पासवर्ड को हार्ड‑कोडिंग से कैसे बचूँ? पर्यावरण वेरिएबल्स या सुरक्षित क्रेडेंशियल मैनेजर का उपयोग करें।
  • कौन सा जावा संस्करण आवश्यक है? जावा 8 या उससे ऊपर।
  • क्या एन्क्रिप्टेड फ़ाइलों के लिए समानांतर प्रोसेसिंग सुरक्षित है? हाँ, जब प्रत्येक थ्रेड अपना दस्तावेज़ जोड़ा संभालता है।

सुरक्षित दस्तावेज़ तुलना क्यों महत्वपूर्ण है

तकनीकी कार्यान्वयन में कूदने से पहले, समझें कि यह क्षमता आधुनिक जावा विकास में क्यों आवश्यक है:

एंटरप्राइज़ उपयोग मामलों:

  • कानूनी दस्तावेज़ समीक्षा: लॉ फर्मों को क्लाइंट की गोपनीयता से समझौता किए बिना अनुबंध संशोधनों की तुलना करनी होती है
  • वित्तीय रिपोर्टिंग: बैंकों को संवेदनशील वित्तीय दस्तावेज़ों में बदलावों को ट्रैक करना होता है जबकि सुरक्षा अनुपालन बनाए रखना होता है
  • मेडिकल रिकॉर्ड्स: हेल्थकेयर सिस्टम को HIPAA नियमों के तहत रोगी दस्तावेज़ों की सुरक्षित तुलना करनी होती है
  • कॉरपोरेट गवर्नेंस: कंपनियों को पासवर्ड‑सुरक्षित आंतरिक दस्तावेज़ों में नीति बदलावों का ऑडिट करना होता है

पासवर्ड को अस्थायी रूप से हटाने का पारंपरिक तरीका सुरक्षा कमजोरियों और अनुपालन समस्याओं को जन्म देता है। GroupDocs.Comparison एन्क्रिप्टेड फ़ाइलों के साथ सीधे काम करके इसे हल करता है।

पूर्वापेक्षाएँ और पर्यावरण सेट‑अप

सुरक्षित दस्तावेज़ तुलना लागू करने से पहले सुनिश्चित करें कि आपके पास हैं:

आवश्यकताएँ:

  • Java Development Kit: संस्करण 8 या उससे ऊपर
  • GroupDocs.Comparison for Java: संस्करण 25.2 (नवीनतम स्थिर रिलीज)
  • बिल्ड टूल: Maven या Gradle, निर्भरता प्रबंधन के लिए
  • IDE: IntelliJ IDEA, Eclipse, या आपका पसंदीदा जावा IDE

सुरक्षा विचार:

  • संवेदनशील दस्तावेज़ों के लिए सुरक्षित फ़ाइल संग्रह स्थान
  • आपके विकास पर्यावरण पर उचित एक्सेस कंट्रोल
  • आपके संगठन की दस्तावेज़ सुरक्षा नीतियों की समझ

GroupDocs.Comparison for Java सेट‑अप करना

GroupDocs.Comparison के साथ शुरूआत करना सीधा है। यहाँ इसे अपने प्रोजेक्ट में सुरक्षित रूप से एकीकृत करने का तरीका है:

Maven कॉन्फ़िगरेशन:

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/comparison/java/</url>
   </repository>
</repositories>
<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-comparison</artifactId>
      <version>25.2</version>
   </dependency>
</dependencies>

लाइसेंस कॉन्फ़िगरेशन और सुरक्षा

उत्पादन पर्यावरण के लिए आपको एक उचित लाइसेंस चाहिए। यहाँ जानने योग्य बातें हैं:

लाइसेंस विकल्प:

  • फ़्री ट्रायल: मूल्यांकन और छोटे‑पैमाने पर परीक्षण के लिए उपयुक्त
  • अस्थायी लाइसेंस: विकास और स्टेजिंग पर्यावरण के लिए आदर्श
  • पूर्ण लाइसेंस: उत्पादन परिनियोजन के लिए आवश्यक

सुरक्षा सर्वोत्तम प्रथा: अपने लाइसेंस को पर्यावरण वेरिएबल्स या सुरक्षित कॉन्फ़िगरेशन मैनेजमेंट सिस्टम में संग्रहीत करें। स्रोत कोड में लाइसेंस को कभी हार्ड‑कोड न करें।

// Secure license initialization example
String licensePath = System.getenv("GROUPDOCS_LICENSE_PATH");
if (licensePath != null) {
    License license = new License();
    license.setLicense(licensePath);
}

पासवर्ड‑सुरक्षित Doc को लोड करके तुलना कैसे करें

अब लाइब्रेरी सेट‑अप हो गई है, चलिए देखते हैं कि पासवर्ड‑सुरक्षित doc फ़ाइलों को सुरक्षित रूप से कैसे लोड करें और तुलना करें।

चरण 1: सुरक्षित Comparer प्रारंभ करें

पहला चरण आपके स्रोत दस्तावेज़ और उसके पासवर्ड के साथ Comparer इंस्टेंस बनाना है। इसे सुरक्षित रूप से करने का तरीका नीचे दिया गया है:

// Initialize Comparer with the source document and its password.
try (Comparer comparer = new Comparer("source_protected_doc.docx", new LoadOptions("1234"))) {
    // Further steps will follow here...
}

सुरक्षा नोट: उत्पादन में पासवर्ड को कभी हार्ड‑कोड न करें। संवेदनशील प्रमाणीकरण डेटा को संभालने के लिए सुरक्षित क्रेडेंशियल मैनेजमेंट सिस्टम या पर्यावरण वेरिएबल्स का उपयोग करें।

चरण 2: लक्ष्य दस्तावेज़ जोड़ें

अब उन लक्ष्य दस्तावेज़(ओं) को जोड़ें जिन्हें आप तुलना करना चाहते हैं। आप एक साथ कई दस्तावेज़ों की तुलना कर सकते हैं:

// Add the target document with its password.
comparer.add("target_protected_doc.docx", new LoadOptions("5678"));

प्रो टिप: यदि आप कई संस्करणों की तुलना कर रहे हैं, तो उन्हें कालक्रमानुसार जोड़ें। इससे तुलना परिणाम समझने में आसान होते हैं और समय के साथ बदलावों को ट्रेस करना सरल होता है।

चरण 3: तुलना निष्पादित करें और परिणाम उत्पन्न करें

अंत में, तुलना करें और परिणाम सुरक्षित रूप से सहेजें:

// Execute the comparison and save the result.
final Path resultPath = comparer.compare(outputFileName);

तुलना परिणाम आपके पासवर्ड‑सुरक्षित दस्तावेज़ों के बीच जोड़, हटाना और संशोधन दिखाएगा, जबकि मूल फ़ाइलों की सुरक्षा बनी रहेगी।

उन्नत सुरक्षा कॉन्फ़िगरेशन

एंटरप्राइज़ पर्यावरण में संवेदनशील दस्तावेज़ों के साथ काम करते समय इन उन्नत सुरक्षा उपायों पर विचार करें:

सुरक्षित पासवर्ड प्रबंधन

पासवर्ड को हार्ड‑कोड करने के बजाय सुरक्षित क्रेडेंशियल हैंडलिंग लागू करें:

public class SecureDocumentComparer {
    private final PasswordManager passwordManager;
    
    public ComparisonResult compareSecureDocuments(
        String sourceDocPath, String targetDocPath, 
        String sourceCredentialId, String targetCredentialId) {
        
        try {
            String sourcePassword = passwordManager.getPassword(sourceCredentialId);
            String targetPassword = passwordManager.getPassword(targetCredentialId);
            
            try (Comparer comparer = new Comparer(sourceDocPath, 
                    new LoadOptions(sourcePassword))) {
                comparer.add(targetDocPath, new LoadOptions(targetPassword));
                return comparer.compare("secure_comparison_result.docx");
            }
        } finally {
            // Clear sensitive data from memory
            passwordManager.clearCache();
        }
    }
}

मेमोरी सुरक्षा विचार

पासवर्ड‑सुरक्षित दस्तावेज़ों को संभालते समय मेमोरी प्रबंधन महत्वपूर्ण हो जाता है:

सर्वोत्तम प्रथाएँ:

  1. try‑with‑resources का उपयोग करें: संवेदनशील डेटा की उचित सफ़ाई सुनिश्चित करता है
  2. पासवर्ड वेरिएबल्स को साफ़ करें: उपयोग के बाद पासवर्ड स्ट्रिंग को स्पष्ट रूप से null कर दें
  3. मेमोरी उपयोग की निगरानी करें: बड़े एन्क्रिप्टेड दस्तावेज़ काफी मेमोरी खा सकते हैं
  4. गर्बेज कलेक्शन संकेत लागू करें: संवेदनशील डेटा प्रोसेस करने के बाद रणनीतिक रूप से System.gc() का उपयोग करें

एंटरप्राइज़ इंटीग्रेशन पैटर्न

एंटरप्राइज़ पर्यावरण में दस्तावेज़ तुलना अक्सर बड़े वर्कफ़्लो का हिस्सा होती है। यहाँ सामान्य इंटीग्रेशन पैटर्न हैं:

बैच प्रोसेसिंग पैटर्न

कई दस्तावेज़ तुलना को प्रोसेस करने वाले संगठनों के लिए:

public class BatchSecureComparison {
    public void processBatch(List<DocumentPair> documentPairs) {
        for (DocumentPair pair : documentPairs) {
            try {
                compareDocuments(pair.getSource(), pair.getTarget());
                // Log successful comparison
                auditLogger.logSuccess(pair.getId());
            } catch (Exception e) {
                // Handle failures gracefully
                auditLogger.logFailure(pair.getId(), e.getMessage());
                errorHandler.handleComparisonError(pair, e);
            }
        }
    }
}

वर्कफ़्लो इंटीग्रेशन

कई एंटरप्राइज़ दस्तावेज़ तुलना को अनुमोदन वर्कफ़्लो में एकीकृत करते हैं:

  1. दस्तावेज़ सबमिशन: उपयोगकर्ता पासवर्ड‑सुरक्षित दस्तावेज़ अपलोड करते हैं
  2. स्वचालित तुलना: सिस्टम पिछले संस्करणों के साथ तुलना करता है
  3. समीक्षा प्रक्रिया: स्टेकहोल्डर हाइलाइटेड बदलावों की समीक्षा करते हैं
  4. अनुमोदन निर्णय: तुलना परिणामों के आधार पर निर्णय लिया जाता है

सुरक्षित तुलना के लिए प्रदर्शन अनुकूलन

पासवर्ड‑सुरक्षित दस्तावेज़ों की तुलना संसाधन‑गहन हो सकती है। यहाँ प्रदर्शन को अनुकूलित करने के तरीके हैं:

मेमोरी अनुकूलन

बड़े दस्तावेज़ों को संभालना:

  • संभव हो तो दस्तावेज़ों को हिस्सों में प्रोसेस करें
  • बहुत बड़े फ़ाइलों के लिए स्ट्रीमिंग एप्रोच उपयोग करें
  • हीप उपयोग की निगरानी करें और JVM पैरामीटर को तदनुसार समायोजित करें

सिफ़ारिश किए गए JVM सेटिंग्स:

-Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200

प्रोसेसिंग गति सुधार

समानांतर प्रोसेसिंग:
जब कई दस्तावेज़ जोड़ों की तुलना कर रहे हों, तो समानांतर निष्पादन पर विचार करें:

documentPairs.parallelStream()
    .forEach(pair -> compareDocuments(pair.getSource(), pair.getTarget()));

कैशिंग रणनीतियाँ:

  • अक्सर एक्सेस किए जाने वाले दस्तावेज़ों को कैश करें
  • पुनः उपयोग के लिए तुलना टेम्पलेट्स सहेजें
  • अनावश्यक तुलना से बचने के लिए दस्तावेज़ फ़िंगरप्रिंटिंग उपयोग करें

व्यापक समस्या‑समाधान गाइड

सही कार्यान्वयन के बाद भी आप समस्याओं का सामना करेंगे। यहाँ सामान्य समस्याओं के समाधान हैं:

प्रमाणीकरण विफलताएँ

समस्या: “Invalid password” त्रुटि
समाधान:

  1. पासवर्ड एन्कोडिंग (UTF‑8 बनाम ASCII) की जाँच करें
  2. विशेष अक्षरों को एस्केप करने की आवश्यकता हो सकती है, इसे सत्यापित करें
  3. सुनिश्चित करें कि पासवर्ड अंतिम सफल एक्सेस के बाद नहीं बदला है
  4. ज्ञात कार्यशील पासवर्ड के साथ परीक्षण करें

मेमोरी समस्याएँ

समस्या: तुलना के दौरान OutOfMemoryError
समाधान:

  1. JVM हीप आकार बढ़ाएँ
  2. छोटे दस्तावेज़ हिस्सों में प्रोसेस करें
  3. मध्यवर्ती परिणामों को अधिक बार साफ़ करें
  4. उपलब्ध होने पर दस्तावेज़ स्ट्रीमिंग का उपयोग करें

फ़ाइल एक्सेस समस्याएँ

समस्या: “File not found” या “Access denied” त्रुटि
समाधान:

  1. फ़ाइल पथ सही और सुलभ हैं, यह सत्यापित करें
  2. फ़ाइल अनुमतियों और सुरक्षा सेटिंग्स की जाँच करें
  3. सुनिश्चित करें कि फ़ाइलें अन्य प्रक्रियाओं द्वारा लॉक नहीं हैं
  4. रिमोट फ़ाइलों के लिए नेटवर्क एक्सेस वैधता जांचें

प्रदर्शन गिरावट

समस्या: तुलना धीमी हो रही है
मूल कारण और समाधान:

  1. बड़ी फ़ाइल आकार – प्रोग्रेसिव लोडिंग लागू करें
  2. जटिल दस्तावेज़ संरचनाएँ – सरल तुलना मोड उपयोग करें
  3. मेमोरी दबाव – गर्बेज कलेक्शन सेटिंग्स को अनुकूलित करें
  4. नेटवर्क लेटेंसी – अक्सर एक्सेस किए जाने वाले दस्तावेज़ों को स्थानीय रूप से कैश करें

वास्तविक‑दुनिया उपयोग मामले और उदाहरण

विभिन्न उद्योगों में सुरक्षित दस्तावेज़ तुलना कैसे उपयोग की जाती है, देखें:

कानूनी क्षेत्र कार्यान्वयन

कानूनी फर्में अनुबंध समीक्षाओं के लिए सुरक्षित तुलना का उपयोग करती हैं:

public class LegalDocumentProcessor {
    public ContractAnalysis compareContracts(
        String originalContract, String revisedContract,
        String clientId, String caseId) {
        
        // Implement audit trail for legal compliance
        AuditTrail audit = auditService.createTrail(clientId, caseId);
        
        try (Comparer comparer = new Comparer(originalContract, 
                getClientPassword(clientId))) {
            comparer.add(revisedContract, getClientPassword(clientId));
            
            CompareOptions options = new CompareOptions();
            options.setDetectStyleChanges(true); // Important for legal docs
            options.setGenerateSummaryPage(true);
            
            String resultPath = comparer.compare("contract_comparison.docx", options);
            
            audit.logSuccess("Contract comparison completed");
            return generateLegalAnalysis(resultPath);
            
        } catch (Exception e) {
            audit.logError("Comparison failed", e);
            throw new LegalProcessingException("Contract comparison failed", e);
        }
    }
}

वित्तीय सेवाएँ एप्लिकेशन

बैंकों को संवेदनशील वित्तीय रिपोर्टों की तुलना करनी होती है जबकि नियामक अनुपालन बनाए रखना होता है। प्रमुख आवश्यकताओं में ऑडिट ट्रेल, ट्रांज़िट और एट‑रेस्ट एन्क्रिप्शन, तथा भूमिका‑आधारित एक्सेस कंट्रोल शामिल हैं।

हेल्थकेयर दस्तावेज़ प्रबंधन

मेडिकल सुविधाएँ HIPAA दिशानिर्देशों के तहत रोगी रिकॉर्ड और उपचार योजनाओं की तुलना करती हैं, जिससे एन्क्रिप्शन, एक्सेस लॉगिंग, और अस्थायी फ़ाइलों का सुरक्षित निपटान सुनिश्चित होता है।

उत्पादन परिनियोजन के लिए सर्वोत्तम प्रथाएँ

सुरक्षित दस्तावेज़ तुलना को उत्पादन में परिनियोजित करते समय:

सुरक्षा चेकलिस्ट

  • पासवर्ड को सुरक्षित क्रेडेंशियल मैनेजमेंट सिस्टम में संग्रहीत करें
  • सभी तुलना ऑपरेशनों के लिए ऑडिट लॉगिंग लागू करें
  • फ़ाइल एक्सेस अनुमतियों को सही ढंग से कॉन्फ़िगर करें
  • प्रोसेसिंग के बाद अस्थायी फ़ाइलों को सुरक्षित रूप से हटाएँ
  • नेटवर्क संचार को एन्क्रिप्टेड रखें (HTTPS/TLS)
  • त्रुटि संदेश संवेदनशील जानकारी उजागर न करें

मॉनिटरिंग और रख‑रखाव

ट्रैक करने के प्रमुख मीट्रिक्स:

  • तुलना सफलता/विफलता दरें
  • औसत प्रोसेसिंग समय
  • मेमोरी उपयोग पैटर्न
  • प्रमाणीकरण विफलता दरें
  • फ़ाइल एक्सेस त्रुटियाँ

नियमित रख‑रखाव कार्य:

  • GroupDocs.Comparison लाइब्रेरी को अपडेट रखें
  • एक्सेस क्रेडेंशियल्स की समीक्षा और रोटेट करें
  • अस्थायी फ़ाइलों और कैश डायरेक्टरी को साफ़ करें
  • डिस्क स्पेस उपयोग की निगरानी करें
  • असामान्य गतिविधियों के लिए ऑडिट लॉग की समीक्षा करें

उन्नत सुविधाएँ और अनुकूलन

GroupDocs.Comparison विशिष्ट आवश्यकताओं के लिए उन्नत सुविधाएँ प्रदान करता है:

कस्टम तुलना विकल्प

CompareOptions options = new CompareOptions();
options.setDetectStyleChanges(true);
options.setDetectNumberChanges(true);
options.setGenerateSummaryPage(true);
options.setShowDeletedContent(false); // Hide deleted content for cleaner results

final Path resultPath = comparer.compare(outputFileName, options);

आउटपुट फ़ॉर्मेट अनुकूलन

तुलना परिणामों की प्रस्तुति को नियंत्रित करें:

  • HTML रिपोर्ट – वेब‑आधारित समीक्षा वर्कफ़्लो के लिए
  • PDF आउटपुट – औपचारिक दस्तावेज़ीकरण के लिए
  • Word दस्तावेज़ – सहयोगी संपादन के लिए
  • JSON डेटा – प्रोग्रामेटिक प्रोसेसिंग के लिए

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

प्रश्न: GroupDocs.Comparison में कौन‑से दस्तावेज़ फ़ॉर्मेट पासवर्ड सुरक्षा का समर्थन करते हैं?
उत्तर: लाइब्रेरी पासवर्ड‑सुरक्षित Word दस्तावेज़ (DOCX, DOC), PDF फ़ाइलें, Excel स्प्रेडशीट (XLSX, XLS), और PowerPoint प्रस्तुतियाँ (PPTX, PPT) का समर्थन करती है। नवीनतम समर्थित फ़ॉर्मेट के लिए हमेशा नवीनतम दस्तावेज़ देखें।

प्रश्न: विभिन्न पासवर्ड वाले दस्तावेज़ों को कैसे संभालूँ?
उत्तर: प्रत्येक दस्तावेज़ का अपना पासवर्ड LoadOptions कंस्ट्रक्टर में निर्दिष्ट किया जा सकता है। स्रोत दस्तावेज़ का पासवर्ड Comparer प्रारंभिकरण के दौरान सेट किया जाता है, जबकि लक्ष्य दस्तावेज़ों के पासवर्ड add() मेथड के माध्यम से जोड़े जाते हैं।

प्रश्न: क्या मैं क्लाउड सेवाओं में संग्रहीत पासवर्ड‑सुरक्षित दस्तावेज़ों की तुलना कर सकता हूँ?
उत्तर: हाँ, जब तक आप फ़ाइल पथ या स्ट्रीम के माध्यम से दस्तावेज़ों तक पहुँच सकते हैं और सही पासवर्ड प्रदान कर सकते हैं। कई डेवलपर AWS S3, Azure Blob Storage, या Google Cloud Storage को उनके संबंधित SDK के साथ एकीकृत करते हैं।

प्रश्न: यदि मैं गलत पासवर्ड प्रदान करता हूँ तो क्या होता है?
उत्तर: लाइब्रेरी GroupDocsException फेंकेगी जिसमें प्रमाणीकरण विफलता के विवरण होंगे। हमेशा उचित एक्सेप्शन हैंडलिंग लागू करें ताकि प्रमाणीकरण त्रुटियों को सुगमता से प्रबंधित किया जा सके।

प्रश्न: GroupDocs.Comparison बड़े एन्क्रिप्टेड फ़ाइलों के साथ मेमोरी उपयोग को कैसे संभालता है?
उत्तर: लाइब्रेरी मेमोरी फुटप्रिंट को न्यूनतम रखने के लिए कुशल एल्गोरिदम उपयोग करती है, लेकिन बड़े दस्तावेज़ों को अभी भी पर्याप्त हीप स्पेस की आवश्यकता होगी। मेमोरी उपयोग की निगरानी करें और इष्टतम प्रदर्शन के लिए JVM सेटिंग्स को समायोजित करें।

प्रश्न: क्या परिणाम फ़ाइल को सहेजे बिना दस्तावेज़ों की तुलना संभव है?
उत्तर: हाँ, आप तुलना परिणामों को मेमोरी में प्रोसेस कर सकते हैं और प्रोग्रामेटिक रूप से परिवर्तन जानकारी निकाल सकते हैं बिना आउटपुट दस्तावेज़ सहेजे। यह स्वचालित वैधता वर्कफ़्लो के लिए उपयोगी है।

अतिरिक्त संसाधन


अंतिम अपडेट: 2026-02-26
परीक्षित संस्करण: GroupDocs.Comparison 25.2 for Java
लेखक: GroupDocs