IronPrint 操作指南 静默打印 如何在 C# 中静默打印文档 Curtis Chau 已更新:2026年3月2日 下载 IronPrint NuGet 下载 免费试用 LLM副本 LLM副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 This article was translated from English: Does it need improvement? Translated View the article in English 静默打印可直接从代码将文档发送至打印机——无需对话框、无需用户交互、不打断流程。 对于批量发票处理、自助终端应用和 Windows 服务后台任务等自动化工作流,取消打印对话框是一项硬性要求。 内置的 System.Drawing.Printing 命名空间虽提供了无交互打印的途径,但其依赖的事件驱动式代码模板在跨团队和跨项目时难以扩展。 IronPrint 将无声打印简化为一次方法调用。 我们安装一个 NuGet 包并调用 Printer.Print() ——该库会在后台处理打印机通信、文档渲染以及与打印队列的交互。 快速入门:静默打印 通过 NuGet 安装 IronPrint:Install-Package IronPrint 在文件中添加 using IronPrint; 调用 Printer.Print("filepath") 将文档发送至默认打印机 传递一个 PrintSettings 对象来控制打印机名称、DPI、份数和纸张配置 当打印操作不应阻塞调用线程时,请使用 Printer.PrintAsync() 使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronPrint PM > Install-Package IronPrint 复制并运行这段代码。 using IronPrint; // Silent print — no dialog, no user interaction Printer.Print("invoice.pdf"); 部署到您的生产环境中进行测试 通过免费试用立即在您的项目中开始使用IronPrint Free 30 Day Trial 最小工作流程(5 个步骤) 安装 IronPrint C# 打印库 调用 Printer.Print("filepath") 进行静默输出 传递一个 PrintSettings 对象以进行自定义配置 使用 Printer.PrintAsync() 实现非阻塞执行 运行该项目以静默打印,不显示任何对话框 .NET 中的静默打印如何工作? .NET 的 System.Drawing.Printing 命名空间中包含一个 StandardPrintController 类,该类可在打印操作期间隐藏状态对话框。 默认情况下,.NET 使用 PrintControllerWithStatusDialog,这会显示"正在打印第 X 页(共 Y 页)"的弹出窗口。切换到 StandardPrintController 可以消除该对话框——但配置成本依然很高。 若要使用原生方法静默打印,我们需创建一个 PrintDocument,附加一个 PrintPage 事件处理程序以将内容绘制到打印图形表面,分配 StandardPrintController,配置 PrinterSettings,并调用 Print()。 这需要为单个文档编写大约 15–25 行配置代码,且每种新的文档类型或格式都需要在 PrintPage 事件中拥有独立的渲染逻辑。 特别是 PDF 渲染功能并未内置于 System.Drawing.Printing 中——我们需要一个独立的 PDF 解析库来提取页面并将其绘制到 Graphics 界面上。 IronPrint 将整个处理流程封装到了静态的 Printer 类中。 Print() 方法接受文件路径或字节数组作为参数,自动检测文件格式,通过相应的引擎进行渲染,并将其发送至默认打印机——整个过程均无需显示对话框。 :path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-print-pdf-and-byte-array.cs using IronPrint; // Print a PDF silently to the default printer Printer.Print("quarterly-report.pdf"); // Print from a byte array (e.g., retrieved from a database or API) byte[] pdfData = File.ReadAllBytes("shipping-label.pdf"); Printer.Print(pdfData); Imports IronPrint ' Print a PDF silently to the default printer Printer.Print("quarterly-report.pdf") ' Print from a byte array (e.g., retrieved from a database or API) Dim pdfData As Byte() = File.ReadAllBytes("shipping-label.pdf") Printer.Print(pdfData) $vbLabelText $csharpLabel Print()方法支持PDF、PNG、TIFF、JPEG、GIF、HTML和BMP文件格式。 我们将文件路径作为字符串或原始文件数据作为 byte[] 传递,IronPrint 会自动确定渲染策略。 如何配置静默输出的打印设置? PrintSettings 类使我们能够完全控制打印任务。 我们配置目标打印机、纸张尺寸、纸张方向、页边距、DPI、颜色模式、复印份数和双面打印行为,然后将设置对象传递给 Printer.Print()。 :path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-print-with-settings.cs using IronPrint; // Configure detailed print settings var settings = new PrintSettings { PrinterName = "HP LaserJet Pro", PaperSize = PaperSize.A4, Orientation = PaperOrientation.Portrait, DPI = 300, NumberOfCopies = 2, Grayscale = false, PaperMargins = new Margins(10, 10, 10, 10) }; // Print with custom settings — still silent, no dialog Printer.Print("monthly-summary.pdf", settings); Imports IronPrint ' Configure detailed print settings Dim settings As New PrintSettings With { .PrinterName = "HP LaserJet Pro", .PaperSize = PaperSize.A4, .Orientation = PaperOrientation.Portrait, .DPI = 300, .NumberOfCopies = 2, .Grayscale = False, .PaperMargins = New Margins(10, 10, 10, 10) } ' Print with custom settings — still silent, no dialog Printer.Print("monthly-summary.pdf", settings) $vbLabelText $csharpLabel 每个属性均对应一个标准的打印队列设置。 DPI 控制输出分辨率 — 300 是商务文档的常见选择,而 150 适用于草稿。 Grayscale 在无需彩色打印时可减少碳粉消耗。 PaperMargins 处的数值以毫米为单位。 如何选择特定的打印机? 我们使用 Printer.GetPrinterNames() 枚举系统上安装的所有打印机,然后将目标打印机名称赋值给 PrintSettings.PrinterName。 :path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-select-specific-printer.cs using IronPrint; // List all available printers List<string> printers = Printer.GetPrinterNames(); foreach (string name in printers) { Console.WriteLine(name); } // Target a specific network printer var settings = new PrintSettings { PrinterName = printers.First(p => p.Contains("LaserJet")) }; Printer.Print("document.pdf", settings); Imports IronPrint ' List all available printers Dim printers As List(Of String) = Printer.GetPrinterNames() For Each name As String In printers Console.WriteLine(name) Next ' Target a specific network printer Dim settings As New PrintSettings With { .PrinterName = printers.First(Function(p) p.Contains("LaserJet")) } Printer.Print("document.pdf", settings) $vbLabelText $csharpLabel 若未指定 PrinterName,IronPrint 将把打印任务发送到操作系统的默认打印机。 在拥有多台打印机的环境(如共享办公室、仓库或打印室)中,通过编程枚举并选择正确的打印机,可避免打印任务被错误路由。 如何批量打印文档? 批量打印遵循简单的循环模式。 我们遍历一组文件路径,并对每个文档调用 Printer.Print()。 由于每次调用均在后台执行,整个批处理过程将不显示任何对话框提示。 :path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-batch-print.cs using IronPrint; string[] invoices = Directory.GetFiles(@"C:\Invoices\Pending", "*.pdf"); var settings = new PrintSettings { PrinterName = "Accounting Printer", NumberOfCopies = 1, Grayscale = true }; int successCount = 0; foreach (string invoice in invoices) { try { Printer.Print(invoice, settings); successCount++; Console.WriteLine($"Printed: {Path.GetFileName(invoice)}"); } catch (Exception ex) { Console.WriteLine($"Failed: {Path.GetFileName(invoice)} — {ex.Message}"); } } Console.WriteLine($"Batch complete: {successCount}/{invoices.Length} documents printed."); Imports IronPrint Dim invoices As String() = Directory.GetFiles("C:\Invoices\Pending", "*.pdf") Dim settings As New PrintSettings With { .PrinterName = "Accounting Printer", .NumberOfCopies = 1, .Grayscale = True } Dim successCount As Integer = 0 For Each invoice As String In invoices Try Printer.Print(invoice, settings) successCount += 1 Console.WriteLine($"Printed: {Path.GetFileName(invoice)}") Catch ex As Exception Console.WriteLine($"Failed: {Path.GetFileName(invoice)} — {ex.Message}") End Try Next Console.WriteLine($"Batch complete: {successCount}/{invoices.Length} documents printed.") $vbLabelText $csharpLabel 将每个 Print() 调用包裹在 try/catch 语句中,可确保单个损坏的文件或打印机超时不会导致整个批处理任务中断。 对于在后台服务中运行的大批量任务,将每个结果记录到数据库或监控系统中,可为运维团队提供可供审查的审计日志。 如何在不阻塞线程的情况下进行异步打印? Printer.PrintAsync() 方法返回一个 Task,使其与 await 模式兼容。 这对用户界面应用程序至关重要——因为阻塞式的打印调用会导致界面冻结,同时也适用于处理并发操作的服务。 :path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-async-print.cs using IronPrint; // Non-blocking silent print await Printer.PrintAsync("report.pdf"); // Async batch printing string[] files = Directory.GetFiles(@"C:\Reports", "*.pdf"); foreach (string file in files) { await Printer.PrintAsync(file); } Imports IronPrint ' Non-blocking silent print Await Printer.PrintAsync("report.pdf") ' Async batch printing Dim files As String() = Directory.GetFiles("C:\Reports", "*.pdf") For Each file As String In files Await Printer.PrintAsync(file) Next $vbLabelText $csharpLabel PrintAsync() 接受与 Print() 相同的参数——文件路径或字节数组,以及一个可选的 PrintSettings 对象。 在高吞吐量场景下,当数十份文档同时排队等待打印时,异步重载可防止线程池资源耗尽。 这遵循了现代 .NET 开发中普遍推荐的基于任务的异步模式。 平台方面有哪些注意事项? IronPrint 支持在桌面和移动平台上的静默打印,但具体行为因操作系统而异。 平台 无声印刷 备注 Windows (7+) 全面支持 无对话框,完全 PrintSettings 控制 macOS (10+) 支持 使用原生 macOS 打印子系统 iOS (11+) 显示的对话框 Print() 仍显示系统打印对话框 Android(API 21+) 显示的对话框 Print() 仍显示系统打印对话框 在移动平台上,受操作系统限制,无法实现真正的静默打印——Printer.Print() 仍会显示原生打印对话框。 对于 Android,在执行任何打印操作之前,必须调用 Printer.Initialize(Android.Content.Context)。 桌面平台(Windows 和 macOS)支持完全无人值守的静默打印,且无任何限制。 这与原生 .NET 打印功能相比如何? 对于正在评估是采用该库还是基于原生 System.Drawing.Printing 命名空间进行开发的工程团队,其权衡因素如下: PDF/UA-1 PDF/UA-2 已发布 2012 2024 基本规格 PDF 1.7(ISO 32000-1) PDF 2.0(ISO 32000-2) 监管覆盖范围 《美国残疾人法案》第508条、《美国残疾人法案》第二章、《欧盟无障碍法案》 与现有法规向前兼容 验证工具 veraPDF、Adobe Acrobat Pro、PAC 2024 veraPDF(支持率不断提高) 表单字段语义 标准 增强型(更丰富的辅助功能元数据) 最适合 当今的大多数项目 需要 PDF 2.0 功能的新系统 原生方案适用于团队已具备文档渲染基础设施的简单场景。 对于需要打印 PDF、图像或 HTML 却没有现成渲染代码的团队,IronPrint 可节省数周的开发时间并免除后续维护工作。 2025年5月版本中推出的打印速度提升30%这一优化,若由内部开发团队实现,将耗费大量工程资源。 下一步 IronPrint 的静默打印主要通过三种核心方法实现:Printer.Print() 用于同步静默输出,Printer.PrintAsync() 用于非阻塞执行,以及 PrintSettings 用于完全控制打印任务。 这些工具共同覆盖了桌面平台上的单文档、批量及并发打印场景。 请查阅 IronPrint 教程以获取更深入的指导,或参阅 Printer 类 API 参考文档以了解完整的方法接口。 打印设置指南涵盖了其他配置选项,例如纸盒选择和平放打印。 立即开始 30天试用,在实际环境中测试静默打印功能——无需信用卡。 准备部署时,请查看起价为 749 美元的许可方案。 如需针对特定部署场景的帮助,请与 Iron Software 工程师联系。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 准备开始了吗? Nuget 下载 38,930 | 版本: 2026.4 刚刚发布 免费试用 免费 NuGet 下载 总下载量:38,930 查看许可证 还在滚动吗? 想快速获得证据? PM > Install-Package IronPrint 运行示例 观看您的文档打到打印机上。 免费 NuGet 下载 总下载量:38,930 查看许可证