2013-06-13 47 views
16

Tôi đang cố hiển thị vị trí máy in trong hộp thoại. Nhưng với sự ngạc nhiên của tôi, không có dịch vụ in nào dường như có thuộc tính vị trí - mặc dù tôi đã xác minh rằng một số máy in của tôi hiển thị vị trí trong bảng điều khiển máy in của cửa sổ.Cách lấy vị trí của máy in

Tôi đã sử dụng mã này để in các vị trí (nó luôn in "null" cho vị trí). Phiên bản Java của tôi là 1.7.0_21:

public class PrintLocation { 

public static void main(String[] argv) { 
    PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null); 
    for (PrintService service : services) { 
     Object location = service.getAttribute(PrinterLocation.class); 
     System.out.println(service.getName() + " - " + location); 
    } 
} 

} 

Điều này không được hỗ trợ/triển khai bởi JRE hoặc tôi có làm điều gì sai ở đây không? Làm cách nào để có được vị trí của máy in?

EDIT: Output trên máy tính của tôi là:

\\srv51\SIR-2725-01_KX_color - null 
\\srv51\SIR-2725-01_KX_sw - null 
Microsoft XPS Document Writer - null 
Microsoft Office Document Image Writer - null 
FreePDF XP - null 

EDIT2: Như đã đề cập, tôi in ra tất cả các thuộc tính:

PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null); 
for (PrintService service : services) { 
    PrintServiceAttributeSet attrs = service.getAttributes(); 
     System.out.println("Service: " + service.getName()); 
     int i = 1; 
     for (Object attr : attrs.toArray()) { 
     System.out.println("Attr #" + i + ": " + attr.getClass().getSimpleName() 
      + ", " + attr); 
     ++i; 
    } 
} 

và tôi đã nhận:

Service: \\srv51\SIR-2725-01_KX_color 
Attr #1: ColorSupported, supported 
Attr #2: PrinterName, \\srv51\SIR-2725-01_KX_color 
Attr #3: QueuedJobCount, 0 
Attr #4: PrinterIsAcceptingJobs, accepting-jobs 
Service: \\srv51\SIR-2725-01_KX_sw 
Attr #1: ColorSupported, supported 
Attr #2: PrinterName, \\srv51\SIR-2725-01_KX_sw 
Attr #3: QueuedJobCount, 0 
Attr #4: PrinterIsAcceptingJobs, accepting-jobs 
Service: Microsoft XPS Document Writer 
Attr #1: ColorSupported, supported 
Attr #2: PrinterName, Microsoft XPS Document Writer 
Attr #3: QueuedJobCount, 0 
Attr #4: PrinterIsAcceptingJobs, accepting-jobs 
Service: Microsoft Office Document Image Writer 
Attr #1: ColorSupported, not-supported 
Attr #2: PrinterName, Microsoft Office Document Image Writer 
Attr #3: QueuedJobCount, 0 
Attr #4: PrinterIsAcceptingJobs, accepting-jobs 
Service: FreePDF XP 
Attr #1: ColorSupported, supported 
Attr #2: PrinterName, FreePDF XP 
Attr #3: QueuedJobCount, 0 
Attr #4: PrinterIsAcceptingJobs, accepting-jobs 

Vì vậy, , hiện không có PrinterLocation cho bất kỳ máy in nào trên máy của tôi.

+0

Thử in ra các thuộc tính sử dụng 'getAttributes()' và xem nếu 'PrinterLocation' là ở đó. – selig

+0

@selig Ý tưởng hay, hóa ra nó thậm chí không có ở đó. – Durandal

Trả lời

2

Từ http://download.java.net/jdk8/docs/api/javax/print/attribute/package-summary.html,

Khi máy in bắt đầu xử lý các tác vụ in, thêm thông tin về công việc trở nên có sẵn, có thể bao gồm: tình trạng công việc (ví dụ như hoàn thành hoặc xếp hàng) và số lượng trang in cho đến nay. Những mẩu thông tin này cũng là các thuộc tính. Các thuộc tính cũng có thể mô tả chính máy in, chẳng hạn như: tên máy in, vị trí máy in và số lượng công việc được xếp hàng đợi.

Không chắc chắn nếu có nghĩa là nó trở nên có sẵn sau khi nó bắt đầu một quá trình hay không

Các vấn đề liên quan