जावा में PDF में स्ट्राइकआउट एनोटेशन कैसे जोड़ें
क्या आपको कभी प्रोग्रामेटिक रूप से PDF में टेक्स्ट को काटना पड़ा है? चाहे आप एक दस्तावेज़ समीक्षा प्रणाली बना रहे हों, संपादन वर्कफ़्लो तैयार कर रहे हों, या केवल टेक्स्ट को हटाने के लिए चिह्नित करना चाहते हों, how to add strikeout एनोटेशन जावा में एक व्यावहारिक कौशल है जो समय बचाता है और मैन्युअल प्रयास को कम करता है। इस व्यापक गाइड में आप GroupDocs.Annotation for Java के साथ स्ट्राइकआउट एनोटेशन को लागू करने के लिए आवश्यक सब कुछ सीखेंगे, प्रोजेक्ट सेटअप से लेकर प्रदर्शन ट्यूनिंग तक।
त्वरित उत्तर
- पहला कदम क्या है? अपने
pom.xmlमें GroupDocs.Annotation Maven डिपेंडेंसी जोड़ें। - मैं स्ट्राइकआउट कैसे बनाऊँ?
Annotatorका इंस्टैंस बनाएँ, पॉइंट्स के साथStrikeoutAnnotationपरिभाषित करें, रंग/अपारदर्शिता सेट करें, फिरaddAnnotationकॉल करें। - क्या मैं टिप्पणी जोड़ सकता हूँ? हाँ, सहयोग के लिए एनोटेशन से एक
Commentऑब्जेक्ट संलग्न करें। - यदि एनोटेशन गलत जगह पर है तो? कॉर्डिनेट पॉइंट्स को समायोजित करें; PDF नीचे‑बाएँ मूल बिंदु प्रणाली का उपयोग करता है।
- दस्तावेज़ आकार पर कोई सीमा है? GroupDocs कई‑सौ पृष्ठों वाले PDF को पूरी फ़ाइल को मेमोरी में लोड किए बिना प्रोसेस करता है।
PDF एनोटेशन में “how to add strikeout” क्या है?
वाक्यांश “how to add strikeout” का अर्थ है चयनित टेक्स्ट के ऊपर प्रोग्रामेटिक रूप से एक रेखा खींचने की प्रक्रिया, जिसे एनोटेशन API के माध्यम से PDF दस्तावेज़ में लागू किया जाता है। जावा में, GroupDocs.Annotation एक समर्पित StrikeoutAnnotation क्लास प्रदान करता है जो स्ट्राइकआउट मार्क की रेंडरिंग, स्टाइलिंग और स्थायित्व को संभालता है।
जावा PDF स्ट्राइकआउट के लिए GroupDocs क्यों उपयोग करें?
GroupDocs.Annotation 50+ इनपुट और आउटपुट फ़ॉर्मेट—PDF, DOCX, XLSX, PPTX, HTML, और सामान्य इमेज प्रकारों सहित—को सपोर्ट करता है, इसलिए आप किसी एक फ़ाइल प्रकार तक सीमित नहीं हैं। यह एक हाई‑लेवल API प्रदान करता है जो लो‑लेवल PDF संरचना को एब्स्ट्रैक्ट करता है, फ़ॉन्ट एम्बेडिंग, पेज रेंडरिंग, और एनोटेशन स्थायित्व को स्वचालित रूप से संभालता है, जिससे डेवलपर्स बिज़नेस लॉजिक पर ध्यान केंद्रित कर सकते हैं न कि PDF इंटर्नल्स पर।
पूर्वापेक्षाएँ और सेटअप आवश्यकताएँ
आवश्यक आवश्यकताएँ
- Java Development Kit (JDK): संस्करण 8 या बाद का (सर्वोत्तम गार्बेज‑कलेक्शन के लिए JDK 11+ अनुशंसित)।
- GroupDocs.Annotation for Java: Maven के माध्यम से इंटीग्रेटेड (नीचे Maven स्निपेट देखें)।
- IDE: IntelliJ IDEA, Eclipse, या कोई भी Java‑संगत एडिटर।
Maven डिपेंडेंसी सेटअप
अपने pom.xml में निम्नलिखित डिपेंडेंसी ब्लॉक जोड़ें:
<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>
प्रो टिप: हमेशा GroupDocs रिलीज़ पेज पर नवीनतम संस्करण की जाँच करें; नए रिलीज़ में फीचर जोड़ और बग फिक्स होते हैं जो एनोटेशन रेंडरिंग को प्रभावित कर सकते हैं।
लाइसेंस प्राप्त करना
GroupDocs.Annotation को उत्पादन उपयोग के लिए वैध लाइसेंस की आवश्यकता होती है। आपके पास तीन विकल्प हैं:
- फ्री ट्रायल: GroupDocs Downloads से डाउनलोड करें
- टेम्पररी लाइसेंस: GroupDocs Temporary License पर एक डेवलपमेंट की अनुरोध करें
- पूर्ण लाइसेंस: उत्पादन के लिए GroupDocs Purchase Page से खरीदें
ट्रायल में एक सूक्ष्म वॉटरमार्क जोड़ता है, इसलिए परीक्षण को उसी अनुसार योजना बनाएँ।
चरण‑दर‑चरण कार्यान्वयन गाइड
मुख्य घटकों को समझना
निम्न परिभाषाएँ आपको एक त्वरित मानसिक मॉडल देती हैं:
- Annotator: मुख्य API ऑब्जेक्ट जो PDF लोड करता है और एनोटेशन मेथड्स प्रदान करता है।
- StrikeoutAnnotation: दृश्य स्ट्राइकआउट रेखा और उसकी स्टाइलिंग विकल्पों का प्रतिनिधित्व करता है।
- Point: एक कोऑर्डिनेट जोड़ी (X, Y) जो लाइब्रेरी को बताती है कि रेखा कहाँ शुरू और समाप्त होगी।
- Comment: वैकल्पिक टेक्स्ट जो एनोटेशन से जुड़ा होता है, सहयोग के लिए।
चरण 1: फ़ाइल पाथ सेट करना
अपने स्रोत PDF और लक्ष्य फ़ाइल के स्थान को परिभाषित करें। गलत पाथ “File Not Found” त्रुटियों का आम कारण होते हैं।
String inputFilePath = "path/to/your/document/directory/sample.pdf";
String outputPath = "path/to/your/output/directory/AddTextStrikeoutAnnotation_output.pdf";
सामान्य गलती अलर्ट: सुनिश्चित करें कि आउटपुट डायरेक्टरी मौजूद है और लिखने योग्य है; GroupDocs स्वचालित रूप से गायब फ़ोल्डर नहीं बनाता।
चरण 2: Annotator को इनिशियलाइज़ करना
एक Annotator इंस्टैंस बनाएँ जो PDF को मेमोरी में लोड करता है।
final Annotator annotator = new Annotator(inputFilePath);
यहाँ क्या होता है? लाइब्रेरी PDF संरचना को पार्स करती है, एक आंतरिक प्रतिनिधित्व बनाती है, और पेज‑वाइज़ एनोटेशन कैनवास तैयार करती है। कई‑सौ पृष्ठ वाली फ़ाइलों के लिए यह चरण कुछ सेकंड ले सकता है।
चरण 3: टिप्पणियाँ जोड़ना (वैकल्पिक लेकिन अनुशंसित)
Comment एक क्लास है जो एनोटेशन से जुड़ी टेक्स्टुअल नोट का प्रतिनिधित्व करता है, जिससे सहयोगी स्ट्राइकआउट के कारण को समझा सकते हैं।
Reply reply1 = new Reply();
reply1.setComment("First comment");
reply1.setRepliedOn(Calendar.getInstance().getTime());
List<Reply> replies = new ArrayList<>();
replies.add(reply1);
वास्तविक‑दुनिया टिप: टिप्पणी का उपयोग करके बताएँ कि टेक्स्ट क्यों हटाया जा रहा है—यह विशेष रूप से कानूनी या संपादकीय समीक्षा वर्कफ़्लो में उपयोगी है।
चरण 4: एनोटेशन कोऑर्डिनेट्स परिभाषित करना
Point ऑब्जेक्ट्स X‑Y कोऑर्डिनेट जोड़े संग्रहीत करते हैं जो PDF पेज पर एनोटेशन के सटीक स्थान को निर्धारित करते हैं।
Point point1 = new Point(80, 730);
Point point2 = new Point(240, 730);
List<Point> points = Arrays.asList(point1, point2);
कोऑर्डिनेट सिस्टम समझाया गया: PDF कोऑर्डिनेट्स नीचे‑बाएँ कोने (0,0) से शुरू होते हैं। उदाहरण लक्ष्य पेज पर (80,730) से (240,730) तक एक क्षैतिज रेखा बनाता है।
सही कोऑर्डिनेट खोजना: कई डेवलपर्स एक हेल्पर बनाते हैं जो पेज की चौड़ाई/ऊँचाई के प्रतिशत को एब्सोल्यूट पॉइंट्स में बदलता है, जिससे विभिन्न पेज आकारों के लिए कोड लचीला बनता है।
चरण 5: स्ट्राइकआउट एनोटेशन बनाना
StrikeoutAnnotation दृश्य रेखा, उसकी शैली गुण (जैसे रंग और अपारदर्शिता) और स्ट्राइकआउट मार्क के लिए कोई भी मेटाडेटा समाहित करता है।
StrikeoutAnnotation strikeout = new StrikeoutAnnotation();
strikeout.setCreatedOn(Calendar.getInstance().getTime());
strikeout.setFontColor(65535); // Yellow
strikeout.setMessage("This is a strikeout annotation");
strikeout.setOpacity(0.7);
strikeout.setPageNumber(0);
strikeout.setPoints(points);
strikeout.setReplies(replies);
रंग मान: fontColor दशमलव RGB मान (जैसे, चमकीले पीले के लिए 65535) उपयोग करता है। यदि आपको ब्रांड‑विशिष्ट शेड चाहिए तो ऑनलाइन कन्वर्टर का उपयोग करें।
अपारदर्शिता सिफारिश: 0.7 (70 %) की अपारदर्शिता स्पष्ट दृश्य संकेत देती है जबकि मूल टेक्स्ट पठनीय रहता है।
चरण 6: एनोटेशन लागू करना
addAnnotation Annotator की एक मेथड है जो तैयार एनोटेशन को दस्तावेज़ में रजिस्टर करती है ताकि वह रेंडर हो और सेव हो सके।
annotator.add(strikeout);
चरण 7: सहेजना और क्लीन‑अप
dispose() Annotator इंस्टैंस द्वारा रखे गए नेटिव रिसोर्सेज़ को रिलीज़ करता है, जिससे प्रोसेसिंग समाप्त होने पर मेमोरी लीक नहीं होते।
annotator.save(outputPath);
annotator.dispose();
मेमोरी मैनेजमेंट नोट: dispose() कॉल करने से नेटिव रिसोर्सेज़ फ्री होते हैं और बड़े पैमाने पर PDF प्रोसेसिंग में मेमोरी लीक से बचा जा सकता है।
सामान्य समस्याएँ और समाधान
समस्या 1: “File Not Found” त्रुटियाँ
लक्षण: Annotator निर्माण के दौरान एक्सेप्शन फेंका जाता है।
समाधान: इनपुट और आउटपुट दोनों पाथ की जाँच करें, और सुनिश्चित करें कि एप्लिकेशन के पास रीड/राइट परमिशन हैं।
// Add this check before creating the Annotator
File inputFile = new File(inputFilePath);
if (!inputFile.exists()) {
throw new FileNotFoundException("Input file not found: " + inputFilePath);
}
समस्या 2: स्ट्राइकआउट गलत स्थान पर दिखता है
लक्षण: रेखा इच्छित टेक्स्ट के साथ नहीं मिलती।
समाधान: याद रखें कि PDF में Y‑कोऑर्डिनेट ऊपर की ओर बढ़ते हैं। विज़ुअल डिबग टूल या पेज डाइमेंशन प्रिंट करके पॉइंट्स को फाइन‑ट्यून करें।
// Log your coordinates to understand the positioning
System.out.println("Annotation coordinates: " + point1 + " to " + point2);
// For debugging, try extreme coordinates first
Point debugPoint1 = new Point(0, 0); // Bottom-left corner
Point debugPoint2 = new Point(100, 100); // Small area from corner
समस्या 3: एनोटेशन दिखाई नहीं दे रहा
लक्षण: सेव करने के बाद कोई स्ट्राइकआउट नहीं दिखता।
संभव कारण और समाधान:
- अपारदर्शिता बहुत कम: अस्थायी रूप से अपारदर्शिता
1.0सेट करके दृश्यता जांचें। - रंग मिश्रण: उच्च कंट्रास्ट रंग जैसे लाल (
255) उपयोग करें। - गलत पेज इंडेक्स: पेज नंबर शून्य‑आधारित होते हैं; सुनिश्चित करें कि सही पेज टार्गेट किया गया है।
समस्या 4: बड़े फ़ाइलों में मेमोरी समस्याएँ
लक्षण: OutOfMemoryError या धीमी प्रदर्शन।
समाधान:
- दस्तावेज़ों को छोटे बैच में प्रोसेस करें।
- यदि उपलब्ध हो तो स्ट्रीमिंग API उपयोग करें।
- प्रत्येक दस्तावेज़ के बाद हमेशा
dispose()कॉल करें।
// Increase JVM heap size when running your application
// -Xmx2G for 2GB heap
// Process documents in batches rather than all at once
// Always dispose of Annotator instances promptly
वास्तविक‑दुनिया के उपयोग और केस स्टडीज़
कानूनी दस्तावेज़ समीक्षा
कानूनी फर्में अनुबंधों में हटाए गए क्लॉज़ को दर्शाने के लिए स्ट्राइकआउट एनोटेशन का उपयोग करती हैं, जबकि ऑडिट ट्रेल बनाए रखती हैं।
शैक्षणिक पेपर संपादन
प्रोफेसर पीयर रिव्यू के दौरान हटाने के सुझाव देने के लिए स्ट्राइकआउट का उपयोग करते हैं, जिससे मूल टेक्स्ट संदर्भ के लिए दिखाई देता रहता है।
कंटेंट मैनेजमेंट सिस्टम
पब्लिशिंग प्लेटफ़ॉर्म स्वचालित रूप से नीति‑उल्लंघन वाले सेक्शन को स्ट्राइकआउट से चिह्नित करता है, फिर मैन्युअल मॉडरेशन करता है।
दस्तावेज़ संस्करण नियंत्रण
एंटरप्राइज़ दस्तावेज़‑केंद्रित संस्करण‑नियंत्रण वर्कफ़्लो में स्ट्राइकआउट एनोटेशन को “डिलीशन मार्कर” के रूप में उपयोग किया जाता है, बिलकुल कोड डिफ़्स की तरह।
प्रदर्शन अनुकूलन टिप्स
बैच प्रोसेसिंग रणनीति
कई PDF को हैंडल करते समय जहाँ संभव हो एक ही Annotator इंस्टैंस को पुनः उपयोग करें और फ़ाइलों को समानांतर थ्रेड्स में प्रोसेस करें।
// Instead of creating a new Annotator for each document:
// Process multiple annotations per document in one session
List<StrikeoutAnnotation> annotations = prepareAllAnnotations();
for (StrikeoutAnnotation annotation : annotations) {
annotator.add(annotation);
}
annotator.save(outputPath);
मेमोरी मैनेजमेंट सर्वोत्तम प्रैक्टिस
- प्रत्येक
Annotatorपरdispose()कॉल करें। - समानांतर में लोड किए जाने वाले दस्तावेज़ों की संख्या सीमित रखें ताकि हीप प्रेशर कम हो।
- VisualVM जैसे टूल से JVM मेमोरी उपयोग की निगरानी करें।
कोऑर्डिनेट कैशिंग
यदि आप कई फ़ाइलों में समान एनोटेशन लेआउट लागू करते हैं, तो Point ऑब्जेक्ट्स को कैश करें ताकि पुनः‑गणना से बचा जा सके।
// Cache commonly used coordinate sets
private static final List<Point> STANDARD_HEADER_STRIKEOUT =
Arrays.asList(new Point(50, 750), new Point(300, 750));
// Reuse these coordinates instead of recreating them
strikeout.setPoints(STANDARD_HEADER_STRIKEOUT);
उन्नत कस्टमाइज़ेशन विकल्प
डायनामिक कलर सिलेक्शन
व्यवसाय नियमों के आधार पर रनटाइम पर रंग चुनें (जैसे, गंभीर हटाने के लिए लाल, अस्थायी के लिए पीला)।
// Choose colors based on annotation type or user
int colorByPriority = getPriorityColor(annotationType);
strikeout.setFontColor(colorByPriority);
private int getPriorityColor(String type) {
switch(type) {
case "HIGH": return 255; // Red
case "MEDIUM": return 65535; // Yellow
case "LOW": return 65280; // Green
default: return 0; // Black
}
}
मल्टी‑लाइन स्ट्राइकआउट
कई Point जोड़े बनाकर ज़िग‑ज़ैग रेखा बनाएँ जो कई टेक्स्ट लाइनों को पार करती है।
// Create strikeouts that span multiple lines
List<Point> multiLinePoints = Arrays.asList(
new Point(80, 730), // Start of first line
new Point(400, 730), // End of first line
new Point(80, 710), // Start of second line
new Point(200, 710) // End of second line
);
ट्रबलशूटिंग चेकलिस्ट
- फ़ाइल परमिशन: रीड/राइट एक्सेस की पुष्टि करें।
- लाइब्रेरी संस्करण: सुनिश्चित करें कि आप समर्थित GroupDocs.Annotation रिलीज़ उपयोग कर रहे हैं।
- लाइसेंस स्थिति: लाइसेंस फ़ाइल सही तरीके से संदर्भित है या नहीं, जांचें।
- PDF संगतता: सुनिश्चित करें कि PDF भ्रष्ट नहीं है और समर्थित आकार सीमा के भीतर है।
- कोऑर्डिनेट वैधता: सभी पॉइंट्स पेज बाउंड्स के भीतर हों।
- हीप स्पेस: बहुत बड़े फ़ाइलों को प्रोसेस करते समय JVM
-Xmxबढ़ाएँ।
अक्सर पूछे जाने वाले प्रश्न
प्रश्न: क्या मैं कई लाइनों में टेक्स्ट पर स्ट्राइकआउट कर सकता हूँ?
उत्तर: हाँ। कई Point ऑब्जेक्ट बनाकर वांछित पाथ को ट्रेस करें; एनोटेशन प्रदान किए गए पॉलीलाइन का अनुसरण करेगा।
प्रश्न: यदि मैं पेज सीमाओं के बाहर कोऑर्डिनेट्स निर्दिष्ट करता हूँ तो क्या होगा?
उत्तर: एनोटेशन क्लिप हो जाएगा और अदृश्य हो सकता है। हमेशा कोऑर्डिनेट्स को पेज की चौड़ाई और ऊँचाई के विरुद्ध वैध करें।
प्रश्न: क्या मैं जोड़ने के बाद स्ट्राइकआउट एनोटेशन को हटा सकता हूँ?
उत्तर: बिल्कुल। removeAnnotation मेथड को एनोटेशन की ID या टाइप फ़िल्टर के साथ उपयोग करके प्रोग्रामेटिक रूप से हटाएँ।
प्रश्न: क्या एक ही PDF में मैं कितनी एनोटेशन जोड़ सकता हूँ?
उत्तर: GroupDocs कोई कठोर सीमा नहीं लगाता, लेकिन हजारों एनोटेशन के बाद प्रदर्शन घट सकता है। बहुत बड़े सेट के लिए पेजिनेशन या सारांश एनोटेशन पर विचार करें।
प्रश्न: पासवर्ड‑प्रोटेक्टेड PDF के साथ कैसे काम करूँ?
उत्तर: पासवर्ड को Annotator कंस्ट्रक्टर में पास करें। लाइब्रेरी मेमोरी में दस्तावेज़ को डिक्रिप्ट कर देगा और फिर एनोटेशन लागू करेगा।
प्रश्न: विभिन्न पेज आकार और ओरिएंटेशन वाले PDF को कैसे संभालूँ?
उत्तर: प्रत्येक पेज की डाइमेंशन annotator.getPageInfo(pageNumber) से प्राप्त करें और कोऑर्डिनेट्स को उन डाइमेंशन के सापेक्ष गणना करें, जिससे स्थिर प्लेसमेंट सुनिश्चित हो।
निष्कर्ष
आप अब जावा में GroupDocs.Annotation का उपयोग करके PDF में how to add strikeout एनोटेशन के लिए एक पूर्ण, प्रोडक्शन‑रेडी समाधान रखते हैं। फ़ाइल‑पाथ हैंडलिंग, कोऑर्डिनेट गणना, और रिसोर्स मैनेजमेंट में महारत हासिल करके आप इस क्षमता को दस्तावेज़ समीक्षा टूल, कंटेंट पाइपलाइन, या किसी भी जावा‑आधारित एप्लिकेशन में एम्बेड कर सकते हैं जिसे सटीक विज़ुअल फ़ीडबैक चाहिए।
अगले कदम
- उदाहरण प्रोजेक्ट को क्लोन करें और एक सैंपल PDF पर चलाएँ।
- विभिन्न रंग, अपारदर्शिता, और टिप्पणी टेक्स्ट के साथ प्रयोग करें।
- एनोटेशन वर्कफ़्लो को अपने मौजूदा दस्तावेज़‑प्रोसेसिंग सर्विस में इंटीग्रेट करें।
- संबंधित एनोटेशन टाइप—हाइलाइट, स्टिकी नोट, और शेप एनोटेशन—की खोज करें ताकि आपका PDF मैनिपुलेशन टूलकिट विस्तृत हो सके।
और अधिक जानकारी चाहिए? आधिकारिक दस्तावेज़ में गहराई से API अंतर्दृष्टि के लिए डुबकी लगाएँ।
अतिरिक्त संसाधन
- GroupDocs documentation - GroupDocs लाइब्रेरीज़ के लिए सामान्य दस्तावेज़
- GroupDocs.Annotation Documentation - पूर्ण API रेफ़रेंस
- API Reference Guide - मेथड‑बाय‑मेथड विवरण
- Download Latest Version - अपनी लाइब्रेरी को अद्यतित रखें
- Purchase License - प्रोडक्शन‑रेडी लाइसेंसिंग
- Free Trial Download - खरीदने से पहले मूल्यांकन करें
- Temporary License Request - विकास परीक्षण
- Support Forum - समुदाय सहायता और आधिकारिक सपोर्ट
अंतिम अपडेट: 2026-05-21
टेस्टेड विथ: GroupDocs.Annotation 23.12 for Java
लेखक: GroupDocs