如何在 C# 中取得印表機名稱

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

了解系統上可用的印表機,是任何將文件送印的 .NET 應用程式常見的先決條件。 無論目標是讓使用者從下拉式選單中選擇印表機,還是自動將列印工作導向特定裝置,透過程式化方式取得印表機名稱都是第一步。

IronPrint 提供一個靜態方法 — Printer.GetPrinterNames() — 該方法會將當前 Windows 電腦上所有已安裝的印表機以 List<string> 的形式傳回。 以下內容涵蓋安裝步驟、同步與非同步資料擷取,以及如何將選定的印表機名稱傳入列印工作。

快速入門:擷取印表機名稱

  1. 透過 NuGet 安裝 IronPrint:Install-Package IronPrint
  2. 在檔案中加入 using IronPrint;
  3. 呼叫 Printer.GetPrinterNames() 以取得 List<string> 列印機名稱
  4. 遍歷清單並顯示或儲存每個名稱
  5. PRINT時將選定的名稱傳遞給 PrintSettings.PrinterName
  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/IronPrint

    PM > Install-Package IronPrint
  2. 請複製並執行此程式碼片段。

    using IronPrint;
    
    // Retrieve every printer installed on this machine
    List<string> printers = Printer.GetPrinterNames();
    
    foreach (var name in printers)
    {
        Console.WriteLine(name);
    }
  3. 部署至您的生產環境進行測試

    立即透過免費試用,在您的專案中開始使用 IronPrint

    arrow pointer

如何列出所有已安裝的印表機名稱?

Printer.GetPrinterNames() 會查詢作業系統,並將所有已註冊的印表機以 List<string> 的形式回傳。 我們呼叫此方法一次,並遍歷其結果:

:path=/static-assets/print/content-code-examples/how-to/retrieve-printer-names/retrieve-printer-names-list-all-printers.cs
using IronPrint;
using System;
using System.Collections.Generic;

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

Console.WriteLine($"Found {printerNames.Count} printer(s):\n");

// Print each printer name
foreach (string name in printerNames)
{
    Console.WriteLine($"  • {name}");
}
Imports IronPrint
Imports System
Imports System.Collections.Generic

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

Console.WriteLine($"Found {printerNames.Count} printer(s):" & vbCrLf)

' Print each printer name
For Each name As String In printerNames
    Console.WriteLine($"  • {name}")
Next
$vbLabelText   $csharpLabel

主控台輸出

找到 3 台印表機:

  • Microsoft Print to PDF
  • HP LaserJet Pro MFP M428
  • OneNote (桌面版)

返回的清單包含本地印表機、網路印表機以及虛擬印表機驅動程式。 每個字串均與"Windows 設定 > 印表機與掃描器"面板中顯示的名稱完全一致,因此可直接用於列印設定的配置

若未安裝印表機,此方法會傳回一個空清單,而非拋出例外。 在向使用者提供選項之前,只需進行一次 printerNames.Co/unt 快速檢查即可。

如何以非同步方式取得印表機名稱?

對於無法阻塞 UI 執行緒的應用場景(例如 WPF、MAUI 或 ASP.NET Web 應用程式),IronPrint 提供 Printer.GetPrinterNamesAsync()。 此方法會傳回 Task<List<string>>,其運作方式與其同步版本完全相同:

:path=/static-assets/print/content-code-examples/how-to/retrieve-printer-names/retrieve-printer-names-async-printer-names.cs
using IronPrint;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

// Retrieve printer names asynchronously
List<string> printerNames = await Printer.GetPrinterNamesAsync();

// Print each printer name
foreach (string name in printerNames)
{
    Console.WriteLine(name);
}
Imports IronPrint
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks

' Retrieve printer names asynchronously
Dim printerNames As List(Of String) = Await Printer.GetPrinterNamesAsync()

' Print each printer name
For Each name As String In printerNames
    Console.WriteLine(name)
