在delphi中打印到非默认打印机

 厚宝-Anzx_730 发布于 2023-02-13 20:47

我想使用Delphi将打印作业发送到打印机.理想情况下,我希望能够在不让用户从打印对话框中选择打印机的情况下执行此操作.

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

我试过用打印机名称设置打印机:

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

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

1 个回答
  • 传递给该名称IndexOf必须匹配究竟有什么在Printer.Printers为了工作.如果它们不准确,包括CASE,IndexOf将返回-1,这意味着"使用默认打印机".

    对于特定示例,IndexOf('hp laserjet')如果实际打印机名称为HP LaserJet或,则使用将返回-1 hp laserjet 5.

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

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

    2023-02-13 20:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有