如何在 C# 中取得印表機名稱
了解系統上可用的印表機,是任何將文件送印的 .NET 應用程式常見的先決條件。 無論目標是讓使用者從下拉式選單中選擇印表機,還是自動將列印工作導向特定裝置,透過程式化方式取得印表機名稱都是第一步。
IronPrint 提供一個靜態方法 - Printer.GetPrinterNames() - 該方法會將當前 Windows 電腦上所有已安裝的印表機以 List<string> 的形式傳回。 以下內容涵蓋安裝步驟、同步與非同步資料擷取,以及如何將選定的印表機名稱傳入列印工作。
- 透過 NuGet 安裝 IronPrint:
Install-Package IronPrint - 在檔案中加入
using IronPrint; - 呼叫
Printer.GetPrinterNames()以取得List<string>列印機名稱 - 遍歷清單並顯示或儲存每個名稱
- PRINT時將選定的名稱傳遞給
PrintSettings.PrinterName
-
1Install IronPrint with NuGet Package Manager
-
2複製並運行這段程式碼片段。
using IronPrint; // Retrieve every printer installed on this machine List<string> printers = Printer.GetPrinterNames(); foreach (var name in printers) { Console.WriteLine(name); }Imports IronPrint ' Retrieve every printer installed on this machine Dim printers As List(Of String) = Printer.GetPrinterNames() For Each name In printers Console.WriteLine(name) Next nameImports IronPrint ' Retrieve every printer installed on this machine Dim printers As List(Of String) = Printer.GetPrinterNames() For Each name In printers Console.WriteLine(name) Next name -
3部署以在您的實時環境中測試
今天就開始在您的專案中使用IronPrint,透過免費試用
簡化工作流程(5 個步驟)
- 安裝 IronPrint C# 程式庫
- 呼叫
Printer.GetPrinterNames() - 遍歷返回的
List<string> - 為
PrintSettings.PrinterName以指定該印表機 - 將已設定的參數傳遞至
Printer.Print()以進行列印
如何列出所有已安裝的印表機名稱?
Printer.GetPrinterNames() 會查詢作業系統,並將所有已註冊的印表機以 List<string> 的形式回傳。 我們呼叫此方法一次,並遍歷其結果:
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}");
}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}")
NextImports 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.Count 快速檢查即可。
如何以非同步方式取得印表機名稱?
對於無法阻塞 UI 執行緒的應用場景(例如 WPF、MAUI 或 ASP.NET Web 應用程式),IronPrint 提供 Printer.GetPrinterNamesAsync()。 此方法會傳回 Task<List<string>>,其運作方式與其同步版本完全相同:
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);
}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)
NextImports 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()。 這會將文件直接傳送至選定的印表機,而不會顯示對話方塊:
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);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)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 可以從本地和網路列印機中檢索列印機名稱,使其在不同的網路配置中使用靈活。
What additional properties can I configure with PrintSettings?
With PrintSettings, you can configure properties like Dpi, PaperSize, PaperOrientation, Grayscale, and PaperMargins.
How do I iterate over printer names in C# using IronPrint?
You can use a foreach loop to iterate over the list returned by Printer.GetPrinterNames(), allowing you to display or store each printer name.
Can IronPrint work with network and virtual printers?
Yes, the list returned by Printer.GetPrinterNames() includes local printers, network printers, and virtual print drivers.
Where can I find more information on printing settings in IronPrint?
You can refer to the [PrintSettings How-To Guide](https://ironsoftware.com/csharp/print/how-to/print-settings/) and the [API Reference](https://ironsoftware.com/csharp/print/object-reference/api/IronPrint.PrintSettings.html) for detailed information.
Does IronPrint provide support for different paper trays?
Yes, you can use Printer.GetPrinterTrays(printerName) to retrieve available paper trays for a given printer.
Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。