PDF एनोटेशन जावा ट्यूटोरियल

क्या आपने कभी अपने जावा एप्लिकेशन में create pdf annotations java करने की ज़रूरत महसूस की है? चाहे आप दस्तावेज़ समीक्षा प्रणाली, ई‑लर्निंग प्लेटफ़ॉर्म, या सहयोगी टूल बना रहे हों, प्रोग्रामेटिक रूप से मार्कअप जोड़ना एक सामान्य आवश्यकता है। इस गाइड में हम GroupDocs.Annotation का उपयोग करके programmatically annotate PDF फ़ाइलों को कैसे एनोटेट करें, यह दिखाएंगे, और साथ ही add review comments pdf जोड़ने का तरीका भी बताएँगे ताकि एक पूर्ण समीक्षा वर्कफ़्लो मिल सके।

त्वरित उत्तर

  • GroupDocs.Annotation का मुख्य उद्देश्य क्या है? जावा से कई दस्तावेज़ फ़ॉर्मेट्स में एनोटेशन जोड़ना, संपादित करना और प्रबंधित करना।
  • समीक्षा टिप्पणियों के लिए कौन सा एनोटेशन प्रकार सबसे अच्छा है? AreaAnnotation जिसमें कस्टम संदेश और उपयोगकर्ता मेटाडेटा होता है।
  • क्या विकास के लिए लाइसेंस चाहिए? परीक्षण के लिए फ्री ट्रायल काम करता है; उत्पादन के लिए पूर्ण लाइसेंस आवश्यक है।
  • क्या मैं 50 MB से बड़े PDFs प्रोसेस कर सकता हूँ? हाँ—स्ट्रीमिंग, बैच प्रोसेसिंग और उचित डिस्पोज़ल का उपयोग करके मेमोरी उपयोग कम रखें।
  • क्या लाइब्रेरी थ्रेड‑सेफ़ है? इंस्टेंसेज़ थ्रेड‑सेफ़ नहीं हैं; प्रत्येक थ्रेड के लिए अलग Annotator बनाएँ।

क्यों GroupDocs Annotation अलग है

कोड में डुबकी लगाने से पहले, चलिए बात करते हैं कि क्यों GroupDocs.Annotation आपके जावा PDF एनोटेशन प्रोजेक्ट्स के लिए सबसे अच्छा विकल्प हो सकता है।

विकल्पों पर मुख्य लाभ

व्यापक फ़ॉर्मेट समर्थन – जबकि कई लाइब्रेरीज़ केवल PDFs पर केंद्रित होती हैं, GroupDocs वर्ड दस्तावेज़, पावरपॉइंट प्रेजेंटेशन, इमेजेज़ आदि को संभालता है। सभी एनोटेशन आवश्यकताओं के लिए एक ही API।

समृद्ध एनोटेशन प्रकार – साधारण हाइलाइट्स के अलावा, आपको एरो, वॉटरमार्क, टेक्स्ट रिप्लेसमेंट और कस्टम शैप्स मिलते हैं – विभिन्न उपयोग मामलों के लिए उपयुक्त।

एंटरप्राइज़‑रेडी – लाइसेंसिंग, स्केलेबिलिटी और मौजूदा जावा आर्किटेक्चर के साथ इंटीग्रेशन के लिए बिल्ट‑इन समर्थन।

सक्रिय विकास – नियमित अपडेट और एक उत्तरदायी सपोर्ट कम्युनिटी (विश्वास कीजिए, जब आप किनारे के मामलों से जूझेंगे तो यह बहुत काम आएगा)।

पूर्वापेक्षाएँ और सेटअप आवश्यकताएँ

शुरू करने से पहले आपको क्या चाहिए

विकास पर्यावरण

  • JDK 8 या बाद का (बेहतर प्रदर्शन के लिए Java 11+ की सिफ़ारिश)
  • आपका पसंदीदा IDE (IntelliJ IDEA, Eclipse, या Java एक्सटेंशन के साथ VS Code)
  • निर्भरता प्रबंधन के लिए Maven या Gradle

