如何在 C# 中指定打印机名称

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPrint 的 PrintSettings 类提供了一个 PrinterName 属性,用于将打印作业定向到特定打印机。 我们将目标打印机的确切名称作为字符串进行赋值,将配置好的 PrintSettings 对象传递给任何 IronPrint 打印方法,文档便会发送到该打印机而非系统默认打印机。

本指南将逐步介绍如何设置打印机名称、在运行时发现可用打印机,以及将打印机选择与其他打印设置相结合。

快速入门:指定打印机名称

  1. 使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronPrint

    PM > Install-Package IronPrint
  2. 复制并运行这段代码。

    using IronPrint;
    
    // Print a document to a specific printer
    Printer.Print("report.pdf", new PrintSettings
    {
        PrinterName = "HP LaserJet Pro M404"
    });
  3. 部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronPrint

    arrow pointer

如何在 C# 中指定打印机名称?

我们通过将目标打印机的名称赋值给 PrinterName 对象上的 PrintSettings 属性来指定目标打印机。 然后我们将该对象传递给 Printer.Print

输入

invoice.pdf 是一份格式化的 A4 尺寸 B2B 发票,包含明细项目和总计,通过 PrintSettings.PrinterName 打印到指定名称的打印机上。

:path=/static-assets/print/content-code-examples/how-to/specify-printer-name/specify-printer-name-set-printer-name.cs
using IronPrint;

// Configure print settings with a target printer
PrintSettings settings = new PrintSettings();
settings.PrinterName = "Microsoft Print to PDF";

// Print to the specified printer
Printer.Print("invoice.pdf", settings);
Imports IronPrint

' Configure print settings with a target printer
Dim settings As New PrintSettings()
settings.PrinterName = "Microsoft Print to PDF"

' Print to the specified printer
Printer.Print("invoice.pdf", settings)
$vbLabelText   $csharpLabel

我们首先实例化 PrintSettings,其初始化时使用 PrinterName = null,即操作系统默认打印机。 随后,我们将 PrinterName 替换为目标打印机的确切名称。 当我们调用 Printer.Print 时,IronPrint 会将打印任务直接发送到该打印机的队列中。

输出

发票被直接发送到命名的打印机。 作业如静默打印示例中所示出现在打印机队列中。

发票输出使用打印机名称打印到"Microsoft Print to PDF"。

请记住两个细节。 首先,打印机名称必须与操作系统报告的完全匹配; 此比较区分大小写。若出现 "hp laserjet" 而非 "HP LaserJet" 之类的不匹配情况,系统将无提示失败或抛出错误。 其次,如果用户通过 ShowPrintDialog 打开PRINT对话框,对话框中的选择将覆盖代码中设置的 PrinterName,从而赋予用户最终控制权。

如果不知道打印机名称,则可以在运行时查询所有已安装的打印机,而不是硬编码该值。

如何查找可用的打印机?

与其硬编码打印机名称,我们可以在运行时使用 Printer.GetPrinterNames 查询系统。 此方法返回一个 List<string>,其中包含该机器上已安装的所有打印机。

输入

report.pdf是一个带有摘要部分和数据表的A4业务报告,打印到第一个动态发现的打印机。

:path=/static-assets/print/content-code-examples/how-to/specify-printer-name/specify-printer-name-discover-printers.cs
using IronPrint;

// List every installed printer
List<string> printers = Printer.GetPrinterNames();

// Print each printer name
foreach (string name in printers)
{
    Console.WriteLine(name);
}

// Print to the first available printer
if (printers.Count > 0)
{
    Printer.Print("report.pdf", new PrintSettings
    {
        PrinterName = printers[0]
    });
}
Imports IronPrint

' List every installed printer
Dim printers As List(Of String) = Printer.GetPrinterNames()

' Print each printer name
For Each name As String In printers
    Console.WriteLine(name)
Next

' Print to the first available printer
If printers.Count > 0 Then
    Printer.Print("report.pdf", New PrintSettings With {
        .PrinterName = printers(0)
    })
