GroupDocs.Watermark Java के साथ दस्तावेज़ को छवि में बदलें

बहु‑पृष्ठ दस्तावेज़ों के हल्के इमेज प्रीव्यू बनाना पोर्टल, कंटेंट‑मैनेजमेंट सिस्टम और क्लाउड स्टोरेज सेवाओं की सामान्य आवश्यकता है। दस्तावेज़ को छवि में बदलें द्वारा आप अंतिम उपयोगकर्ताओं को पूर्ण फ़ाइल लोड किए बिना तेज़ दृश्य संकेत प्रदान करते हैं। GroupDocs.Watermark Java लाइब्रेरी न केवल वॉटरमार्क जोड़ती है बल्कि एक उच्च‑प्रदर्शन प्रीव्यू इंजन भी प्रदान करती है जो प्रत्येक पृष्ठ के लिए java थंबनेल जनरेट करें एक ही पास में कर सकता है।

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

त्वरित उत्तर

  • पहला कदम क्या है? GroupDocs.Watermark Maven डिपेंडेंसी जोड़ें और स्रोत फ़ाइल पथ के साथ एक Watermarker प्रारंभ करें।
  • प्रीव्यू इमेज कैसे बनती हैं? प्रत्येक पृष्ठ के लिए आउटपुट स्ट्रीम खोलने हेतु ICreatePageStream लागू करें, फिर उपयुक्त विकल्पों के साथ generatePreview() कॉल करें।
  • क्या मुझे लाइसेंस चाहिए? बुनियादी परिदृश्यों के लिए ट्रायल काम करता है, लेकिन पूर्ण लाइसेंस वॉटरमार्क हटाता है और बैच प्रोसेसिंग अनलॉक करता है।
  • क्या मैं 200 पृष्ठों से बड़े PDFs प्रोसेस कर सकता हूँ? हाँ – लाइब्रेरी पृष्ठों को स्ट्रीम करती है, इसलिए 500‑पृष्ठ फ़ाइलों के लिए भी मेमोरी उपयोग कम रहता है।
  • कौन से इमेज फ़ॉर्मेट समर्थित हैं? PNG, JPEG, BMP, और TIFF बॉक्स से बाहर उपलब्ध हैं।

दस्तावेज़ को छवि में बदलना क्या है?

वाक्यांश दस्तावेज़ को छवि में बदलें स्रोत फ़ाइल (PDF, DOCX, PPTX, आदि) के प्रत्येक पृष्ठ को PNG या JPEG जैसी रास्टर इमेज में रेंडर करने की प्रक्रिया को दर्शाता है। यह रूपांतरण थंबनेल गैलरी, प्रीव्यू पेन और मोबाइल‑फ्रेंडली दस्तावेज़ व्यूअर्स के लिए उपयोगी है।

प्रीव्यू जनरेशन के लिए GroupDocs.Watermark क्यों उपयोग करें?

GroupDocs.Watermark 30+ इनपुट फ़ॉर्मेट का समर्थन करता है और 500 पृष्ठ तक के दस्तावेज़ों के लिए प्रीव्यू उत्पन्न कर सकता है बिना पूरी फ़ाइल को मेमोरी में लोड किए। आंतरिक रूप से यह पृष्ठों को क्रमिक रूप से प्रोसेस करता है, जिससे बड़े PDFs के लिए भी Java हीप उपयोग 50 MB से कम रहता है। लाइब्रेरी बिल्ट‑इन इमेज ऑप्टिमाइज़ेशन भी प्रदान करती है, जिससे आप DPI, कलर डेप्थ और कंप्रेशन लेवल निर्दिष्ट कर सकते हैं, जिसके परिणामस्वरूप थंबनेल आमतौर पर 70 % छोटे होते हैं साधारण रास्टराइज़ेशन की तुलना में।