ज्ञान पूर्वापेक्षाएँ

  • बुनियादी जावा प्रोग्रामिंग (यदि आप लूप और क्लासेज़ जानते हैं, तो ठीक है)
  • फ़ाइल I/O ऑपरेशन्स की परिचितता
  • Maven निर्भरताओं की समझ (हम इस पर फिर भी चर्चा करेंगे)

वैकल्पिक लेकिन उपयोगी

  • PDF संरचना की बुनियादी समझ (समस्या निवारण में मददगार)
  • अन्य जावा लाइब्रेरीज़ का अनुभव (धारणाओं को समझना आसान बनाता है)

जावा के लिए GroupDocs.Annotation सेटअप करना

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

अपने pom.xml में GroupDocs रिपॉजिटरी और डिपेंडेंसी जोड़ें। यहाँ वही है जो आपको चाहिए:

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/annotation/java/</url>
   </repository>
</repositories>

<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-annotation</artifactId>
      <version>25.2</version>
   </dependency>
</dependencies>

Pro Tip: हमेशा GroupDocs वेबसाइट पर नवीनतम संस्करण की जाँच करें। इस लेख के समय संस्करण 25.2 वर्तमान है, लेकिन नए संस्करण अक्सर प्रदर्शन सुधार और बग फिक्स शामिल करते हैं।

लाइसेंस विकल्प (और उनका वास्तविक अर्थ)

Free Trial – प्रारंभिक मूल्यांकन और छोटे प्रोजेक्ट्स के लिए उपयुक्त। आपको वॉटरमार्क्ड आउटपुट मिलता है, जो परीक्षण के लिए ठीक है लेकिन उत्पादन के लिए नहीं।

Temporary License – विकास चरणों के लिए आदर्श। 30 दिन के अनलिमिटेड एक्सेस के लिए एक लाइसेंस यहाँ प्राप्त करें।

Full License – उत्पादन के लिए आवश्यक। मूल्य निर्धारण डिप्लॉयमेंट प्रकार और स्केल पर निर्भर करता है।

प्रारंभिक सेटअप और सत्यापन

एक बार आपके डिपेंडेंसी सेट हो जाने पर, इस सरल टेस्ट के साथ सब कुछ काम कर रहा है या नहीं सत्यापित करें:

import com.groupdocs.annotation.Annotator;

public class SetupVerification {
    public static void main(String[] args) {
        try {
            // This should not throw any ClassNotFoundException
            System.out.println("GroupDocs.Annotation version: " + 
                com.groupdocs.annotation.internal.c.a.a.d());
            System.out.println("Setup successful!");
        } catch (Exception e) {
            System.err.println("Setup failed: " + e.getMessage());
        }
    }
}

GroupDocs.Annotation के साथ pdf annotations java कैसे बनाएं

दस्तावेज़ लोड करना: केवल फ़ाइल पाथ से अधिक

बुनियादी दस्तावेज़ लोडिंग

आइए बुनियादी बातों से शुरू करें। PDF दस्तावेज़ लोड करना आपका पहला कदम है:

String INPUT_PDF = "YOUR_DOCUMENT_DIRECTORY/input.pdf";
String outputPath = "YOUR_OUTPUT_DIRECTORY/output_annotated.pdf";

// Initialize Annotator with the path to your document
final Annotator annotator = new Annotator(INPUT_PDF);

Real‑World Context: उत्पादन एप्लिकेशन में, ये पाथ अक्सर उपयोगकर्ता अपलोड, डेटाबेस एंट्रीज़, या क्लाउड स्टोरेज URLs से आते हैं। GroupDocs की खूबी यह है कि यह स्थानीय फ़ाइलें, स्ट्रीम और URLs को सहजता से संभालता है।

विभिन्न इनपुट स्रोतों को संभालना

// From file path (most common)
Annotator annotatorFromPath = new Annotator("path/to/document.pdf");

// From InputStream (useful for uploaded files)
FileInputStream inputStream = new FileInputStream("document.pdf");
Annotator annotatorFromStream = new Annotator(inputStream);

// Don't forget to close streams when done!
inputStream.close();

अपनी पहली एनोटेशन जोड़ना

Area एनोटेशन को समझना

Area एनोटेशन क्षेत्रों को हाइलाइट करने, महत्वपूर्ण सेक्शन को मार्क करने, या विज़ुअल कॉलआउट बनाने के लिए परिपूर्ण हैं। इन्हें स्टाइलिश डिजिटल स्टिकी नोट्स के रूप में सोचें।

