如果解决方案是Windows特有的可以,请尝试WMI4Java。这里是我的情况:
正如你所看到的,我的默认打印机“京瓷FS-1010”是无效的(灰色),因为我简单地切换它关闭。
现在添加到您的Maven POM:
<dependency>
<groupId>com.profesorfalken</groupId>
<artifactId>WMI4Java</artifactId>
<version>1.4.2</version>
</dependency>
然后,它是那么容易,因为此列出各自的状态的所有打印机:
package de.scrum_master.app;
import com.profesorfalken.wmi4java.WMI4Java;
import com.profesorfalken.wmi4java.WMIClass;
import java.util.Arrays;
public class Printer {
public static void main(String[] args) {
System.out.println(
WMI4Java
.get()
.properties(Arrays.asList("Name", "WorkOffline"))
.getRawWMIObjectOutput(WMIClass.WIN32_PRINTER)
);
}
}
控制台日志如下所示:
Name : WEB.DE Club SmartFax
WorkOffline : False
Name : Send To OneNote 2016
WorkOffline : False
Name : Microsoft XPS Document Writer
WorkOffline : False
Name : Microsoft Print to PDF
WorkOffline : False
Name : Kyocera Mita FS-1010 KX
WorkOffline : True
Name : FreePDF
WorkOffline : False
Name : FinePrint
WorkOffline : False
Name : Fax
WorkOffline : False
请注意,WorkOffline
为True
为K yocera打印机。可能这是你想知道的。
而且为了过滤打印机列表现在稍加修改,以便只显示活动打印机:
WMI4Java
.get()
.properties(Arrays.asList("Name", "WorkOffline"))
.filters(Arrays.asList("$_.WorkOffline -eq 0"))
.getRawWMIObjectOutput(WMIClass.WIN32_PRINTER)
更新:有人问我如何让活动打印机的名称列表。好吧,这并不是那么容易,因为我刚刚提交了一个请求,shortcoming in WMI4Java。它使我们能够分析和过滤原始WMI输出,但代码仍然是相当简单:
package de.scrum_master.app;
import com.profesorfalken.wmi4java.WMI4Java;
import com.profesorfalken.wmi4java.WMIClass;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Printer {
public static void main(String[] args) {
String rawOutput = WMI4Java
.get()
.properties(Arrays.asList("Name", "WorkOffline"))
.filters(Arrays.asList("$_.WorkOffline -eq 0"))
.getRawWMIObjectOutput(WMIClass.WIN32_PRINTER);
List<String> printers = Arrays.stream(rawOutput.split("(\r?\n)"))
.filter(line -> line.startsWith("Name"))
.map(line -> line.replaceFirst(".* : ", ""))
.sorted()
.collect(Collectors.toList());
System.out.println(printers);
}
}
控制台输出看起来是这样的:
[Fax, FinePrint, FreePDF, Microsoft Print to PDF, Microsoft XPS Document Writer, Send To OneNote 2016, WEB.DE Club SmartFax]
[this] [http://stackoverflow.com/questions/1387938/how-to-check-printer-is-connected-or-not-to-your-pc-by-java)? – MaxG
这不是很有帮助,只是发送给我一个文档页面,其中我不知道该怎么办...作为一个检查问题添加 – MoisesCol