खोज…


परिचय

जावा प्रिंट सर्विस एपीआई प्रिंट सेवाओं की खोज करने और उनके लिए प्रिंट अनुरोध भेजने के लिए कार्यात्मकता प्रदान करता है।

इसमें IETF विनिर्देश, RFC 2911 से इंटरनेट प्रिंटिंग प्रोटोकॉल (IPP) 1.1 में निर्दिष्ट मानक विशेषताओं के आधार पर एक्स्टेंसिबल प्रिंट विशेषताएँ शामिल हैं।

उपलब्ध प्रिंट सेवाओं की खोज

सभी उपलब्ध प्रिंट सेवाओं की खोज के लिए, हम PrintServiceLookup क्लास का उपयोग कर सकते हैं। आइए देखें कैसे:

import javax.print.PrintService;
import javax.print.PrintServiceLookup;

public class DiscoveringAvailablePrintServices {

    public static void main(String[] args) {
        discoverPrintServices();
    }

    public static void discoverPrintServices() {
        PrintService[] allPrintServices = PrintServiceLookup.lookupPrintServices(null, null);
        
        for (Printservice printService : allPrintServices) {
            System.out.println("Print service name: " + printService.getName());
        }
    }

}

यह प्रोग्राम, जब विंडोज वातावरण पर निष्पादित किया जाता है, तो कुछ इस तरह से प्रिंट होगा:

Print service name: Fax
Print service name: Microsoft Print to PDF
Print service name: Microsoft XPS Document Viewer

डिफ़ॉल्ट प्रिंट सेवा की खोज

डिफ़ॉल्ट प्रिंट सेवा की खोज के लिए, हम PrintServiceLookup वर्ग का उपयोग कर सकते हैं। आइए देखें कैसे ::

import javax.print.PrintService;
import javax.print.PrintServiceLookup;

public class DiscoveringDefaultPrintService {

    public static void main(String[] args) {
        discoverDefaultPrintService();
    }

    public static void discoverDefaultPrintService() {
        PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();
        System.out.println("Default print service name: " + defaultPrintService.getName());
    }

}

एक प्रिंट सेवा से एक प्रिंट नौकरी बनाना

एक प्रिंट नौकरी एक विशिष्ट प्रिंट सेवा में कुछ प्रिंट करने का अनुरोध है। इसमें मूल रूप से शामिल हैं:

सही प्रिंट सेवा इंस्टेंस लेने के बाद, हम प्रिंट जॉब के निर्माण का अनुरोध कर सकते हैं:

DocPrintJob printJob = printService.createPrintJob();

DocPrintJob इंटरफ़ेस हमें print विधि प्रदान करता है:

printJob.print(doc, pras);

doc तर्क एक Doc : जो डेटा मुद्रित किया जाएगा।

और pras तर्क एक है PrintRequestAttributeSet का एक सेट: इंटरफ़ेस PrintRequestAttribute । प्रिंट अनुरोध विशेषताओं के उदाहरण हैं:

  • प्रतियों की राशि (1, 2 आदि),
  • अभिविन्यास (चित्र या परिदृश्य)
  • गुण (मोनोक्रोम, रंग)
  • गुणवत्ता (ड्राफ्ट, सामान्य, उच्च)
  • पक्ष (एक तरफा, दो तरफा आदि)
  • और इसी तरह...

प्रिंट विधि PrintException को फेंक सकती है।

उस डॉक का निर्माण किया जाएगा जो मुद्रित किया जाएगा

Doc एक इंटरफ़ेस है और Java Print Service API एक सरल कार्यान्वयन प्रदान करता है जिसे SimpleDoc कहा जाता है।

प्रत्येक Doc उदाहरण मूल रूप से दो पहलुओं से बना होता है:

  • प्रिंट डेटा सामग्री स्वयं (एक ई-मेल, एक छवि, एक दस्तावेज़ आदि)
  • प्रिंट डेटा प्रारूप, जिसे DocFlavor (MIME प्रकार + प्रतिनिधित्व वर्ग) कहा जाता है।

Doc ऑब्जेक्ट बनाने से पहले, हमें अपने दस्तावेज़ को कहीं से लोड करना होगा। उदाहरण में, हम डिस्क से एक विशिष्ट फ़ाइल लोड करेंगे:

FileInputStream pdfFileInputStream = new FileInputStream("something.pdf");

तो अब, हमें एक DocFlavor चुनना है जो हमारी सामग्री से मेल खाता है। DocFlavor वर्ग में सबसे सामान्य प्रकार के डेटा का प्रतिनिधित्व करने के लिए स्थिरांक का एक समूह होता है। आइए INPUT_STREAM.PDF चुनें:

DocFlavor pdfDocFlavor = DocFlavor.INPUT_STREAM.PDF;

अब, हम SimpleDoc का एक नया उदाहरण बना सकते हैं:

Doc doc = new SimpleDoc(pdfFileInputStream, pdfDocFlavor , null);

doc ऑब्जेक्ट को अब प्रिंट जॉब रिक्वेस्ट पर भेजा जा सकता है ( प्रिंट सेवा से प्रिंट जॉब बनाना देखें)।

प्रिंट अनुरोध विशेषताओं को परिभाषित करना

कभी-कभी हमें प्रिंट अनुरोध के कुछ पहलुओं को निर्धारित करने की आवश्यकता होती है। हम उन्हें विशेषता कहेंगे।

प्रिंट अनुरोध विशेषताओं के उदाहरण हैं:

  • प्रतियों की राशि (1, 2 आदि),
  • अभिविन्यास (चित्र या परिदृश्य)
  • गुण (मोनोक्रोम, रंग)
  • गुणवत्ता (ड्राफ्ट, सामान्य, उच्च)
  • पक्ष (एक तरफा, दो तरफा आदि)
  • और इसी तरह...