import com.groupdocs.annotation.models.Rectangle;
import com.groupdocs.annotation.models.annotationmodels.AreaAnnotation;

// Create the annotation
AreaAnnotation area = new AreaAnnotation();

// Position and size: x, y, width, height
area.setBox(new Rectangle(100, 100, 100, 100));

// Background color in ARGB format (65535 = yellow with transparency)
area.setBackgroundColor(65535);

// Add the annotation to your document
annotator.add(area);

Coordinate System Explained: PDF कोऑर्डिनेट्स नीचे‑बाएँ कोने से शुरू होते हैं, लेकिन GroupDocs शीर्ष‑बाएँ मूल प्रणाली का उपयोग करता है (डेवलपर्स के लिए अधिक सहज)। ये संख्याएँ मूल बिंदु से पिक्सेल दर्शाती हैं।

व्यावहारिक एनोटेशन उदाहरण

Important Text को हाइलाइट करना:

// Create a semi‑transparent highlight
AreaAnnotation highlight = new AreaAnnotation();
highlight.setBox(new Rectangle(50, 200, 200, 25));
highlight.setBackgroundColor(0x80FFFF00); // Semi‑transparent yellow
highlight.setMessage("Important clause - review carefully");

समीक्षा टिप्पणियाँ बनाना:

// Add a comment annotation with custom styling
AreaAnnotation comment = new AreaAnnotation();
comment.setBox(new Rectangle(300, 150, 150, 75));
comment.setBackgroundColor(0x80FF0000); // Semi‑transparent red
comment.setMessage("Needs revision - see discussion in email");
comment.setCreatedOn(new Date());
comment.setUser("John Reviewer");

सहेजना और संसाधन प्रबंधन

उचित फ़ाइल सहेजने की तकनीकें

// Save the annotated document
annotator.save(outputPath);

// Always dispose of resources (critical for memory management)
annotator.dispose();

Why Dispose Matters: प्रदर्शन के लिए GroupDocs दस्तावेज़ डेटा मेमोरी में रखता है। उचित डिस्पोज़ल न करने पर, लंबे समय तक चलने वाले एप्लिकेशन में मेमोरी लीक्स का सामना करना पड़ेगा।

बेहतर संसाधन प्रबंधन पैटर्न

public void annotateDocument(String inputPath, String outputPath) {
    try (Annotator annotator = new Annotator(inputPath)) {
        // Your annotation code here
        AreaAnnotation area = new AreaAnnotation();
        area.setBox(new Rectangle(100, 100, 100, 100));
        area.setBackgroundColor(65535);
        
        annotator.add(area);
        annotator.save(outputPath);
        
        System.out.println("Document successfully annotated and saved to: " + outputPath);
    } catch (Exception e) {
        System.err.println("Annotation failed: " + e.getMessage());
        throw new RuntimeException("Failed to annotate document", e);
    }
}

सामान्य समस्याएँ और उन्हें कैसे टालें

फ़ाइल पाथ और अनुमति समस्याएँ

समस्या: “File not found” या “Access denied” त्रुटियाँ बहुत आम हैं।

समाधान:

  • विकास के दौरान हमेशा एब्सोल्यूट पाथ का उपयोग करें
  • प्रोसेसिंग से पहले फ़ाइल अनुमतियों की जाँच करें
  • इनपुट फ़ाइलों के मौजूद और पढ़ने योग्य होने की पुष्टि करें
public boolean validateInputFile(String filePath) {
    File file = new File(filePath);
    if (!file.exists()) {
        System.err.println("File does not exist: " + filePath);
        return false;
    }
    if (!file.canRead()) {
        System.err.println("Cannot read file: " + filePath);
        return false;
    }
    return true;
}

मेमोरी प्रबंधन की गलतियाँ

समस्या: कई दस्तावेज़ प्रोसेस करने के बाद एप्लिकेशन धीमा हो जाता है या क्रैश हो जाता है।

समाधान: हमेशा try‑with‑resources या स्पष्ट डिस्पोज़ल का उपयोग करें:

// Good practice - automatic resource management
try (Annotator annotator = new Annotator(inputPath)) {
    // Annotation code here
} // Automatically disposed