End If
$vbLabelText   $csharpLabel

我们调用 GetPrinterNames 来获取操作系统所识别的所有打印机,包括本地打印机、网络打印机以及"Microsoft Print to PDF"等虚拟打印机。随后,我们遍历该列表,并通过索引、名称匹配或应用程序所需的任何自定义逻辑来选择打印机。

输出

报告被发送到第一个可用的打印机。 作业如上所示出现在打印机队列中。

报告输出通过GetPrinterNames打印到第一个可用的打印机。

这种"先发现后打印"的模式对于部署在不同机器上的应用程序至关重要。 在单机环境下,硬编码打印机名称是可行的,但在生产环境中,应用程序应查询可用打印机,并让用户选择,或根据命名约定通过编程方式自动选择。

打印机选择还可以与纸张大小、DPI、复制次数和边距结合在一个配置对象中。

如何将打印机名称与其他设置结合使用?

PrintSettings 类提供了 PrinterName 以及纸张尺寸、方向、DPI、边距、复印份数等属性。 我们将所有配置集中在一个对象中。

输入

quarterly-report.pdf 是一份 A4 格式的季度财务报告,包含 KPI 卡片和图表,通过 PrinterName 结合纸张尺寸、DPI 和复印份数,将其整合为一个 PrintSettings 对象进行打印。

:path=/static-assets/print/content-code-examples/how-to/specify-printer-name/specify-printer-name-combined-settings.cs
using IronPrint;

// Configure full print settings with a named printer
PrintSettings settings = new PrintSettings
{
    PrinterName = "Office Color Printer",
    PaperSize = PaperSize.A4,
    PaperOrientation = PaperOrientation.Portrait,
    Dpi = 300,
    NumberOfCopies = 2,
    PaperMargins = new Margins(15, 15, 15, 15),
    Grayscale = false
};

// Print the quarterly report
Printer.Print("quarterly-report.pdf", settings);
Imports IronPrint

' Configure full print settings with a named printer
Dim settings As New PrintSettings With {
    .PrinterName = "Office Color Printer",
    .PaperSize = PaperSize.A4,
    .PaperOrientation = PaperOrientation.Portrait,
    .Dpi = 300,
    .NumberOfCopies = 2,
    .PaperMargins = New Margins(15, 15, 15, 15),
    .Grayscale = False
}

' Print the quarterly report
Printer.Print("quarterly-report.pdf", settings)
$vbLabelText   $csharpLabel

我们采用对象初始化语法以提高可读性。 PrinterName 将任务路由至"Office 彩色打印机",其余属性则用于控制输出格式。 Dpi 设置为 300 时,可呈现清晰的文本和图形。 PaperMargins 通过 Margins 构造函数接受毫米单位的值。 有关所有可用属性的完整列表,请参阅打印设置指南

输出

季度报告打印使用命名打印机,A4竖版,300 DPI,2份,15毫米边距结合在一个作业中。 作业如上所示出现在打印机队列中。

季度报告输出包括PrinterName、A4、300 DPI、2份和15毫米边距。

IronPrint 会将配置作为整体进行验证,并将合并后的设置作为单个打印任务提交给打印机驱动程序。

不能在打印机发现或打印期间阻塞主线程的应用程序可以使用两个操作的异步等效版本。

如何选择打印机并进行异步打印?

对于不允许阻塞主线程的 WPF 和 WinForms 应用程序,我们使用 Printer.GetPrinterNamesAsyncPrinter.PrintAsync。 两者均返回 Task,从而保持用户界面的响应性。

:path=/static-assets/print/content-code-examples/how-to/specify-printer-name/specify-printer-name-async-printer-select.cs
using IronPrint;
using System.Threading.Tasks;

public class PrintService
{
    public async Task PrintToFirstAvailableAsync(string filePath)
    {
        // Discover available printers asynchronously
        List<string> printers = await Printer.GetPrinterNamesAsync();

        // Exit if no printers are installed
        if (printers.Count == 0)
        {
            Console.WriteLine("No printers found.");
            return;
        }

        // Configure settings for the first available printer
        PrintSettings settings = new PrintSettings
        {
            PrinterName = printers[0],
            Dpi = 300
        };

        // Print asynchronously
        await Printer.PrintAsync(filePath, settings);
    }
}
Imports IronPrint
Imports System.Threading.Tasks

