如何在 C# 中取得印表機名稱
了解系統上可用的印表機,是任何將文件送印的 .NET 應用程式常見的先決條件。 無論目標是讓使用者從下拉式選單中選擇印表機,還是自動將列印工作導向特定裝置,透過程式化方式取得印表機名稱都是第一步。
IronPrint 提供一個靜態方法 — Printer.GetPrinterNames() — 該方法會將當前 Windows 電腦上所有已安裝的印表機以 List<string> 的形式傳回。 以下內容涵蓋安裝步驟、同步與非同步資料擷取,以及如何將選定的印表機名稱傳入列印工作。
快速入門:擷取印表機名稱
- 透過 NuGet 安裝 IronPrint:
Install-Package IronPrint - 在檔案中加入
using IronPrint; - 呼叫
Printer.GetPrinterNames()以取得List<string>列印機名稱 - 遍歷清單並顯示或儲存每個名稱
- PRINT時將選定的名稱傳遞給
PrintSettings.PrinterName
-
using 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<string> - 為
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;
// 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
主控台輸出
找到 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
我們 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)
PrintSettings 支援其他屬性,例如 Grayscale 及 PaperMargins。 請參閱 PrintSettings API 參考文件及列印設定操作指南中的完整清單。
我們亦會透過 Printer.GetPrinterTrays(printerName) 取得特定印表機的可用紙匣資訊,當列印工作需要從特定紙匣取紙時,此功能便十分實用。
接下來我該怎麼做?
我們涵蓋了四項操作:安裝 IronPrint、使用 GetPrinterNames() 列出所有印表機名稱、使用 GetPrinterNamesAsync() 異步執行相同查詢,以及透過 PrintSettings.PrinterName 將文件路由至特定印表機。
如需進一步閱讀與更深入的範例,請參閱以下資源:
- IronPrint 教學 — 文件列印,提供端到端的列印操作指南。
- 《PrintSettings 操作指南》:說明如何設定 DPI、邊距、紙張方向等設定。
- 請參閱 Printer 類別 API 參考以獲取靜態方法的完整清單。
立即取得免費試用授權,在實際環境中測試所有功能;或於準備部署時查看授權選項。
常見問題
在 C# 中,最簡單的方法是什麼來取得印表機名稱?
在 C# 中取得印表機名稱最簡單的方法是使用 IronPrint .NET,它讓您只需單一方法呼叫,即可取得已安裝印表機的清單。
我能否使用 IronPrint 以非同步方式擷取印表機名稱?
是的,IronPrint .NET 支援非同步操作,讓您能在不阻塞主執行緒的情況下取得印表機名稱。
是否可以使用 IronPrint 透過印表機名稱指定特定印表機進行列印?
沒問題,IronPrint .NET 允許您指定印表機名稱,因此您可以將文件直接印製到您選擇的任何已安裝印表機上。
IronPrint 是否支援在所有 .NET 平台上檢索印表機名稱?
IronPrint .NET 專為支援各種 .NET 平台而設計,讓您能夠在不同環境中無縫取得印表機名稱。
IronPrint 在網路環境中如何處理印表機名稱?
IronPrint .NET 能從本地及網路印表機中擷取印表機名稱,使其能靈活應用於各種網路配置中。