Next
$vbLabelText   $csharpLabel

我們 await 像處理其他任何非同步 API 一樣呼叫此方法。 結果與 List<string> 所返回的 GetPrinterNames() 相同,因此無需進行額外的解析或轉換。 此非同步模式可自然地與 async Task 控制器動作及 async void 事件處理常式整合。

如何根據印表機名稱指定特定印表機進行列印?

取得印表機名稱後,我們將其指派給 PrintSettings.PrinterName,並將設定物件傳遞給 Printer.Print()。 這會將文件直接傳送至選定的印表機,而不會顯示對話方塊:

:path=/static-assets/print/content-code-examples/how-to/retrieve-printer-names/retrieve-printer-names-print-to-specific-printer.cs
using IronPrint;
using System.Collections.Generic;

// Retrieve available printers
List<string> printers = Printer.GetPrinterNames();

// Select a printer matching "LaserJet", or fall back to the first available
string targetPrinter = printers.Find(p => p.Contains("LaserJet"))
                       ?? printers[0];

// Configure print settings
PrintSettings settings = new PrintSettings
{
    PrinterName = targetPrinter,
    PaperSize = PaperSize.A4,
    NumberOfCopies = 1
};

// Print the document
Printer.Print("invoice.pdf", settings);
Imports IronPrint
Imports System.Collections.Generic

' Retrieve available printers
Dim printers As List(Of String) = Printer.GetPrinterNames()

' Select a printer matching "LaserJet", or fall back to the first available
Dim targetPrinter As String = printers.Find(Function(p) p.Contains("LaserJet")) _
                       OrElse printers(0)

' Configure print settings
Dim settings As New PrintSettings With {
    .PrinterName = targetPrinter,
    .PaperSize = PaperSize.A4,
    .NumberOfCopies = 1
}

' Print the document
Printer.Print("invoice.pdf", settings)
$vbLabelText   $csharpLabel

PrintSettings 支援其他屬性,例如 GrayscalePaperMargins。 請參閱 PrintSettings API 參考文件及列印設定操作指南中的完整清單。

我們亦會透過 Printer.GetPrinterTrays(printerName) 取得特定印表機的可用紙匣資訊,當列印工作需要從特定紙匣取紙時,此功能便十分實用。

接下來我該怎麼做?

我們涵蓋了四項操作:安裝 IronPrint、使用 GetPrinterNames() 列出所有印表機名稱、使用 GetPrinterNamesAsync() 異步執行相同查詢,以及透過 PrintSettings.PrinterName 將文件路由至特定印表機。

如需進一步閱讀與更深入的範例,請參閱以下資源:

立即取得免費試用授權,在實際環境中測試所有功能;或於準備部署時查看授權選項

常見問題

在 C# 中,最簡單的方法是什麼來取得印表機名稱?

在 C# 中取得印表機名稱最簡單的方法是使用 IronPrint .NET,它讓您只需單一方法呼叫,即可取得已安裝印表機的清單。

我能否使用 IronPrint 以非同步方式擷取印表機名稱?

是的,IronPrint .NET 支援非同步操作,讓您能在不阻塞主執行緒的情況下取得印表機名稱。

是否可以使用 IronPrint 透過印表機名稱指定特定印表機進行列印?

沒問題,IronPrint .NET 允許您指定印表機名稱,因此您可以將文件直接印製到您選擇的任何已安裝印表機上。

IronPrint 是否支援在所有 .NET 平台上檢索印表機名稱?

IronPrint .NET 專為支援各種 .NET 平台而設計,讓您能夠在不同環境中無縫取得印表機名稱。

IronPrint 在網路環境中如何處理印表機名稱?

IronPrint .NET 能從本地及網路印表機中擷取印表機名稱,使其能靈活應用於各種網路配置中。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
Nuget 下載 41,154 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronPrint
執行範例程式,親眼見證您的文件送印。