如何在 C# 中使用對話方塊進行 PRINT

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

IronPrint 提供 Printer.ShowPrintDialog():一個方法,用於開啟原生作業系統的列印對話方塊,擷取使用者選擇的印表機與紙張設定,並將文件送入列印佇列。 安裝一個 NuGet 套件,寫一行程式碼。

列印對話方塊是標準的Windows視窗,讓使用者在執行列印前,可選擇印表機、設定份數、選取頁碼範圍,並調整紙張選項。 主要應用情境是那些需要在執行每項任務前,讓使用者能自行控制設定的桌面應用程式。

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

  1. using 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# 中的 PRINT 對話方塊如何運作?

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

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

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

輸入

傳遞至 ShowPrintDialog 的 quarterly-report.PDF 是一份格式化的企業第三季財務摘要,內含 KPI 指標卡與部門營收表,代表傳送至 PRINT 對話方塊的典型商業文件。

: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 print dialog and print
Printer.ShowPrintDialog("quarterly-report.pdf");
Imports IronPrint

' Open the print dialog and print
Printer.ShowPrintDialog("quarterly-report.pdf")
$vbLabelText   $csharpLabel

輸出

由 ShowPrintDialog 開啟的原生列印對話方塊

由 ShowPrintDialog 開啟的系統原生列印對話方塊,用於列印季度報告。

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

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

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

輸入

預設為 A4 直向、300 DPI 的 invoice.pdf:一份 Professional 帳單,包含明細項目、折扣、稅金及電匯指示,呈現出真實的文件樣貌,其中應用程式已預先知曉所需的紙張尺寸與方向。

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

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

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

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

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

輸出

預設設定的 Windows PRINT 對話方塊

系統預設以 A4 直向模式開啟原生列印對話方塊。

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

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

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

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

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

輸入

以非阻塞方式載入的 report.pdf:一份多章節的 IT 基礎架構與安全報告,屬於長篇文件類型,透過非阻塞對話框呈現,確保在檔案載入期間使用者介面仍能保持響應。

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

// Open the print dialog asynchronously
await Printer.ShowPrintDialogAsync("report.pdf");
Imports IronPrint

' Open the print dialog asynchronously
Await Printer.ShowPrintDialogAsync("report.pdf")
$vbLabelText   $csharpLabel

輸出

透過 ShowPrintDialogAsync 開啟的非同步列印對話方塊

透過 ShowPrintDialogAsync 異步開啟原生列印對話方塊,並透過控制台確認其為非阻塞執行。

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

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

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

當使用者在每次列印任務前需要選擇印表機設定時,請使用此對話方塊; 在無需人工決策的自動化工作流程中,請使用靜默列印功能。

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

報表匯出、發票列印,以及任何因選用錯誤印表機而造成耗材浪費的工作,都是此對話方塊的適用情境。 靜默列印適用於無需在文件之間進行人工決策的自動化工作流程。

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

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

輸入

monthly-report.pdf 被讀取為 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

輸出

對話方塊開啟時的外觀如上例所示。 格式偵測為自動進行:無論傳入檔案路徑或 byte[],IronPrint 都會渲染文件並顯示相同的原生對話方塊。

程式碼範例頁面展示了更多特定格式的應用情境。 針對 PDF 特定工作流程(生成 PDF 並立即列印),IronPDF 與 IronPrint 自然相輔相成。

後續步驟

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

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

立即開始 30天試用,在實際專案中測試對話框列印功能,無需信用卡。 準備發佈時,請參閱自 $999 起提供的授權選項

常見問題

IronPrint 的主要功能是什麼?

IronPrint 讓開發人員能在 C# 應用程式中顯示並設定列印對話方塊,使開發人員能輕鬆地使用預先設定的參數來列印 PDF 檔案和圖片。

如何使用 IronPrint 顯示列印對話方塊?

您可以在 C# 應用程式中使用 IronPrint 的 ShowPrintDialog() 方法來顯示列印對話方塊,該方法提供了一種互動式的方式來設定列印選項。

IronPrint 是否支援非同步列印?

是的,IronPrint 支援非同步列印,這讓您的應用程式在處理列印工作時仍能保持響應性。

我可以使用 IronPrint 預先設定列印設定嗎?

是的,IronPrint 允許您在顯示列印對話方塊之前,預先設定列印參數,例如紙張尺寸、方向及印表機選擇。

是否可以使用 IronPrint 來列印圖片?

IronPrint 支援 PDF 與圖像的列印,為您的 C# 應用程式提供處理各類文件類型的靈活性。

IronPrint 如何提升 C# 中的列印對話方塊體驗?

IronPrint 透過讓開發人員能輕鬆自訂與設定列印參數,並支援同步與非同步操作,從而提升列印對話方塊的使用體驗。

我可以用 IronPrint 列印哪些類型的文件?

透過 IronPrint,您可以直接從 C# 應用程式列印各種文件,包括 PDF 和圖片。

IronPrint 能否整合至現有的 C# 應用程式中?

是的,IronPrint 設計上可輕鬆整合至現有的 C# 應用程式中,提供一種簡單的方式來新增列印對話方塊功能。

IronPrint 為 C# 開發人員帶來哪些優勢?

IronPrint 具備諸多優勢,例如易於整合、可自訂的列印設定、支援非同步列印,以及能列印 PDF 和圖像。

IronPrint 如何處理不同的印表機設定?

IronPrint 允許您配置不同的印表機設定,確保與各種印表機的相容性,並可進行客製化以滿足特定的列印需求。

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