पूर्वापेक्षाएँ

  • Java Development Kit (JDK) 11 या नया – लाइब्रेरी Java 8+ के लिए संकलित है, लेकिन JDK 11 दीर्घकालिक समर्थन और बेहतर प्रदर्शन देता है।
  • Maven 3.6+ – डिपेंडेंसी प्रबंधन के लिए।
  • GroupDocs.Watermark for Java संस्करण 24.11 – लेखन के समय उपलब्ध नवीनतम स्थिर रिलीज़।
  • Java I/O स्ट्रीम्स का बुनियादी ज्ञान – आप प्रत्येक प्रीव्यू पेज के लिए FileOutputStream ऑब्जेक्ट बनाएँगे।
  • एक लाइसेंस कुंजी (प्रोडक्शन के लिए वैकल्पिक) – ट्रायल प्रीव्यू आकार को प्रति दस्तावेज़ 5 MB तक सीमित करता है।

GroupDocs.Watermark को Java के लिए सेट अप कैसे करें

GroupDocs.Watermark सेट अप करने के लिए, पहले Maven रिपॉज़िटरी जोड़ें और फिर अपनी प्रोजेक्ट की pom.xml में लाइब्रेरी को डिपेंडेंसी के रूप में शामिल करें। इससे Maven सही आर्टिफैक्ट डाउनलोड कर सकेगा और क्लासेस को कंपाइलेशन और रनटाइम के लिए क्लासपाथ पर उपलब्ध कराएगा।

Maven डिपेंडेंसी जोड़ें

लाइब्रेरी Maven Central के माध्यम से वितरित होती है। अपने pom.xml के <dependencies> ब्लॉक के अंदर निम्न स्निपेट जोड़ें:

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-watermark</artifactId>
    <version>24.11</version>
</dependency>

प्रो टिप: संस्करण संख्या को एक प्रॉपर्टी में रखें (<groupdocs.watermark.version>24.11</groupdocs.watermark.version>) ताकि आप आसानी से अपग्रेड कर सकें।

प्रत्यक्ष डाउनलोड (वैकल्पिक)

यदि आप मैनुअल इंस्टॉलेशन पसंद करते हैं, तो आप आधिकारिक रिलीज़ पेज से JAR डाउनलोड कर सकते हैं: GroupDocs.Watermark for Java releases.

लाइसेंस प्राप्त करने और लागू करने का तरीका

GroupDocs.Watermark में लाइसेंस लागू करने से ट्रायल सीमाएँ हटती हैं और डिफ़ॉल्ट वॉटरमार्क ओवरले निष्क्रिय हो जाता है। लाइसेंस फ़ाइल को ज्ञात स्थान पर रखें और API को उसकी ओर इंगित करें, या किसी अन्य कॉल से पहले कोड में सीधे लाइसेंस पाथ एम्बेड करें। एक बार लोड हो जाने पर, सभी बाद के ऑपरेशन्स पूर्ण‑फ़ीचर मोड में चलेंगे।

आप कर सकते हैं:

  • GroupDocs पोर्टल से एक मुफ्त ट्रायल अनुरोध करें – यह 30‑दिन का लाइसेंस फ़ाइल प्रदान करता है।
  • ऑनलाइन लाइसेंस जेनरेटर के माध्यम से मूल्यांकन वातावरण के लिए एक अस्थायी लाइसेंस जेनरेट करें।
  • असीमित प्रोडक्शन उपयोग और प्रायोरिटी सपोर्ट के लिए एक कमर्शियल लाइसेंस खरीदें।

लाइसेंस फ़ाइल (GroupDocs.Watermark.lic) को अपने प्रोजेक्ट की रूट में रखें या प्रोग्रामेटिकली Watermarker.setLicense("path/to/license.file") के साथ उसका पाथ निर्दिष्ट करें।

Watermarker को कैसे इनिशियलाइज़ करें

Watermarker को स्रोत दस्तावेज़ का पाथ प्रदान करके इनिशियलाइज़ करें, वैकल्पिक रूप से संरक्षित फ़ाइलों के लिए पासवर्ड शामिल करें। कंस्ट्रक्टर फ़ॉर्मेट को वैलिडेट करता है और आंतरिक पार्सर्स तैयार करता है, जिससे आप तुरंत प्रीव्यू या वॉटरमार्क मेथड्स को कॉल कर सकते हैं। निर्माण के बाद, आवश्यकता पड़ने पर कई ऑपरेशन्स के लिए इंस्टेंस को पुन: उपयोग करने हेतु एक रेफ़रेंस रखें।

