我想使用 Delphi 将打印作业发送到打印机。理想情况下,我希望能够在不让用户从打印对话框中选择打印机的情况下执行此操作。
我希望能够使用 Windows 默认打印机以外的打印机。
我尝试通过打印机名称设置打印机:
Vcl.Printers.Printer.PrinterIndex := Vcl.Printers.Printer.Printers.IndexOf('My Printer Name');
但是,当我打印时,它会恢复为使用默认打印机
名称传递给IndexOf
必须匹配exactly与里面的东西Printer.Printers
为了工作。如果他们不是exact,包括案例,IndexOf
将返回-1
,这意味着“使用默认打印机”。
对于一个具体的例子,使用IndexOf('hp laserjet')
如果实际打印机名称是,则返回 -1HP LaserJet
or hp laserjet 5
.
如果您没有指定确切的名称,则可以通过迭代列表来进行部分匹配。典型的系统不太可能有太多可用的打印机,因此无法提高效率;我们有几十个,没关系。
我们的情况是这样的:我们的办公室分为三个基本部门(财务、行政和客户服务)。每个部门都有不同的打印机来打印针式送纸(点阵)标签,但我们拥有在所有部门运行的应用程序。我们不需要让应用程序知道它正在哪个部门运行来选择标签打印机,而是只需为打印机提供包含单词的名称Labels
- Fiscal Labels
, Admin 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)将根据构建配置调整使用子句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)