2013-11-29 147 views
5

我想使用Delphi將打印作業發送到打印機。理想情況下,我希望能夠在沒有用戶從打印對話框中選擇打印機的情況下執行此操作。在delphi中打印到非默認打印機

我希望能夠使用Windows默認打印機以外的打印機。

我已經嘗試設置打印機名稱打印機:

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

但是當我打印時,將恢復使用默認打印機

回答

9

名稱傳遞給IndexOf必須究竟什麼比賽在Printer.Printers爲了工作。如果他們不是確切,包括CASE,IndexOf將返回-1,這意味着「使用默認打印機」。

對於特定示例,如果實際打印機名稱爲HP LaserJethp laserjet 5,則使用IndexOf('hp laserjet')將返回-1。

如果您沒有指定確切的名稱,可以通過迭代列表進行部分匹配。典型的系統不太可能有太多的打印機可用,因此效率很高;我們有幾十個,沒關係。

以下是我們的情況:我們的辦公室分爲三個基本部門(財務部門,管理部門和客戶服務部門)。每臺打印機都有一個支持pin-feed(點陣)標籤的打印機,但我們有可在所有部門運行的應用程序。相反,具有應用程序知道它正在運行哪個部門在選擇標籤打印機,我們只是給包含單詞Labels打印機的名稱 - Fiscal LabelsAdmin Labels,等等。然後,我們可以找到一個循環合適的打印機:

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; 

作爲說明:我會從您的參考中刪除VCL前綴;這意味着你的代碼將不能跨平臺使用。如果您只確保Printers位於您的使用條款中,則您只能使用Printers.Printer,並且更改目標平臺(VCL Win32/64,FMX 32/64,OSX)將根據構建配置爲您調整使用條款。

相關問題