2013-08-09 1 views
1

Привет,Как получить исходный идентификатор лотка принтера в Java

Я пытаюсь найти идентификаторы лотка принтера для конкретного принтера. Я искал и нашел много статей на 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

Form-Source ID: 5 sun.print.Win32MediaTray

MP Tray 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

MP Tray 261

Нижняя кассета 1 260

Нижняя кассета 2 259

Lower Cassette 3 258

Lower Cassette 4 257

Выше было то, чего я хочу достичь. Я хочу получить исходный идентификатор принтера, например, 260, 259, 258 и т. Д. Через Java-instade получения 7,8,9 и 10. Возможно ли это в некотором роде?

Спасибо заранее,

С уважением,

Компакт-диск Человек

ответ

1

К вашему выше код просто добавить еще 3 строки. Все, что вам нужно - это распечатать свойство winID из объекта «Win32MediaTray».

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

      } 
     } 
    }