1

特定のプリンターのプリンター トレイ ID を見つけようとしています。、メディアPrintService、および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

上記は私が達成したいことです。7、8、9、および 10 を取得する代わりに、Java を介して 260、259、258 などの生のプリンター ID を取得したいのですが、これは何らかの方法で可能ですか?

4

1 に答える 1

1

上記のコードにさらに 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);
                  }

            }
        }
    }
于 2014-06-13T13:42:10.873 に答える