// If manual disposal is needed
Annotator annotator = null;
try {
    annotator = new Annotator(inputPath);
    // Annotation code here
} finally {
    if (annotator != null) {
        annotator.dispose();
    }
}

कोऑर्डिनेट सिस्टम में भ्रम

समस्या: एनोटेशन गलत स्थान पर या स्क्रीन से बाहर दिखते हैं।

समाधान: PDF कोऑर्डिनेट सिस्टम को याद रखें और ज्ञात पोजीशन के साथ टेस्ट करें:

// Start with simple, visible coordinates for testing
Rectangle testPosition = new Rectangle(50, 50, 100, 50);

// Gradually adjust based on your PDF dimensions
// Most PDFs are 612x792 points (8.5"x11" at 72 DPI)

वास्तविक उपयोग केस और एप्लिकेशन

दस्तावेज़ समीक्षा वर्कफ़्लो

परिदृश्य: क्लाइंट मीटिंग से पहले कानूनी फर्में कॉन्ट्रैक्ट की समीक्षा करती हैं।

Implementation Strategy:

  • विभिन्न समीक्षकों के लिए अलग-अलग एनोटेशन रंग
  • ऑडिट ट्रेल के लिए टाइमस्टैम्प और उपयोगकर्ता ट्रैकिंग
  • क्लाइंट वितरण के लिए एक्सपोर्ट क्षमताएँ
public void addReviewAnnotation(Annotator annotator, String reviewerName, 
                              String comment, Rectangle position, Color highlightColor) {
    AreaAnnotation review = new AreaAnnotation();
    review.setBox(position);
    review.setBackgroundColor(highlightColor.getRGB());
    review.setMessage(comment);
    review.setUser(reviewerName);
    review.setCreatedOn(new Date());
    
    annotator.add(review);
}

शैक्षिक सामग्री निर्माण

परिदृश्य: ई‑लर्निंग प्लेटफ़ॉर्म अध्ययन सामग्री में प्रमुख अवधारणाओं को हाइलाइट करते हैं।
यह क्यों काम करता है: विज़ुअल एनोटेशन समझ और स्मृति को बढ़ाते हैं, विशेषकर तकनीकी दस्तावेज़ों के लिए।

क्वालिटी एश्योरेंस दस्तावेज़ीकरण

परिदृश्य: निर्माण कंपनियां तकनीकी ड्रॉइंग और स्पेसिफिकेशन पर मार्कअप करती हैं।
लाभ: टीमों में मानकीकृत मार्कअप, रिवीजन ट्रैकिंग, और बदलावों का स्पष्ट संचार।

प्रदर्शन अनुकूलन टिप्स

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

बैच प्रोसेसिंग रणनीति:

public void processDocumentBatch(List<String> documentPaths) {
    for (String path : documentPaths) {
        try (Annotator annotator = new Annotator(path)) {
            // Process each document independently
            // This prevents memory accumulation
            processAnnotations(annotator);
        }
        
        // Optional: Add small delay for very large batches
        // Thread.sleep(100);
    }
}

मेमोरी उपयोग मॉनिटरिंग

Runtime runtime = Runtime.getRuntime();
long memoryBefore = runtime.totalMemory() - runtime.freeMemory();

// Process documents...

long memoryAfter = runtime.totalMemory() - runtime.freeMemory();
System.out.println("Memory used: " + (memoryAfter - memoryBefore) + " bytes");

समवर्ती प्रोसेसिंग विचार

थ्रेड सेफ़्टी: GroupDocs.Annotation प्रति इंस्टेंस थ्रेड‑सेफ़ नहीं है। समवर्ती प्रोसेसिंग के लिए अलग Annotator इंस्टेंसेज़ का उपयोग करें:

public class ConcurrentAnnotationProcessor {
    public void processDocumentsConcurrently(List<String> documents) {
        documents.parallelStream().forEach(docPath -> {
            try (Annotator annotator = new Annotator(docPath)) {
                // Each thread gets its own Annotator instance
                processAnnotations(annotator);
            }
        });
    }
}

उन्नत एनोटेशन तकनीकें

एक दस्तावेज़ में कई एनोटेशन प्रकार

