2012-06-27 15 views
5

जावा का उपयोग करके, मुझे नेटवर्क प्रिंटर पर प्रिंट करने की आवश्यकता है, जो स्थानीय रूप से स्थापित नहीं है। मुझे केवल प्रिंटर का नाम पता है। सभी ट्यूटोरियल मैंने देखा है की तरह कुछ के साथ शुरू किया:नेटवर्क प्रिंटर पर प्रिंट करने के लिए जावा का उपयोग कैसे करें?

PrintService []services = PrinterJob.lookupPrintServices();

समस्या कोई प्रिंटर स्थापित किया जा सकता है, तो सेवाओं है कि मामले में खाली हो जाएगा। मुझे प्रिंटर नाम सीधे सेट करना होगा, न केवल दृश्य प्रिंटर के माध्यम से गणना करें।

+0

'lookupPrintServices()' के माध्यम से उपलब्ध प्रिंटर ओ/एस में पंजीकृत प्रिंटर सूचीबद्ध करता है और एप्लिकेशन चला रहे उपयोगकर्ता को पंजीकृत करता है। उदाहरण के लिए, यदि विंडोज़ में, आपको यह सुनिश्चित करना होगा कि आप जिस प्रिंटर को चाहते हैं वह पंजीकृत है, जो भी सक्रिय निर्देशिका उपयोगकर्ता ऐप चल रहा है (स्थानीय उपयोगकर्ता, पंजीकृत सेवा इत्यादि) यह एक बार पंजीकरण है। किसी नेटवर्क पर, आप नेटवर्क पर प्रिंटर भी पंजीकृत कर सकते हैं और इसे // सर्वर/प्रिंटरनाम – JoshDM

+0

तक एक्सेस कर सकते हैं मुझे lookupPrintServices() का उपयोग करने की आवश्यकता नहीं है। मुझे // सर्वर/प्रिंटरनाम प्रारूप में प्रिंटर नाम मिल गए हैं। समस्या यह है कि लुकअपप्रिंट सर्विसेज उनमें से कोई भी नहीं देख सकता है और मैं इसे पंजीकृत या इंस्टॉल नहीं कर सकता। .NET में आप ऑब्जेक्ट प्रिंटरसेटिंग में प्रिंटर नाम सेट कर सकते हैं। मैं जानना चाहता हूं, अगर कुछ भी इसी तरह की संभावना जावा में मौजूद है। यह आसान है। मुझे पीडीएफ फ़ाइल मिली है (जो पीडीएफबॉक्स को संभालती है) और प्रिंटर का नाम है और मैं चुपचाप एक्रोबैट खोलने के बिना इसे प्रिंट करना चाहता हूं। मैं सबसे सरल तरीका जानना चाहता हूं। – user1431544

+1

भले ही यह नेटवर्क पर पंजीकृत है, यदि जावा ऐप चलाने वाले डोमेन उपयोगकर्ता के लिए प्रिंटर विंडो नियंत्रण कक्ष में दिखाई नहीं देता है, तो यह जावा प्रिंट के माध्यम से जावा पर दिखाई नहीं देगा। आपके पास नाम और सही पथ हो सकता है, लेकिन यदि यह सर्वर पर पंजीकृत नहीं है तो ऐप चालू है, यह नहीं मिलेगा। – JoshDM

उत्तर

8

जावा एडब्ल्यूटी प्रिंटिंग पथ के माध्यम से प्रिंटर नहीं मिलेगी यदि यह प्रिंटिंग एप्लिकेशन चला रहे विंडोज/सक्रिय निर्देशिका उपयोगकर्ता के लिए पंजीकृत नहीं है। आपको उस उपयोगकर्ता के प्रिंटर के रूप में दिखाई देने के लिए प्रिंटर पथ को विंडोज़ "डिवाइस और प्रिंटर" के माध्यम से पंजीकृत करना होगा। तो आपको उपलब्ध प्रिंटर की सूची देखने के लिए lookupPrintServices चलाएं और उचित सूचीबद्ध नाम से उचित PrintService पुनर्प्राप्त करें।

/** 
* Retrieve the specified Print Service; will return null if not found. 
* @return 
*/ 
public static PrintService findPrintService(String printerName) { 

    PrintService service = null; 

    // Get array of all print services - sort order NOT GUARANTEED! 
    PrintService[] services = PrinterJob.lookupPrintServices(); 

    // Retrieve specified print service from the array 
    for (int index = 0; service == null && index < services.length; index++) { 

     if (services[index].getName().equalsIgnoreCase(printerName)) { 

      service = services[index]; 
     } 
    } 

    // Return the print service 
    return service; 
} 

/** 
* Retrieve a PrinterJob instance set with the PrinterService using the printerName. 
* 
* @return 
* @throws Exception IllegalStateException if expected printer is not found. 
*/ 
public static PrinterJob findPrinterJob(String printerName) throws Exception { 

    // Retrieve the Printer Service 
    PrintService printService = PrintUtility.findPrintService(printerName); 

    // Validate the Printer Service 
    if (printService == null) { 

     throw new IllegalStateException("Unrecognized Printer Service \"" + printerName + '"'); 
    } 

    // Obtain a Printer Job instance. 
    PrinterJob printerJob = PrinterJob.getPrinterJob(); 

    // Set the Print Service. 
    printerJob.setPrintService(printService); 

    // Return Print Job 
    return printerJob; 
} 

/** 
* Printer list does not necessarily refresh if you change the list of 
* printers within the O/S; you can run this to refresh if necessary. 
*/ 
public static void refreshSystemPrinterList() { 

    Class[] classes = PrintServiceLookup.class.getDeclaredClasses(); 

    for (int i = 0; i < classes.length; i++) { 

     if ("javax.print.PrintServiceLookup$Services".equals(classes[i].getName())) { 

      sun.awt.AppContext.getAppContext().remove(classes[i]); 
      break; 
     } 
    } 
} 
+0

तो आप मुझे यह बताने की कोशिश कर रहे हैं कि अनियंत्रित प्रिंटर पर प्रिंट करने का कोई तरीका नहीं है? एक दम बढ़िया। धन्यवाद। – user1431544

+0

आप नेटवर्क प्रिंटर को उस सर्वर पर पंजीकृत करने से क्यों प्रतिबंधित हैं जहां एप्लिकेशन चलता है? यह एक बार का कार्य है। – JoshDM

+0

ईमानदारी से, मुझे नहीं पता। यह ग्राहक नेटवर्क है और उसके लिए इसका कोई कारण है। मुझे पता है कि यह बेकार है, प्रिंट प्रिंटर रजिस्टर एक विकल्प नहीं है। – user1431544

0

मेरे मामले में वहाँ एक प्रमाणीकरण त्रुटि थी, मैं साझा प्रिंटर नहीं मिल सका क्योंकि मैं उन्हें LocalUser खाते के साथ खोज की है, किसी अन्य खाते से या प्रिंटर अनुदान बदलते मैं इसे पा सके।

संबंधित मुद्दे