java - 如何获取原始打印机托盘 ID

标签 java printing tray

我正在尝试查找特定打印机的打印机托盘 ID。我搜索并发现了很多 Java 中使用 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。这是否可以通过某种方式实现?

最佳答案

在上面的代码中再添加 3 行即可。您所需要的只是从“Win32MediaTray”对象打印 winID 属性。

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());

                 if(media instanceof sun.print.Win32MediaTray){
                      Win32MediaTray  win32Tray = (Win32MediaTray)media;
                      System.out.println(win32Tray.winID);
                  }

            }
        }
    }

关于java - 如何获取原始打印机托盘 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18145036/

相关文章:

JavaFX webview 全局 CSS 深色主题

java - PrintStream 无法正确打印 unicode 字符 (UTF-16)

c# - 如何从可执行文件而不是在 C# 中的托盘图标上打开应用程序主界面

windows-7 - 如何始终*默认*在 Windows 中显示程序托盘图标?

java - 使用 volley 进行网络操作时如何显示 ProgressDialog

java - 远程连接工作时无法在本地从 java 连接到 mysql

java - Mysql 数据库中的数组

rust - 调试打印结构时 Rust 中的 dead_code 警告

java - Hackerrank 说我的输出是错误的,即使输出完全匹配

java - 托盘图标的最佳图像格式