Watermarker क्लास GroupDocs.Watermark का कोर ऑब्जेक्ट है जो दस्तावेज़ लोड करता है और वॉटरमार्क इन्सर्शन तथा प्रीव्यू जनरेशन जैसे ऑपरेशन्स को एक्सपोज़ करता है।

Watermarker watermarker = new Watermarker("YOUR_DOCUMENT_DIRECTORY/diagram.vdx");
  • inputDocumentPath – स्रोत फ़ाइल का absolute या relative पाथ।
  • कंस्ट्रक्टर फ़ाइल फ़ॉर्मेट को वैलिडेट करता है और आंतरिक पार्सर्स तैयार करता है।

परिभाषा एंकर: Watermarker GroupDocs.Watermark for Java में सभी दस्तावेज़‑प्रोसेसिंग क्रियाओं के लिए एंट्री पॉइंट है।

प्रीव्यू जनरेशन के लिए पेज स्ट्रीम कैसे बनाएं

ICreatePageStream इंटरफ़ेस को इम्प्लीमेंट करके कस्टम पेज स्ट्रीम बनाएं, जिसे लाइब्रेरी प्रत्येक रेंडर किए गए पृष्ठ के लिए कॉल करती है। आपका इम्प्लीमेंटेशन एक नया OutputStream—आमतौर पर FileOutputStream—जेनरेट करना चाहिए जो पेज नंबर के आधार पर एक विशिष्ट नाम वाली फ़ाइल की ओर इशारा करता हो। यह दृष्टिकोण प्रत्येक पृष्ठ के आउटपुट को अलग करता है और डेटा ओवरलैप को रोकता है।

java थंबनेल जनरेट करने के लिए, आपको प्रत्येक पृष्ठ के लिए एक स्ट्रीम प्रदान करनी होगी जहाँ रेंडर की गई इमेज लिखी जाएगी। ICreatePageStream इंटरफ़ेस को इम्प्लीमेंट करें; लाइब्रेरी आपके इम्प्लीमेंटेशन को प्रत्येक प्रोसेस किए गए पृष्ठ के लिए कॉल करती है।

public class FeatureCreatePageStream implements ICreatePageStream {
    private final String outputDir;
    private final String fileNameTemplate; // e.g. "preview_page_{0}.png"

    public FeatureCreatePageStream(String outputDir, String fileNameTemplate) {
        this.outputDir = outputDir;
        this.fileNameTemplate = fileNameTemplate;
    }

    @Override
    public OutputStream createPageStream(int pageNumber) throws IOException {
        String fileName = fileNameTemplate.replace("{0}", String.valueOf(pageNumber));
        return new FileOutputStream(Paths.get(outputDir, fileName).toFile());
    }
}
  • fileNameTemplate आपको फ़ाइल नाम में सीधे पेज नंबर एम्बेड करने देता है, जिससे बैच प्रोसेसिंग सरल हो जाती है।
  • यह मेथड प्रत्येक पृष्ठ के लिए एक नया OutputStream रिटर्न करता है, जिससे पहले के पृष्ठ बाद के लिखने में बाधा नहीं बनते।

परिभाषा एंकर: ICreatePageStream एक कॉलबैक इंटरफ़ेस है जो आपको प्रत्येक प्रीव्यू पेज के लिए आउटपुट स्ट्रीम कैसे बनानी है, परिभाषित करने देता है।

प्रीव्यू जनरेशन के बाद पेज स्ट्रीम को कैसे रिलीज़ करें

पेज इमेज लिखे जाने के बाद, लाइब्रेरी IReleasePageStream को कॉल करती है ताकि आप संबंधित आउटपुट स्ट्रीम को बंद और साफ़ कर सकें। इस कॉलबैक को इम्प्लीमेंट करके फ़ाइल हैंडल्स को सुरक्षित रूप से रिलीज़ करें, बफ़र्स को फ्लश करें, और अतिरिक्त लॉगिंग करें। उचित क्लीनअप डिस्क्रिप्टर लीक्स को रोकता है और सुनिश्चित करता है कि बाद के पृष्ठ बिना हस्तक्षेप के प्रोसेस हो सकें।