public void createComprehensiveAnnotation(Annotator annotator) {
    // Highlight important text
    AreaAnnotation highlight = new AreaAnnotation();
    highlight.setBox(new Rectangle(100, 100, 200, 30));
    highlight.setBackgroundColor(0x80FFFF00);
    
    // Add explanatory note
    AreaAnnotation note = new AreaAnnotation();
    note.setBox(new Rectangle(320, 95, 150, 40));
    note.setBackgroundColor(0x80ADD8E6);
    note.setMessage("See reference document #123");
    
    annotator.add(highlight);
    annotator.add(note);
}

सामग्री के आधार पर डायनामिक एनोटेशन

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

ट्रबलशूटिंग गाइड

सामान्य त्रुटि संदेश और समाधान

“Invalid license” त्रुटियाँ – लाइसेंस फ़ाइल स्थान, फ़ॉर्मेट और समाप्ति की जाँच करें। सुनिश्चित करें कि लाइसेंस आपके डिप्लॉयमेंट प्रकार से मेल खाता है।

“Unsupported file format” त्रुटियाँ – पुष्टि करें कि PDF भ्रष्ट नहीं है, पासवर्ड‑प्रोटेक्टेड नहीं है, और शून्य बाइट्स नहीं है।

परफ़ॉर्मेंस समस्याएँ – मेमोरी उपयोग मॉनिटर करें, उचित डिस्पोज़ल लागू करें, और बैच प्रोसेसिंग पर विचार करें।

डिबगिंग टिप्स

लॉगिंग सक्षम करें:

// Add to your application properties or logging configuration
java.util.logging.Logger.getLogger("com.groupdocs").setLevel(Level.FINE);

इनपुट वैलिडेट करें:

public boolean validateAnnotationParameters(Rectangle box, int color) {
    if (box.getWidth() <= 0 || box.getHeight() <= 0) {
        System.err.println("Invalid annotation dimensions");
        return false;
    }
    
    if (box.getX() < 0 || box.getY() < 0) {
        System.err.println("Annotation position cannot be negative");
        return false;
    }
    
    return true;
}

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

प्रश्न: मैं एक ही PDF में कई एनोटेशन प्रभावी ढंग से कैसे जोड़ूँ?
उत्तर: सहेजने से पहले प्रत्येक एनोटेशन के लिए annotator.add(annotation) कॉल करें। GroupDocs सभी एनोटेशन को बैच करता है और जब आप save() कॉल करते हैं तो उन्हें लागू करता है:

try (Annotator annotator = new Annotator("document.pdf")) {
    annotator.add(annotation1);
    annotator.add(annotation2);
    annotator.add(annotation3);
    annotator.save("output.pdf"); // All annotations applied at once
}

प्रश्न: PDF के अलावा GroupDocs.Annotation कौन-कौन से फ़ाइल फ़ॉर्मेट्स को सपोर्ट करता है?
उत्तर: GroupDocs.Annotation 50 से अधिक फ़ॉर्मेट्स को सपोर्ट करता है, जिसमें Word (DOC, DOCX), PowerPoint (PPT, PPTX), Excel (XLS, XLSX), इमेजेज़ (JPEG, PNG, TIFF) आदि शामिल हैं। पूरी सूची के लिए डॉक्यूमेंटेशन देखें।

प्रश्न: मैं पासवर्ड‑प्रोटेक्टेड PDFs को कैसे हैंडल करूँ?

LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("your-password");
Annotator annotator = new Annotator("protected.pdf", loadOptions);

प्रश्न: क्या मैं PDF में मौजूदा एनोटेशन को प्राप्त और संशोधित कर सकता हूँ?

try (Annotator annotator = new Annotator("annotated.pdf")) {
    List<AnnotationInfo> annotations = annotator.get(AnnotationType.Area);
    for (AnnotationInfo annotation : annotations) {
        // Modify properties as needed
        annotation.setMessage("Updated comment");
    }
    annotator.update(annotations);
    annotator.save("updated.pdf");
}