Public Class PrintService
    Public Async Function PrintToFirstAvailableAsync(filePath As String) As Task
        ' Discover available printers asynchronously
        Dim printers As List(Of String) = Await Printer.GetPrinterNamesAsync()

        ' Exit if no printers are installed
        If printers.Count = 0 Then
            Console.WriteLine("No printers found.")
            Return
        End If

        ' Configure settings for the first available printer
        Dim settings As New PrintSettings With {
            .PrinterName = printers(0),
            .Dpi = 300
        }

        ' Print asynchronously
        Await Printer.PrintAsync(filePath, settings)
    End Function
End Class
$vbLabelText   $csharpLabel

此基于类的示例将"发现并打印"逻辑封装为可重用的服务。我们调用 GetPrinterNamesAsync 来获取打印机列表(同时不冻结用户界面),然后将第一个可用的打印机分配给 PrinterNameawait Printer.PrintAsync 调用会异步发送该任务。

输出

发票异步打印到第一个发现的打印机。 作业如上所示出现在打印机队列中。

发票输出异步打印到第一个可用的打印机。

在实际生产环境中,我们可能会用符合命名规范的逻辑替换 printers[0],例如搜索包含"Label"的打印机用于打印运单,或搜索包含"Color"的打印机用于打印品牌文档。 IronPrint 的所有异步方法均接受相同的 PrintSettings 对象,因此 PrinterName 在同步和异步路径中的行为完全一致。

涵盖了静态分配、运行时发现、组合设置和异步工作流程之后,一些相关资源值得收藏。

我的下一个步骤是什么?

我们已介绍了通过 PrintSettings.PrinterName 指定打印机名称的方法,内容涵盖从静态分配到使用 Printer.GetPrinterNames 进行动态运行时发现。 关键要点:打印机名称必须完全匹配(区分大小写),null 默认使用操作系统默认打印机,且打印对话框会覆盖程序化选择。

获取打印机名称示例提供独立的发现片段,而打印设置指南详细介绍每个可配置属性。 打印机类API参考文档记录所有静态打印方法,PrintSettings API参考列出每个字段和默认值。 有关端到端的演练,打印文档教程将一切结合在一起。

开始免费30天试用在实际项目中测试打印机选择。 准备就绪后,请查看起始于 $999 的许可选项

https://ironsoftware.com/csharp/print/object-reference/api/IronPrint.PrintSettings.html https://ironsoftware.com/csharp/print/object-reference/api/IronPrint.PrintSettings.html https://ironsoftware.com/csharp/print/object-reference/api/IronPrint.Printer.html https://ironsoftware.com/csharp/print/how-to/print-settings/ https://ironsoftware.com/csharp/print/object-reference/api/IronPrint.Printer.html

常见问题解答

如何使用IronPrint在C#中指定打印机名称?

通过IronPrint,您可以通过设置PrinterName属性在C#中指定打印机名称。这样可以使您针对打印任务选择特定的打印机。

什么是 IronPrint?

IronPrint是Iron Software开发的一款库,能够让开发人员管理C#应用程序中的打印任务,提供指定打印机名称和其他打印选项的功能。

如何在C#中发现可用的打印机?

使用IronPrint,您可以通过访问打印机列表轻松发现网络中的可用打印机,并为您的打印任务选择所需的PrinterName。

我可以动态设置PrinterName属性吗?

是的,使用IronPrint,您可以在C#代码中动态设置PrinterName属性,以在运行时选择所需的打印机。

使用IronPrint可以打印到网络打印机吗?

是的,IronPrint允许您通过在C#应用程序中设置适当的PrinterName属性来指定和打印到网络打印机。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 41,154 | 版本: 2026.5 just released
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronPrint
运行示例 观看您的文档打到打印机上。