4

目前正在检索我的机器上安装的默认打印机进行打印。我希望能够选择文件去哪台打印机。这样做的最佳方法是什么?

代码:

 PrintService[] services =
                PrintServiceLookup.lookupPrintServices(psInFormat, null);
        System.out.println("Printer Selected " + services[Printerinx]);

        //PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();

        DocFlavor[] docFalvor = services[Printerinx].getSupportedDocFlavors();
        for (int i = 0; i < docFalvor.length; i++) {
            System.out.println(docFalvor[i].getMimeType());
        }
4

3 回答 3

9

PrintServiceLookup.lookupPrintService()方法提供了一种按名称查找打印机的方法。准备一个HashAttributeSet带有PrinterName属性对象的 a 并将其传递给查找方法。

使用如下代码:

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

使用 CUPS 在 Linux 上工作。

于 2015-10-07T13:28:11.870 回答
5

在下面创建PrintUtility类,将其导入并尝试调用PrintUtility.findPrintService("name_of_my_printer");,如果您知道您的打印机名称;如果您不知道您可以访问哪些打印机,请PrintUtility.getPrinterServiceNameList();要求List包含所有可行的已注册打印机名称。

或者,请参阅我对这个 SO 问题的回答以获取更多详细信息:

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() {}
}
于 2013-02-14T23:50:01.020 回答
-1
int i ;

DocFlavor fl= null;

PrintService printService[]= PrintServiceLookup.lookupPrintServices(fl,null); 

for(i=0;i<printService.length;i++)
{
    System.out.println(printService[i]);

}
于 2018-01-10T09:38:29.037 回答