如何在 C# 中指定印表機名稱

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

IronPrint 的 PrintSettings 類別提供了一個 PrinterName 屬性,用於將列印工作導向特定印表機。 我們將目標印表機的精確名稱作為字串傳入,將已設定的 PrintSettings 物件傳遞給任何 IronPrint 列印方法,文件便會傳送至該印表機,而非系統預設印表機。

本指南將逐步說明如何設定印表機名稱、在執行階段偵測可用印表機,以及將印表機選取與其他列印設定結合使用。

快速入門:指定印表機名稱

  1. using 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 會將該列印工作直接傳送至該印表機的列印佇列。

輸出

發票將直接發送至指定的印表機。 該工作會如靜默列印範例所示,出現在印表機佇列中。

使用 PrinterName 將發票輸出印至"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 將報告輸出印至第一個可用的印表機。

這種"先偵測再PRINT"的模式對於部署在不同機器上的應用程式至關重要。 在單一電腦環境中,硬編碼印表機名稱雖可行,但生產環境的應用程式應查詢可用印表機,並讓使用者自行選擇,或依據命名規範透過程式化方式選取。

印表機選項亦可與紙張尺寸、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 建構函式接受以毫米為單位的數值。 如需查看所有可用屬性的完整清單,請參閱PRINT設定指南

輸出

季度報告將透過指定印表機列印,設定為 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 預設使用作業系統的預設印表機,且列印對話方塊會覆寫程式選取的設定。

"取得印表機名稱"範例提供了一個獨立的偵測程式碼片段,而"PRINT設定"指南則詳細說明了所有可設定的屬性。 Printer 類別的 API 參考文件記載了所有靜態列印方法,而 PrintSettingsAPI 參考文件則列出了每個欄位及其預設值。 若需完整的端到端操作指南,請參閱"列印文件"教學,該教學將所有內容整合在一起。

立即開始 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

常見問題

如何在 C# 中使用 IronPrint 指定印表機名稱?

透過 IronPrint,您可以在 C# 中設定 PrinterName 屬性來指定印表機名稱。這讓您能夠針對特定印表機執行列印任務。

什麼是 IronPrint?

IronPrint 是 Iron Software 推出的一款程式庫,可讓開發人員在 C# 應用程式中管理列印任務,並提供指定印表機名稱及其他列印選項的功能。

如何在 C# 中偵測可用的印表機?

Using IronPrint,您可以輕鬆偵測網路中的可用印表機,方法是存取印表機清單,並為您的列印工作選取所需的 PrinterName。

我可以動態設定 PrinterName 屬性嗎?

是的,透過 IronPrint,您可以在 C# 程式碼中動態設定 PrinterName 屬性,以便在執行階段選擇所需的印表機。

是否可以使用 IronPrint 將文件印至網路印表機?

是的,IronPrint 允許您透過在 C# 應用程式中設定適當的 PrinterName 屬性,來指定並列印至網路印表機。

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
執行範例程式,親眼見證您的文件送印。