如何在 C# 中使用對話方塊列印 PDF

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

列印對話方塊是標準的作業系統視窗,讓使用者在列印前能選擇印表機、設定份數、選擇頁碼範圍,並調整紙張選項。 對於使用者需要控制文件列印方式與位置的桌面應用程式而言,顯示此對話方塊是預期的行為。

IronPrint 提供一個單一方法 — Printer.ShowPrintDialog() — 該方法會顯示原生列印對話方塊、套用使用者選項,並將文件傳送至指定的印表機。 我們安裝一個 NuGet 套件,並撰寫一行程式碼。

快速入門:透過對話方塊進行列印

  1. 透過 NuGet 安裝 IronPrint:Install-Package IronPrint
  2. using IronPrint; 加入檔案中
  3. 呼叫 Printer.ShowPrintDialog("filepath") 以開啟原生列印對話方塊
  4. (可選) 傳遞 PrintSettings 物件以預先設定對話方塊的預設值
  5. 使用者選擇印表機、份數及選項,然後點擊"列印"
  1. 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronPrint

    PM > Install-Package IronPrint
  2. 複製並運行這段程式碼。

    using IronPrint;
    
    // Display the print dialog and print the document
    Printer.ShowPrintDialog("document.pdf");
  3. 部署到您的生產環境進行測試

    今天就在您的專案中開始使用免費試用IronPrint

    arrow pointer

C# 中的列印對話方塊如何運作?

Printer.ShowPrintDialog() 方法會開啟作業系統的原生列印對話方塊。 使用者會看到完整的列印選項——包括印表機選擇、份數、頁碼範圍、方向及紙張尺寸——並點擊"列印"以傳送列印工作,或點擊"取消"以關閉對話方塊而不進行列印。

在底層實現上,原生 .NET 方法需要建立一個 System.Windows.Forms.PrintDialog 實例,將其與 PrintDocument 建立關聯,處理 PrintPage 事件以將內容繪製至列印圖形表面,檢查 DialogResult,然後呼叫 PrintDocument.Print()。 此設定通常需執行 15 至 25 行程式碼。 此外,它不包含內建的 PDF 或圖像渲染功能——透過原生對話方塊列印 PDF 意味著必須先將 PDF 解析為可繪製的頁面,這需要額外的函式庫。

IronPrint 僅需一次呼叫即可處理整個流程:

:path=/static-assets/print/content-code-examples/how-to/print-with-dialog/print-with-dialog-show-print-dialog-open-and-print.cs
using IronPrint;

// Open the dialog, let the user configure settings, and print
Printer.ShowPrintDialog("quarterly-report.pdf");
Imports IronPrint

' Open the dialog, let the user configure settings, and print
Printer.ShowPrintDialog("quarterly-report.pdf")
$vbLabelText   $csharpLabel

此方法接受檔案路徑作為 string,或原始檔案資料作為 byte[]。 IronPrint 會偵測文件格式,透過適當的引擎進行渲染,並顯示對話方塊。 當使用者確認後,文件將依照其選定的設定進行列印。 文件列印教學將更詳細地引導您了解完整的列印生命週期。

如何預先設定對話方塊設定?

我們可以透過建立 PrintSettings 物件並將其作為第二個參數傳入,在對話方塊開啟前設定預設值。 對話方塊開啟時將預先選取這些值,使用者可直接接受,或覆寫任何設定。

:path=/static-assets/print/content-code-examples/how-to/print-with-dialog/print-with-dialog-preconfigure-dialog-settings.cs
using IronPrint;

// Pre-configure defaults for the dialog
var settings = new PrintSettings
{
    PrinterName = "HP LaserJet Pro",
    PaperSize = PaperSize.A4,
    PaperOrientation = PaperOrientation.Portrait,
    Dpi = 300,
    NumberOfCopies = 2,
    Grayscale = false
};

// Open dialog with pre-filled settings
Printer.ShowPrintDialog("invoice.pdf", settings);
Imports IronPrint

' Pre-configure defaults for the dialog
Dim settings As New PrintSettings With {
    .PrinterName = "HP LaserJet Pro",
    .PaperSize = PaperSize.A4,
    .PaperOrientation = PaperOrientation.Portrait,
    .Dpi = 300,
    .NumberOfCopies = 2,
    .Grayscale = False
}

' Open dialog with pre-filled settings
Printer.ShowPrintDialog("invoice.pdf", settings)
$vbLabelText   $csharpLabel

當應用程式能預先得知可能使用的印表機或紙張格式時,此功能便十分實用。 例如,某銷售點系統若慣常使用特定熱感應印表機列印收據,可預設 PrinterName 為該裝置。使用者仍可在對話方塊中選擇變更設定。

若要查詢系統上可用的印表機,我們呼叫 Printer.GetPrinterNames(),該方法會傳回所有已安裝印表機的 List<string>。 同樣地,Printer.GetPrinterTrays() 會回傳指定印表機可用的紙匣。

