如何在 C# 中擷取印表機名稱
在任何需要列印文件的 .NET 應用程式中,了解系統上可用的印表機是常見的前置條件。 無論目標是讓使用者從下拉選單選取印表機,還是自動將列印工作路由至特定設備,以程式化方式擷取印表機名稱都是第一步。
IronPrint 提供一個靜態方法 — Printer.GetPrinterNames() — 可傳回目前 Windows 機器上所有已安裝的印表機,以 List<string> 形式呈現。 以下涵蓋安裝、同步與非同步擷取,以及如何將選取的印表機名稱傳入列印工作。
快速入門:擷取印表機名稱
- 透過 NuGet 安裝 IronPrint:
Install-Package IronPrint - 將
using IronPrint;加入檔案中 - 呼叫
Printer.GetPrinterNames()以取得印表機名稱的List<string> - 遍歷清單並顯示或儲存每個名稱
- 列印時將選取的名稱傳遞給
PrintSettings.PrinterName
-
使用NuGet套件管理器安裝https://www.nuget.org/packages/IronPrint
PM > Install-Package IronPrint -
複製並運行這段程式碼。
using IronPrint; // Retrieve every printer installed on this machine List<string> printers = Printer.GetPrinterNames(); foreach (var name in printers) { Console.WriteLine(name); } -
部署到您的生產環境進行測試
今天就在您的專案中開始使用免費試用IronPrint
最小工作流程(5 個步驟)
- 安裝 IronPrint C# 程式庫
- 呼叫 `Printer.GetPrinterNames()`
- 遍歷傳回的 `List
` - 將名稱指派給 `PrintSettings.PrinterName` 以定向至該印表機
- 將設定傳遞給 `Printer.Print()` 以列印
如何列出所有已安裝的印表機名稱?
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;
// Get every printer registered on this Windows machine
List<string> printerNames = Printer.GetPrinterNames();
Console.WriteLine($"Found {printerNames.Count} printer(s):\n");
foreach (string name in printerNames)
{
Console.WriteLine($" • {name}");
}
Imports IronPrint
Imports System
Imports System.Collections.Generic
' Get every printer registered on this Windows machine
Dim printerNames As List(Of String) = Printer.GetPrinterNames()
Console.WriteLine($"Found {printerNames.Count} printer(s):" & vbCrLf)
For Each name As String In printerNames
Console.WriteLine($" • {name}")
Next
控制台輸出
Found 3 printer(s):
• Microsoft Print to PDF
• HP LaserJet Pro MFP M428
• OneNote (Desktop)
傳回的清單包含本地印表機、網路印表機和虛擬列印驅動程式。 每個字串與 Windows 設定 > 印表機與掃描器面板中顯示的確切名稱相符,因此可直接用於列印設定配置。
若未安裝任何印表機,此方法會傳回空清單而非拋出例外。 在向使用者呈現選項前,只需快速檢查 printerNames.Count 即可。
如何以非同步方式擷取印表機名稱?
對於不允許阻塞 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;
// Await the async call to avoid blocking the UI thread
List<string> printerNames = await Printer.GetPrinterNamesAsync();
foreach (string name in printerNames)
{
Console.WriteLine(name);
}
Imports IronPrint
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks
' Await the async call to avoid blocking the UI thread
Dim printerNames As List(Of String) = Await Printer.GetPrinterNamesAsync()
For Each name As String In printerNames
Console.WriteLine(name)
Next
我們像其他非同步 API 一樣 await 此呼叫。 結果是 GetPrinterNames() 傳回的相同 List<string>,因此不需要額外的解析或轉換。 此非同步模式可自然整合到 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;
// Step 1 — Retrieve available printers
List<string> printers = Printer.GetPrinterNames();
// Step 2 — Select a printer (first match containing "LaserJet" as an example)
string targetPrinter = printers.Find(p => p.Contains("LaserJet"))
?? printers[0]; // fallback to first available
// Step 3 — Configure print settings
PrintSettings settings = new PrintSettings
{
PrinterName = targetPrinter,
PaperSize = PaperSize.A4,
NumberOfCopies = 1
};
// Step 4 — Print the document
Printer.Print("invoice.pdf", settings);
Imports IronPrint
Imports System.Collections.Generic
' Step 1 — Retrieve available printers
Dim printers As List(Of String) = Printer.GetPrinterNames()
' Step 2 — Select a printer (first match containing "LaserJet" as an example)
Dim targetPrinter As String = printers.Find(Function(p) p.Contains("LaserJet")) _
OrElse printers(0) ' fallback to first available
' Step 3 — Configure print settings
Dim settings As New PrintSettings With {
.PrinterName = targetPrinter,
.PaperSize = PaperSize.A4,
.NumberOfCopies = 1
}
' Step 4 — Print the document
Printer.Print("invoice.pdf", settings)
PrintSettings 支援其他屬性,如 Dpi、PaperOrientation、Grayscale 和 PaperMargins。 請參閱 PrintSettings API 參考和列印設定操作指南中的完整清單。
我們也可以使用 Printer.GetPrinterTrays(printerName) 擷取特定印表機的可用紙匣,這在列印工作需要從特定紙匣取紙時非常有用。
接下來我該怎麼做?
我們涵蓋了四項操作:安裝 IronPrint、使用 GetPrinterNames() 列出所有印表機名稱、使用 GetPrinterNamesAsync() 非同步執行相同查詢,以及透過 PrintSettings.PrinterName 將文件路由至特定印表機。
如需進一步閱讀和更深入的範例,請探索以下資源:
- IronPrint 教學 — 列印文件,提供端到端列印操作指南。
- 列印設定操作指南,用於配置 DPI、邊距、方向等設定。
- Printer 類別 API 參考,提供完整靜態方法清單。
立即取得免費試用授權,在實際環境中測試所有功能;或於準備部署時查看授權選項。

