2013-11-29 20 views
5

Tôi muốn gửi lệnh in đến máy in bằng Delphi. Lý tưởng nhất là tôi muốn có thể làm điều này mà không cần người dùng chọn máy in từ hộp thoại in.In bằng máy in không mặc định ở delphi

Tôi muốn có thể sử dụng máy in khác với máy in mặc định của windows.

Tôi đã thử cài đặt máy in bằng tên máy in:

Vcl.Printers.Printer.PrinterIndex := Vcl.Printers.Printer.Printers.IndexOf('My Printer Name'); 

Tuy nhiên khi tôi in, Chinen quay lại sử dụng các máy in mặc định

Trả lời

9

Tên truyền cho IndexOf phải phù hợp chính xác với những gì trong Printer.Printers để hoạt động. Nếu chúng không phải là chính xác, bao gồm CASE, IndexOf sẽ trả về -1, có nghĩa là "sử dụng máy in mặc định".

Ví dụ cụ thể, sử dụng IndexOf('hp laserjet') sẽ trả về -1 nếu tên máy in thực tế là HP LaserJet hoặc hp laserjet 5.

Nếu bạn không chỉ định tên chính xác, bạn có thể thực hiện so khớp từng phần bằng cách lặp lại danh sách. Rất khó có hệ thống điển hình có quá nhiều máy in sẵn có để đạt hiệu quả cao; chúng tôi có một vài chục, và nó là tốt.

Đây là tình huống chúng tôi có: Văn phòng của chúng tôi được chia thành ba bộ phận cơ bản (Tài chính, Quản trị và Dịch vụ khách hàng). Mỗi máy in có một máy in khác nhau chứa các nhãn mã nguồn cấp dữ liệu (dot matrix), nhưng chúng tôi có các ứng dụng chạy trong tất cả các phòng ban. Thay vì có ứng dụng biết bộ phận nào đang chạy để chọn máy in nhãn, chúng tôi chỉ cung cấp tên máy in có chứa từ Labels - Fiscal Labels, Admin Labels, v.v. Sau đó chúng tôi có thể tìm máy in phù hợp với vòng lặp:

function GetLabelPrinterIndex: Integer; 
var 
    i: Integer; 
begin 
    for i := 0 to Printer.Printers.Count - 1 do 
    if AnsiContainsText(Printer.Printers[i], `Labels`) then 
    begin 
     Exit(i); 
    end; 
    Result := -1; 
end; 

Lưu ý: Tôi muốn xóa tiền tố VCL khỏi các tham chiếu của bạn; điều đó có nghĩa là mã của bạn sẽ không có sẵn trên các nền tảng. Nếu bạn chỉ cần đảm bảo rằng Printers nằm trong mệnh đề sử dụng, bạn có thể sử dụng chỉ Printers.Printer và thay đổi nền tảng đích (VCL Win32/64, FMX 32/64, OSX) sẽ điều chỉnh mệnh đề sử dụng cho bạn dựa trên cấu hình xây dựng.

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