उनमें से किसी एक को चुनने से पहले और प्रत्येक के लिए कौन सा मूल्य होगा, पहले हमें विशेषताओं का एक सेट बनाने की आवश्यकता है:

PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();

अब हम उन्हें जोड़ सकते हैं। कुछ उदाहरण निम्न हैं:

pras.add(new Copies(5));
pras.add(MediaSize.ISO_A4);
pras.add(OrientationRequested.PORTRAIT);
pras.add(PrintQuality.NORMAL);

अब pras ऑब्जेक्ट को प्रिंट जॉब रिक्वेस्ट पर भेजा जा सकता है ( प्रिंट सर्विस से प्रिंट जॉब pras )।

प्रिंट जॉब रिक्वेस्ट स्टेटस बदलने की बात सुनकर

अधिकांश मुद्रण ग्राहकों के लिए, यह जानने के लिए अत्यंत उपयोगी है कि क्या कोई प्रिंट कार्य समाप्त या विफल हो गया है।

जावा प्रिंट सर्विस एपीआई इन परिदृश्यों के बारे में सूचित करने के लिए कुछ कार्यक्षमता प्रदान करता है। हमें बस इतना करना है:

  • PrintJobListener इंटरफ़ेस और के लिए एक कार्यान्वयन प्रदान करते हैं
  • प्रिंट कार्य पर इस कार्यान्वयन को पंजीकृत करें।

जब प्रिंट जॉब की स्थिति बदलती है, तो हमें सूचित किया जाएगा। हम कुछ भी कर सकते हैं, उदाहरण के लिए:

  • उपयोगकर्ता इंटरफ़ेस अपडेट करें,
  • एक और व्यवसाय प्रक्रिया शुरू करें,
  • डेटाबेस में कुछ रिकॉर्ड करें,
  • या बस इसे लॉग इन करें।

उदाहरण bellow में, हम हर प्रिंट जॉब स्थिति परिवर्तन को लॉग करेंगे:

import javax.print.event.PrintJobEvent;
import javax.print.event.PrintJobListener;

public class LoggerPrintJobListener implements PrintJobListener {

    // Your favorite Logger class goes here!
    private static final Logger LOG = Logger.getLogger(LoggerPrintJobListener.class);


    public void printDataTransferCompleted(PrintJobEvent pje) {
        LOG.info("Print data transfer completed ;) ");
    }

    public void printJobCompleted(PrintJobEvent pje) {
        LOG.info("Print job completed =) ");
    }

    public void printJobFailed(PrintJobEvent pje) {
        LOG.info("Print job failed =( ");
    }

    public void printJobCanceled(PrintJobEvent pje) {
        LOG.info("Print job canceled :| ");
    }

    public void printJobNoMoreEvents(PrintJobEvent pje) {
        LOG.info("No more events to the job ");
    }

    public void printJobRequiresAttention(PrintJobEvent pje) {
        LOG.info("Print job requires attention :O ");
    }
}

अंत में, हम प्रिंट कार्य पर अपने प्रिंट जॉब श्रोता कार्यान्वयन को प्रिंट अनुरोध से पहले ही जोड़ सकते हैं, निम्नानुसार:

DocPrintJob printJob = printService.createPrintJob();

printJob.addPrintJobListener(new LoggerPrintJobListener());

printJob.print(doc, pras);

PrintJobEvent pje तर्क

ध्यान दें कि हर विधि में PrintJobEvent pje तर्क है। हम इस उदाहरण में इसका उपयोग सादगी के उद्देश्य से नहीं करते हैं, लेकिन आप इसका उपयोग स्थिति का पता लगाने के लिए कर सकते हैं। उदाहरण के लिए:

pje.getPrintJob().getAttributes();

एक PrintJobAttributeSet ऑब्जेक्ट इंस्टेंस PrintJobAttributeSet और आप उन्हें प्रत्येक प्रकार से चला सकते हैं।


उसी लक्ष्य को प्राप्त करने का दूसरा तरीका

समान लक्ष्य को प्राप्त करने का एक अन्य विकल्प PrintJobAdapter वर्ग का विस्तार कर PrintJobAdapter , जैसा कि नाम कहता है, PrintJobListener लिए एक एडाप्टर है। इंटरफ़ेस को लागू करना हम अनिवार्य रूप से उन सभी को लागू करना है। इस तरह से इसका लाभ हमें केवल उन तरीकों को ओवरराइड करने की आवश्यकता है जो हम चाहते हैं। आइए देखें कि यह कैसे काम करता है:

import javax.print.event.PrintJobEvent;
import javax.print.event.PrintJobAdapter;

public class LoggerPrintJobAdapter extends PrintJobAdapter {

    // Your favorite Logger class goes here!
    private static final Logger LOG = Logger.getLogger(LoggerPrintJobAdapter.class);

    public void printJobCompleted(PrintJobEvent pje) {
        LOG.info("Print job completed =) ");
    }

    public void printJobFailed(PrintJobEvent pje) {
        LOG.info("Print job failed =( ");
    }
}

ध्यान दें कि हम केवल कुछ विशिष्ट तरीकों को ओवरराइड करते हैं।

इंटरफ़ेस PrintJobListener लागू करने वाले उदाहरण में उसी तरह, हम प्रिंट करने के लिए भेजने से पहले श्रोता को प्रिंट कार्य में जोड़ते हैं:

printJob.addPrintJobListener(new LoggerPrintJobAdapter());

printJob.print(doc, pras);


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow