How do I specify the printer I want to use in Java?

后端 未结 3 1108
情话喂你
情话喂你 2020-12-15 14:13

Currently retrieving the default printer installed on my machine for printing. I want to be able to pick which printer the documents go to. What is the best method of doin

相关标签:
3条回答
  • 2020-12-15 14:55

    Create the PrintUtility class below, import it and try calling PrintUtility.findPrintService("name_of_my_printer"); if you know your printer name; if you don't know what printers you have access to, call PrintUtility.getPrinterServiceNameList(); for a List containing all viable registered printer names.

    Alternately see my answer to this SO question for more details:

    package com.stackoverflow.print;
    
    import java.awt.print.PrinterJob;
    import javax.print.PrintService;
    import java.util.List;
    import java.util.ArrayList;
    
    public final class PrintUtility {
    
        /**
         * Retrieve a Print Service with a name containing the specified PrinterName; will return null if not found.
         * 
         * @return
         */
        public static PrintService findPrintService(String printerName) {
    
            printerName = printerName.toLowerCase();
    
            PrintService service = null;
    
            // Get array of all print services
            PrintService[] services = PrinterJob.lookupPrintServices();
    
            // Retrieve a print service from the array
            for (int index = 0; service == null && index < services.length; index++) {
    
                if (services[index].getName().toLowerCase().indexOf(printerName) >= 0) {
                    service = services[index];
                }
            }
    
            // Return the print service
            return service;
        }
    
        /**
         * Retrieves a List of Printer Service Names.
         * 
         * @return List
         */
        public static List<String> getPrinterServiceNameList() {
    
            // get list of all print services
            PrintService[] services = PrinterJob.lookupPrintServices();
            List<String> list = new ArrayList<String>();
    
            for (int i = 0; i < services.length; i++) {
                list.add(services[i].getName());
            }
    
            return list;
        }
    
        /**
         * Utility class; no construction!
         */
         private PrintUtility() {}
    }
    
    0 讨论(0)
  • 2020-12-15 14:57

    The PrintServiceLookup.lookupPrintService() method provides a way to lookup a printer by name. Prepare a HashAttributeSet with a PrinterName attribute object and pass it to the lookup method.

    Use code like below:

    AttributeSet aset = new HashAttributeSet();
    aset.add(new PrinterName("MyPrinter", null));
    PrintService[] pservices = 
        PrintServiceLookup.lookupPrintServices(null, aset);
    

    Works on Linux with CUPS.

    0 讨论(0)
  • 2020-12-15 15:03
    int i ;
    
    DocFlavor fl= null;
    
    PrintService printService[]= PrintServiceLookup.lookupPrintServices(fl,null); 
    
    for(i=0;i<printService.length;i++)
    {
        System.out.println(printService[i]);
    
    }
    
    0 讨论(0)
提交回复
热议问题