【问题标题】:Print to a non default printer in delphi在delphi中打印到非默认打印机
【发布时间】:2013-11-29 01:27:25
【问题描述】:

我想使用 Delphi 将打印作业发送到打印机。理想情况下,我希望能够做到这一点,而无需用户从打印对话框中选择打印机。

我希望能够使用 Windows 默认打印机以外的打印机。

我已尝试按打印机名称设置打印机:

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

但是当我打印时,它会恢复为使用默认打印机

【问题讨论】:

    标签: delphi


    【解决方案1】:

    传递给IndexOf 的名称必须与Printer.Printers 中的名称完全匹配 才能正常工作。如果它们不精确,包括 CASE,IndexOf 将返回 -1,这意味着“使用默认打印机”。

    举个具体的例子,如果实际的打印机名称是HP LaserJethp laserjet 5,使用IndexOf('hp laserjet') 将返回-1。

    如果您没有指定确切的名称,您可以通过迭代列表进行部分匹配。典型的系统不太可能有太多可用的打印机来提高效率。我们有几十个,没关系。

    我们的情况如下:我们的办公室分为三个基本部门(财务、行政和客户服务)。每个都有不同的打印机来保存针式(点阵)标签,但我们有在所有部门运行的应用程序。我们不需要让应用程序知道它在哪个部门运行以选择标签打印机,我们只需给打印机名称包含单词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 在您的uses 子句中,您可以只使用Printers.Printer,并且更改目标平台(VCL Win32/64、FMX 32/64、OSX)将根据您调整uses 子句构建配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多