उचित रिसोर्स क्लीनअप फ़ाइल‑हैंडल लीक्स को रोकता है और JVM को डिस्क्रिप्टर समाप्त होने से बचाता है। लाइब्रेरी के पेज समाप्त संकेत मिलने पर स्ट्रीम्स को बंद करने के लिए IReleasePageStream को इम्प्लीमेंट करें।

public class FeatureReleasePageStream implements IReleasePageStream {
    @Override
    public void releasePageStream(OutputStream stream) throws IOException {
        stream.close();
    }
}

परिभाषा एंकर: IReleasePageStream एक कॉलबैक इंटरफ़ेस है जो आपको पेज‑विशिष्ट आउटपुट रिसोर्सेज को डिस्पोज़ करने के लिए कस्टम लॉजिक परिभाषित करने देता है।

दस्तावेज़ प्रीव्यू कैसे जनरेट करें (दस्तावेज़ को छवि में बदलें)

Watermarker इंस्टेंस पर generatePreview() कॉल करके प्रीव्यू जनरेट करें, जिसमें एक PreviewOptions ऑब्जेक्ट पास करें जो रिज़ॉल्यूशन, इमेज फ़ॉर्मेट और पेज रेंज को परिभाषित करता है। मेथड प्रत्येक पृष्ठ पर इटररेट करता है, आपके स्ट्रीम क्रिएटर्स का उपयोग करके रास्टर इमेज लिखता है, और फिर स्ट्रीम्स को रिलीज़ करता है। यह प्रक्रिया दस्तावेज़ पृष्ठों का प्रतिनिधित्व करने वाली इमेज फ़ाइलों का सेट बनाती है।

Watermarker, FeatureCreatePageStream, और FeatureReleasePageStream तैयार होने पर, आप प्रीव्यू इंजन को इनवोक कर सकते हैं। generatePreview() मेथड प्रत्येक पृष्ठ पर इटररेट करता है, आपके स्ट्रीम क्रिएटर्स को कॉल करता है, इमेज लिखता है, और अंत में स्ट्रीम्स को रिलीज़ करता है।

Watermarker watermarker = new Watermarker("YOUR_DOCUMENT_DIRECTORY/diagram.vdx");
ICreatePageStream createPageStream = new FeatureCreatePageStream("output/previews", "preview_page_{0}.png");
IReleasePageStream releasePageStream = new FeatureReleasePageStream();

PreviewOptions previewOptions = new PreviewOptions();
previewOptions.setResolution(150); // DPI, higher = sharper but larger files
previewOptions.setImageFormat(ImageFormat.Png); // PNG is lossless and web‑friendly

watermarker.generatePreview(previewOptions, createPageStream, releasePageStream);
  • Resolution DPI को नियंत्रित करता है; वेब थंबनेल के लिए 150 DPI एक अच्छा संतुलन है।
  • ImageFormat आपके डाउनस्ट्रीम आवश्यकताओं के अनुसार PNG, JPEG, BMP, या TIFF हो सकता है।
  • मेथड पृष्ठों को क्रमिक रूप से प्रोसेस करता है, इसलिए सैकड़ों पृष्ठों वाले दस्तावेज़ों के लिए भी मेमोरी खपत कम रहती है।

परिभाषा एंकर: generatePreview() वह API कॉल है जो आप द्वारा प्रदान किए गए स्ट्रीम्स का उपयोग करके लोडेड दस्तावेज़ के प्रत्येक पृष्ठ को इमेज में रेंडर करता है।

दस्तावेज़ को छवि में बदलने के व्यावहारिक अनुप्रयोग

