我正在开发一个Java Web应用程序(将在Windows机器上运行),其中需要创建和自动打印PDF。我对创建方进行了排序,以下内容适用于打印到默认打印机:
Desktop desktop = null
if (Desktop.isDesktopSupported()) {
desktop = Desktop.getDesktop()
desktop.print(file)
}
但是有没有办法从Java实际设置默认打印机?用户可以在另一个应用程序中更改默认打印机,我必须防范它。
[关于'可能的重复',不,这不回答问题。这里的要求是在没有用户干预的情况下自动打印,并且提供的早期答案涉及向用户呈现打印对话框。]
答案 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的答案来获取所有可用的打印机名称。