用Java设置默认打印机?

时间:2017-12-19 12:33:57

标签: java

我正在开发一个Java Web应用程序(将在Windows机器上运行),其中需要创建和自动打印PDF。我对创建方进行了排序,以下内容适用于打印到默认打印机:

     Desktop desktop = null
     if (Desktop.isDesktopSupported()) {
        desktop = Desktop.getDesktop()
        desktop.print(file)
     }

但是有没有办法从Java实际设置默认打印机?用户可以在另一个应用程序中更改默认打印机,我必须防范它。

[关于'可能的重复',不,这不回答问题。这里的要求是在没有用户干预的情况下自动打印,并且提供的早期答案涉及向用户呈现打印对话框。]

2 个答案:

答案 0 :(得分:2)

您无法设置操作系统设置中定义的默认打印机,但可以选择用于打印文档的打印机服务。

type
如果您将PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null); null作为参数传递,

将返回所有打印机服务(物理为虚拟打印机)。

  

找到能够打印指定DocFlavor的打印服务。

     

<强>参数

     

味道要打印的味道。如果为null,则不使用此约束。

     

属性打印服务必须支持的属性。如果为null,则不使用此约束。

     

<强>返回

     

表示打印服务的匹配null对象的数组   支持指定的flavor属性。如果没有服务匹配,   数组是零长度。

然后迭代它,直到找到合适的打印机并打印您的文档:

PrintService

答案 1 :(得分:0)

我做了一个变通办法来设置操作系统默认打印机。这个适用于Windows,它基本上执行cmd命令,该命令会在执行打印代码之前设置默认打印机:

Desktop desktop = null
if (Desktop.isDesktopSupported()) {
desktop = Desktop.getDesktop()
    desktop.print(file)
 }

这是我的职能:

public static boolean setDefaultPrinter(String printerName) {
    String defaultPrinterSetter = "wmic printer where name='"+ printerName +"' call setdefaultprinter";
    try {
        setDefaultPrinterProcess = Runtime.getRuntime().exec("cmd /c start cmd.exe /C " + defaultPrinterSetter);
        return true;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

您需要做的就是将打印机名称传递给此函数,它将成为默认打印机。您可以使用davidxxx的答案来获取所有可用的打印机名称。