Java Language
जावा प्रिंट सेवा
खोज…
परिचय
जावा प्रिंट सर्विस एपीआई प्रिंट सेवाओं की खोज करने और उनके लिए प्रिंट अनुरोध भेजने के लिए कार्यात्मकता प्रदान करता है।
इसमें 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);