Generating image previews opens up many possibilities:

  1. डॉक्यूमेंट ब्राउज़र – PNG थंबनेल का ग्रिड दिखाएँ ताकि उपयोगकर्ता बड़े PDFs को खोले बिना स्किम कर सकें।
  2. सर्च रिज़ल्ट स्निपेट्स – रिचर UI के लिए सर्च इंडेक्स एंट्रीज़ में प्रीव्यू इमेज अटैच करें।
  3. ईमेल अटैचमेंट्स – ईमेल बॉडी में अटैच्ड PDFs का छोटा प्रीव्यू एम्बेड करें।
  4. मोबाइल ऐप्स – पूर्ण PDFs की बजाय 200 KB PNG प्रीव्यू भेजकर बैंडविड्थ कम करें।
  5. कम्प्लायंस पोर्टल्स – ऑडिट ट्रेल्स के लिए कॉन्ट्रैक्ट्स के कानूनी‑आवश्यक वॉटरमार्केड संस्करणों को इमेज के रूप में रेंडर करें।

जब आप java थंबनेल जनरेट करते हैं तो प्रदर्शन संबंधी विचार

When you are dealing with bulk processing, keep these optimisation tips in mind:

  • स्ट्रीम बफ़रिंग – डिस्क I/O को न्यूनतम करने के लिए FileOutputStream को BufferedOutputStream में रैप करें।
  • पैरेलल बैच एक्सीक्यूशन – कई दस्तावेज़ों को एक साथ प्रोसेस करने के लिए Java के ForkJoinPool का उपयोग करें; प्रत्येक टास्क को थ्रेड‑सेफ़्टी मुद्दों से बचने के लिए अपना Watermarker इंस्टेंस बनाना चाहिए।
  • थंबनेल के लिए DPI सीमित करें – अधिकांश UI परिदृश्यों के लिए 72–150 DPI पर्याप्त है; उच्च DPI प्रिंट‑रेडी प्रीव्यू के लिए रखें।
  • लाइसेंस ऑब्जेक्ट्स को पुन: उपयोग करें – प्रति JVM लाइसेंस फ़ाइल को एक बार लोड करने से ओवरहेड कम होता है।
  • मेमोरी मॉनिटर करें – लाइब्रेरी केवल वर्तमान पेज को मेमोरी में रखती है। अत्यधिक बड़े फ़ाइलों के लिए, कभी‑कभी स्पाइक को संभालने हेतु JVM हीप को थोड़ा बढ़ाने पर विचार करें (जैसे -Xmx512m)।

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

लक्षणसंभावित कारणसमाधान
OutOfMemoryError प्रीव्यू जनरेशन के दौरानImageFormat.Jpeg को 300 DPI पर 1000‑पृष्ठ PDF के साथ उपयोग करनाDPI कम करें या कम कलर डेप्थ वाले PNG पर स्विच करें
खाली प्रीव्यू फ़ाइलेंFeatureCreatePageStream हर पृष्ठ के लिए वही FileOutputStream रिटर्न करता हैप्रत्येक pageNumber के लिए नया स्ट्रीम बनाया जाए यह सुनिश्चित करें
प्रीव्यू इमेज घुमा हुआ हैस्रोत PDF में रोटेशन मेटाडेटा है जिसे सम्मानित नहीं किया गयाpreviewOptions.setRotatePages(true) कॉल करें (यदि उपलब्ध हो)
लाइसेंस चेतावनी दिखाई देती हैलाइसेंस फ़ाइल नहीं मिली या पाथ गलत हैWatermarker.setLicense("path/to/license.file") को किसी भी अन्य API कॉल से पहले चलाया गया है, यह सत्यापित करें

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

प्रश्न: क्या मैं पासवर्ड‑सुरक्षित PDFs के लिए प्रीव्यू जनरेट कर सकता हूँ?
उत्तर: हाँ। पासवर्ड को Watermarker कंस्ट्रक्टर में पास करें: new Watermarker("file.pdf", "password")।

प्रश्न: प्रीव्यू आउटपुट के लिए कौन से इमेज फ़ॉर्मेट समर्थित हैं?
उत्तर: PNG, JPEG, BMP, और TIFF उपलब्ध हैं। लॉसलेस थंबनेल के लिए PNG की सिफ़ारिश की जाती है।

