我正在尝试查找特定打印机的打印机托盘 ID。我使用PrintService
、 Media 和MediaTray
. 然而,这并没有为我的要求提供解决方案。如果我运行以下代码,我将得到以下输出。
String printName = "AL-M2010-3D8E02";
AttributeSet aset = new HashAttributeSet();
aset.add(new PrinterName(printName, null));
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, aset);
for (int i = 0; i < services.length; i++) {
PrintService service = services[i];
System.out.println(service);
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
Object o = service.getSupportedAttributeValues(Media.class, flavor, null);
if (o != null && o.getClass().isArray()) {
for (Media media : (Media[]) o) {
if (media instanceof MediaTray) {
System.out.println(media + " ID: " + media.getValue() + "\t" + media.getClass().getName());
}
}
}
}
Win32 打印机:AL-M2010-3D8E02
表单源 ID:5 sun.print.Win32MediaTray
MP 托盘 ID:6 sun.print.Win32MediaTray
下盒式磁带 1 ID:7 sun.print.Win32MediaTray
下盒式磁带 2 ID:8 sun.print.Win32MediaTray
下盒式磁带 3 ID:9 sun.print.Win32MediaTray
下盒式磁带 4 ID:10 sun.print.Win32MediaTray
如果我运行以下 .net 代码,我会得到以下输出。
PrintDocument printDoc = new PrintDocument();
printDoc.PrinterSettings.PrinterName = "AL-M2010-3D8E02";
for (int i = 0; i < printDoc.PrinterSettings.PaperSources.Count; i++)
{
trayDetails.AppendText(printDoc.PrinterSettings.PaperSources[i].SourceName + " " + printDoc.PrinterSettings.PaperSources[i].RawKind.ToString());
trayDetails.AppendText(Environment.NewLine);
}
自动选择 15
多功能托盘 261
下盒式磁带 1 260
下盒式磁带 2 259
下盒式磁带 3 258
下盒式磁带 4 257
以上是我想要实现的。我想通过 Java 获取原始打印机 ID,例如 260、259、258 等,而不是获取 7、8、9 和 10。这在某种程度上可能吗?