प्रश्न: बड़े PDFs को प्रोसेस करने के प्रदर्शन संबंधी प्रभाव क्या हैं?
उत्तर: बड़े PDFs (>50 MB) को सावधानीपूर्वक मेमोरी प्रबंधन की आवश्यकता होती है। संभव हो तो स्ट्रीमिंग का उपयोग करें, आवश्यक होने पर पेज़ दर पेज़ प्रोसेस करें, और हमेशा रिसोर्सेज़ को डिस्पोज़ करें। लंबी ऑपरेशन्स के दौरान उपयोगकर्ता फीडबैक के लिए प्रोग्रेस ट्रैकिंग लागू करने पर विचार करें।

प्रश्न: वेब एप्लिकेशन में समवर्ती दस्तावेज़ प्रोसेसिंग को कैसे हैंडल करूँ?

@Service
public class AnnotationService {
    public CompletableFuture<String> annotateAsync(String inputPath) {
        return CompletableFuture.supplyAsync(() -> {
            try (Annotator annotator = new Annotator(inputPath)) {
                // Process annotations
                return processDocument(annotator);
            }
        });
    }
}

प्रश्न: एनोटेशन पोजिशनिंग समस्याओं को डिबग करने का सबसे अच्छा तरीका क्या है?
उत्तर: ज्ञात कोऑर्डिनेट्स से शुरू करें और धीरे‑धीरे समायोजित करें। अधिकांश मानक PDFs 612x792 पॉइंट्स का उपयोग करते हैं। बेसिक फ़ंक्शनैलिटी की पुष्टि के लिए पहले (50, 50, 100, 50) पर एक टेस्ट एनोटेशन बनाएं, फिर अपनी कंटेंट लेआउट के अनुसार समायोजित करें।

प्रश्न: मैं GroupDocs.Annotation को Spring Boot के साथ कैसे इंटीग्रेट करूँ?

@Service
public class DocumentAnnotationService {
    
    public void annotateDocument(MultipartFile file, List<AnnotationRequest> requests) {
        try (InputStream inputStream = file.getInputStream();
             Annotator annotator = new Annotator(inputStream)) {
            
            // Process annotation requests
            requests.forEach(request -> addAnnotation(annotator, request));
            annotator.save("output.pdf");
        }
    }
}

अतिरिक्त FAQ

प्रश्न: क्या मैं एनोटेटेड PDFs को अन्य फ़ॉर्मेट्स में एक्सपोर्ट कर सकता हूँ?
उत्तर: हाँ, GroupDocs.Annotation एनोटेटेड दस्तावेज़ों को DOCX, PPTX या इमेजेज़ जैसे फ़ॉर्मेट्स में बदल सकता है जबकि एनोटेशन को संरक्षित रखता है।

प्रश्न: क्या लाइब्रेरी द्वारा सपोर्ट किए गए सभी एनोटेशन टाइप्स की सूची प्राप्त करने का कोई तरीका है?
उत्तर: सभी सपोर्टेड एनोटेशन एनेम्स की एरे प्राप्त करने के लिए AnnotationType.values() का उपयोग करें।

प्रश्न: मैं वॉटरमार्क एनोटेशन की उपस्थिति को कैसे कस्टमाइज़ कर सकता हूँ?
उत्तर: WatermarkAnnotation इंस्टेंस पर setOpacity, setRotation, और setBackgroundColor जैसी प्रॉपर्टीज़ सेट करें, फिर उसे जोड़ें।

प्रश्न: क्या लाइब्रेरी डेटाबेस से प्रोग्रामेटिकली कमेंट्स जोड़ने का समर्थन करती है?
उत्तर: बिल्कुल। आप किसी भी स्रोत से कमेंट डेटा पढ़ सकते हैं, AreaAnnotation (या TextAnnotation) को कमेंट टेक्स्ट से भरें, और फिर उसे दस्तावेज़ में जोड़ें।

प्रश्न: यदि बैच प्रोसेसिंग के दौरान मेमोरी लीक्स का सामना करता हूँ तो क्या करूँ?
उत्तर: सुनिश्चित करें कि प्रत्येक Annotator बंद हो (try‑with‑resources), JVM हीप मॉनिटर करें, और दस्तावेज़ों को छोटे बैच में प्रोसेस करने पर विचार करें।

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


अंतिम अपडेट: 2026-03-27
परीक्षण किया गया: GroupDocs.Annotation 25.2 for Java
लेखक: GroupDocs