प्रश्न: एक कॉल में कितने पृष्ठ प्रोसेस किए जा सकते हैं?
उत्तर: लाइब्रेरी पर कोई कठोर सीमा नहीं है; आप हजारों पृष्ठों वाले दस्तावेज़ का प्रीव्यू ले सकते हैं, केवल स्टोरेज स्पेस और I/O थ्रूपुट द्वारा सीमित।

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

प्रश्न: क्या एकल संयुक्त थंबनेल (जैसे, केवल पहला पृष्ठ) जनरेट करने का तरीका है?
उत्तर: हाँ। previewOptions.setPages(new int[]{1}) सेट करके जनरेशन को पहले पृष्ठ तक सीमित करें।

निष्कर्ष

अब आपके पास GroupDocs.Watermark का उपयोग करके दस्तावेज़ को छवि में बदलें और java थंबनेल जनरेट करें के लिए एक पूर्ण, प्रोडक्शन‑रेडी वर्कफ़्लो है। कस्टम पेज‑स्ट्रीम हैंडलर्स को कॉन्फ़िगर करके आप मेमोरी उपयोग कम रखते हैं, और PreviewOptions को ट्यून करके आप इमेज क्वालिटी और फ़ाइल आकार नियंत्रित करते हैं। ये तकनीकें आपको किसी भी Java‑आधारित एप्लिकेशन—चाहे वह वेब पोर्टल, डेस्कटॉप क्लाइंट, या क्लाउड‑नेटिव माइक्रोसर्विस हो—में तेज़, उच्च‑गुणवत्ता वाले प्रीव्यू एम्बेड करने देती हैं।


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

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

<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-watermark</artifactId>
      <version>24.11</version>
   </dependency>
</dependencies>
import com.groupdocs.watermark.Watermarker;

public class FeatureInitializeWatermarker {
    public static void main(String[] args) {
        String inputDocumentPath = "YOUR_DOCUMENT_DIRECTORY/diagram.vdx";
        
        // Initialize Watermarker with the specified document
        Watermarker watermarker = new Watermarker(inputDocumentPath);
        
        System.out.println("Watermarker initialized.");
    }
}
import java.io.FileOutputStream;
import com.groupdocs.watermark.options.ICreatePageStream;
import java.io.OutputStream;

public class FeatureCreatePageStream implements ICreatePageStream {
    private final String fileNameTemplate;

    public FeatureCreatePageStream(String outputDirectory) {
        this.fileNameTemplate = outputDirectory + "/page%s.png";
    }

    @Override
    public OutputStream createPageStream(int pageNumber) {
        String fileName = String.format(this.fileNameTemplate, pageNumber);
        try {
            return new FileOutputStream(fileName);
        } catch (Exception ex) 
        {
            throw new RuntimeException(ex);
        }
    }
}
import com.groupdocs.watermark.options.IReleasePageStream;
import java.io.OutputStream;

public class FeatureReleasePageStream implements IReleasePageStream {
    @Override
    public void releasePageStream(int pageNumber, OutputStream pageStream) {
        try 
        {
            pageStream.close();
        } catch (Exception ex)
        {
            throw new RuntimeException(ex);
        }
    }
}
import com.groupdocs.watermark.Watermarker;
import com.groupdocs.watermark.options.PreviewOptions;

public class FeatureGenerateDocumentPreview {
    public static void main(String[] args) {
        String inputDocumentPath = "YOUR_DOCUMENT_DIRECTORY/diagram.vdx";
        
        Watermarker watermarker = new Watermarker(inputDocumentPath);
        
        FeatureCreatePageStream createPageStream = new FeatureCreatePageStream("YOUR_OUTPUT_DIRECTORY");
        FeatureReleasePageStream releasePageStream = new FeatureReleasePageStream();
        
        PreviewOptions previewOptions = new PreviewOptions(createPageStream, releasePageStream);
        
        watermarker.generatePreview(previewOptions);
        
        watermarker.close();
    }
}

संबंधित ट्यूटोरियल