可配置屬性的完整清單包含 Flatten(適用於 PDF 表單欄位)以及 Tray。 這份列印設定指南透過程式碼範例,詳細說明了各項屬性。 若未在 PrintSettings 中設定任何屬性,則預設為所選印表機的標準設定。

如何以非同步方式顯示對話方塊?

Printer.ShowPrintDialogAsync() 方法會傳回 Task,使其與 await 相容。 此機制可防止對話方塊阻塞 UI 執行緒——這對於 WPF、MAUI 以及任何因介面凍結而導致使用者體驗不佳的應用程式而言至關重要。

:path=/static-assets/print/content-code-examples/how-to/print-with-dialog/print-with-dialog-show-print-dialog-async.cs
using IronPrint;

// Non-blocking dialog — the UI remains responsive
await Printer.ShowPrintDialogAsync("report.pdf");
Imports IronPrint

' Non-blocking dialog — the UI remains responsive
Await Printer.ShowPrintDialogAsync("report.pdf")
$vbLabelText   $csharpLabel

ShowPrintDialogAsync() 接受與同步版本相同的參數:檔案路徑或位元組陣列,以及一個可選的 PrintSettings 物件。 此非同步模式遵循現代 .NET 開發中普遍採用的"基於 Task 的非同步模式"。

IronPrint 適用於 WinForms、WPF、MAUI 及主控台應用程式。 對話方塊的外觀會根據主機平台和作業系統版本進行調整,因此使用者始終會看到其預期的原生列印視窗。

何時該使用對話式列印,何時該使用靜默列印?

選擇取決於使用者是否需要對列印工作進行控制。

標準 透過對話方塊列印 無聲印刷
使用者互動 使用者選擇印表機、份數、頁碼範圍 無互動 — 立即列印
最適合 桌面應用程式、單次列印、使用者端功能 批次工作、背景服務、資訊站應用程式
印表機選擇 使用者從對話方塊中選擇 透過 PrintSettings 程式化設定
IronPrint 方法 Printer.ShowPrintDialog() Printer.Print()
非同步版本 ShowPrintDialogAsync() PrintAsync()

當使用者在列印前需要驗證或變更設定時,請使用此對話方塊——例如匯報匯出、發票列印,或任何因選錯印表機而導致紙張浪費的情境。 當應用程式完全掌控整個列印工作且無需人工介入時,請使用靜默列印。 列印文件教學範例並列展示了這兩種方法。

"列印對話方塊"支援哪些檔案格式?

Printer.ShowPrintDialog() 支援與靜默列印相同的格式:PDF、PNG、TIFF、JPEG、GIF、HTML 及 BMP。無論格式為何,我們皆傳遞檔案路徑,而 IronPrint 負責處理渲染及與列印佇列的通訊。 亦接受以 byte[] 格式呈現的檔案資料,此格式在文件於記憶體中生成或從資料庫擷取時特別實用。

:path=/static-assets/print/content-code-examples/how-to/print-with-dialog/print-with-dialog-print-dialog-image-and-byte-array.cs
using IronPrint;

// Print an image with the dialog
Printer.ShowPrintDialog("product-photo.png");

// Print from a byte array
byte[] reportData = File.ReadAllBytes("monthly-report.pdf");
Printer.ShowPrintDialog(reportData);
Imports IronPrint

' Print an image with the dialog
Printer.ShowPrintDialog("product-photo.png")

' Print from a byte array
Dim reportData As Byte() = File.ReadAllBytes("monthly-report.pdf")
Printer.ShowPrintDialog(reportData)
$vbLabelText   $csharpLabel

程式碼範例頁面展示了更多特定格式的應用情境。 針對 PDF 特定的工作流程(例如生成 PDF 並立即列印),IronPDF 與 IronPrint 自然能完美搭配。 IronPrint 與 IronPDF 的比較說明了何時該使用哪一款。

後續步驟

透過對話方塊進行列印主要有兩種方法:Printer.ShowPrintDialog() 用於同步呼叫,Printer.ShowPrintDialogAsync() 則用於非阻塞執行。 請使用 PrintSettings 預設預設值,並讓使用者從此處進行調整。 這兩種方法均支援 IronPrint 的所有文件格式,並適用於 WinForms、WPF、MAUI 及主控台專案。

請參閱 IronPrint 教學指南以獲取完整操作流程、Printer 類別 API 參考以了解所有可用方法,或查閱列印設定指南以進行進階設定。 變更紀錄追蹤了近期改進與新功能。

立即開始 30天試用,在實際專案中測試對話框列印功能 — 無需信用卡。 準備好發行時,請查看起價 $749 的授權方案

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

準備好開始了嗎?
Nuget 下載 38,930 | 版本: 2026.4 剛剛發布
Still Scrolling Icon

還在捲動嗎?

想要快速證明? PM > Install-Package IronPrint
執行範例 觀看您的文件打到印表機上。