使用IRONPDF 如何在 ASP.NET 中以編程方式打印 PDF 文件 Curtis Chau 發表日期:10月 27, 2025 Download IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article ASP .NET 列印 PDF 文件的任務通常涉及開發人員經常遇到的獨特挑戰。 無論您是為發票、報告還是裝運標籤生成 PDF 文件,實現可靠的列印功能需要導航伺服器-客戶端架構的複雜性。 In this article, we'll show you how to handle PDF printing tasks using IronPDF's powerful PDF library for .NET. 理解挑戰 傳統的桌面應用程式可以直接訪問默認印表機,但 ASP.NET Core 應用程式在列印 PDF 文件時面臨多個障礙: // This fails in ASP.NET - wrong approach Process.Start(@"C:\Files\document.pdf"); // Works locally, crashes on server // This fails in ASP.NET - wrong approach Process.Start(@"C:\Files\document.pdf"); // Works locally, crashes on server IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 上面的代碼展示了一個常見的錯誤。 伺服器環境缺乏直接印表機訪問,系統因 IIS 權限限制而拋出錯誤。 另一件需要記住的是,Web 應用程式必須有效地處理伺服器端和客戶端列印場景。 開始使用 IronPDF IronPDF為生成 PDF 文件和列印它們提供了一個完整的 .NET 核心解決方案,無需像 Adobe Reader 這樣的外部依賴。 讓我們使用 NuGet 安裝 IronPDF 包: Install-Package IronPdf 此 .NET 庫可在操作系統之間無縫工作,消除了困擾其他庫的兼容性問題。 這個工具在 Microsoft Windows 和其他操作系統環境中運行良好。 使用默認印表機在伺服器端創建和列印 PDF 文檔 這是如何從 HTML 標記生成並從您的 ASP.NET 控制器列印 PDF 文件的方法: using IronPdf; using Microsoft.AspNetCore.Mvc; using System.Drawing; public class PdfController : Controller { public IActionResult Index() { // Initialize the renderer var renderer = new ChromePdfRenderer(); // Configure print-optimized settings renderer.RenderingOptions.PrintHtmlBackgrounds = true; renderer.RenderingOptions.MarginBottom = 10; renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; // Generate PDF from HTML var pdf = renderer.RenderHtmlAsPdf("<h1>Invoice</h1><p>Total: $749</p>"); // Print to default printer pdf.Print(); return Ok("Document sent to printer"); } } using IronPdf; using Microsoft.AspNetCore.Mvc; using System.Drawing; public class PdfController : Controller { public IActionResult Index() { // Initialize the renderer var renderer = new ChromePdfRenderer(); // Configure print-optimized settings renderer.RenderingOptions.PrintHtmlBackgrounds = true; renderer.RenderingOptions.MarginBottom = 10; renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; // Generate PDF from HTML var pdf = renderer.RenderHtmlAsPdf("<h1>Invoice</h1><p>Total: $749</p>"); // Print to default printer pdf.Print(); return Ok("Document sent to printer"); } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel ChromePdfRenderer 在轉換時保留了 CSS 樣式和字體大小格式。 此示例顯示了不需要用戶干預的默認印表機的基本列印。 輸出 網絡印表機配置 針對需要特定印表機路由的企業環境: public IActionResult PrintToNetworkPrinter(string filePath) { // Load existing PDF file var pdfDocument = PdfDocument.FromFile(filePath); // Get print document for advanced settings var printDocument = pdfDocument.GetPrintDocument(); // Specify network printer printDocument.PrinterSettings.PrinterName = @"\\server\printer"; printDocument.PrinterSettings.Copies = 2; // Configure page settings printDocument.DefaultPageSettings.Landscape = false; var renderer = printDocument.PrinterSettings.PrinterResolution; // Execute print printDocument.Print(); return Json(new { success = true }); } public IActionResult PrintToNetworkPrinter(string filePath) { // Load existing PDF file var pdfDocument = PdfDocument.FromFile(filePath); // Get print document for advanced settings var printDocument = pdfDocument.GetPrintDocument(); // Specify network printer printDocument.PrinterSettings.PrinterName = @"\\server\printer"; printDocument.PrinterSettings.Copies = 2; // Configure page settings printDocument.DefaultPageSettings.Landscape = false; var renderer = printDocument.PrinterSettings.PrinterResolution; // Execute print printDocument.Print(); return Json(new { success = true }); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 這種方法提供了對印表機設置的完全控制,包括紙張格式和分辨率,這對於正確的圖形和布局至關重要。 輸出 列印確認 客戶端列印策略 由於瀏覽器限制直接訪问印表機,通过提供 PDF 文件下载来实现客户端列印: public IActionResult GetRawPrintablePdf() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(GetInvoiceHtml()); // This header tells the browser to display the file inline. // We use IHeaderDictionary indexer to prevent ArgumentException. **HttpContext context**.Response.Headers["Content-Disposition"] = "inline; filename=invoice.pdf"; return File(pdf.BinaryData, "application/pdf"); } public IActionResult PrintUsingClientWrapper() { var printUrl = Url.Action(nameof(GetRawPrintablePdf)); // Use a simple HTML/JavaScript wrapper to force the print dialog var html = new StringBuilder(); html.AppendLine("<!DOCTYPE html>"); html.AppendLine("<html lang=\"en\">"); html.AppendLine("<head>"); html.AppendLine(" <title>Print Document</title>"); html.AppendLine("</head>"); html.AppendLine("<body>"); // Load the PDF from the 'GetRawPrintablePdf' action into an invisible iframe. html.AppendLine($" <iframe src='{printUrl}' style='position:absolute; top:0; left:0; width:100%; height:100%; border:none;'></iframe>"); html.AppendLine(" <script>"); // Wait for the iframe (and thus the PDF) to load, then trigger the print dialog. html.AppendLine(" window.onload = function() {"); html.AppendLine(" // Wait briefly to ensure the iframe content is rendered before printing."); html.AppendLine(" setTimeout(function() {"); html.AppendLine(" window.print();"); html.AppendLine(" }, 100);"); html.AppendLine(" };"); html.AppendLine(" </script>"); html.AppendLine("</body>"); html.AppendLine("</html>"); return Content(html.ToString(), "text/html"); } private string GetInvoiceHtml() { // Build HTML with proper structure return @" <html> <head> <style> body { font-family: Arial, sans-serif; } .header { font-weight: bold; color: #1e40af; border-bottom: 2px solid #3b82f6; padding-bottom: 5px; } .content { padding-top: 10px; } </style> </head> <body> <div class='header'>Invoice Summary (Client View)</div> <div class='content'> <p>Document content: This file is optimized for printing.</p> <p>Total Amount: <b>$749.00</b></p> </div> </body> </html>"; } public IActionResult GetRawPrintablePdf() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(GetInvoiceHtml()); // This header tells the browser to display the file inline. // We use IHeaderDictionary indexer to prevent ArgumentException. **HttpContext context**.Response.Headers["Content-Disposition"] = "inline; filename=invoice.pdf"; return File(pdf.BinaryData, "application/pdf"); } public IActionResult PrintUsingClientWrapper() { var printUrl = Url.Action(nameof(GetRawPrintablePdf)); // Use a simple HTML/JavaScript wrapper to force the print dialog var html = new StringBuilder(); html.AppendLine("<!DOCTYPE html>"); html.AppendLine("<html lang=\"en\">"); html.AppendLine("<head>"); html.AppendLine(" <title>Print Document</title>"); html.AppendLine("</head>"); html.AppendLine("<body>"); // Load the PDF from the 'GetRawPrintablePdf' action into an invisible iframe. html.AppendLine($" <iframe src='{printUrl}' style='position:absolute; top:0; left:0; width:100%; height:100%; border:none;'></iframe>"); html.AppendLine(" <script>"); // Wait for the iframe (and thus the PDF) to load, then trigger the print dialog. html.AppendLine(" window.onload = function() {"); html.AppendLine(" // Wait briefly to ensure the iframe content is rendered before printing."); html.AppendLine(" setTimeout(function() {"); html.AppendLine(" window.print();"); html.AppendLine(" }, 100);"); html.AppendLine(" };"); html.AppendLine(" </script>"); html.AppendLine("</body>"); html.AppendLine("</html>"); return Content(html.ToString(), "text/html"); } private string GetInvoiceHtml() { // Build HTML with proper structure return @" <html> <head> <style> body { font-family: Arial, sans-serif; } .header { font-weight: bold; color: #1e40af; border-bottom: 2px solid #3b82f6; padding-bottom: 5px; } .content { padding-top: 10px; } </style> </head> <body> <div class='header'>Invoice Summary (Client View)</div> <div class='content'> <p>Document content: This file is optimized for printing.</p> <p>Total Amount: <b>$749.00</b></p> </div> </body> </html>"; } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel PDF 文件在瀏覽器中打開,用户可以通过标准的浏览器列印对话框用其默认印表機启动列印。 这种方法优于发起直接的服务器端列印请求。 輸出 处理各种源代码输入 IronPDF 灵活处理各种源代码输入,对想创建动态列印代码的开发人员来说非常重要: public async Task<IActionResult> PrintFromMultipleSources() { var renderer = new ChromePdfRenderer(); // From URL var pdfFromUrl = await renderer.RenderUrlAsPdfAsync("https://example.com"); // From HTML file path var pdfFromFile = renderer.RenderHtmlFileAsPdf(@"Templates\report.html"); var pdfToStream = renderer.RenderHtmlAsPdf("<h2>PDF from Memory Stream</h2><p>This content was loaded into memory first.</p>"); // Now, write the valid PDF bytes to the stream using (var stream = new MemoryStream(pdfToStream.BinaryData)) { var pdfFromStream = new PdfDocument(stream); // Example: Print the PDF loaded from the stream // pdfFromStream.Print(); } pdfFromUrl.Print(); // Logging the various files handled var fileList = new List<string> { "URL", "File Path", "Memory Stream" }; return Ok("PDF documents processed and 'example.com' printed to default server printer."); } public async Task<IActionResult> PrintFromMultipleSources() { var renderer = new ChromePdfRenderer(); // From URL var pdfFromUrl = await renderer.RenderUrlAsPdfAsync("https://example.com"); // From HTML file path var pdfFromFile = renderer.RenderHtmlFileAsPdf(@"Templates\report.html"); var pdfToStream = renderer.RenderHtmlAsPdf("<h2>PDF from Memory Stream</h2><p>This content was loaded into memory first.</p>"); // Now, write the valid PDF bytes to the stream using (var stream = new MemoryStream(pdfToStream.BinaryData)) { var pdfFromStream = new PdfDocument(stream); // Example: Print the PDF loaded from the stream // pdfFromStream.Print(); } pdfFromUrl.Print(); // Logging the various files handled var fileList = new List<string> { "URL", "File Path", "Memory Stream" }; return Ok("PDF documents processed and 'example.com' printed to default server printer."); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 上面的行展示了如何创建新的文件源处理列表。 每个方法都会在保持列印质量的同时保存文档结构和图形。 错误处理和日志 实施可靠的错误处理以适应生产环境: using System.Drawing.Printing; // For PrinterSettings // ... other usings ... public IActionResult SafePrint(string documentId) { try { var pdf = LoadPdfDocument(documentId); // Verify printer availability if (!PrinterSettings.InstalledPrinters.Cast<string>() .Contains("Target Printer")) { // Log error and handle gracefully return BadRequest("Printer not available"); } pdf.Print(); // Log successful output return Ok($"Document {documentId} printed successfully"); } catch (Exception ex) { // Log error details return StatusCode(500, "Printing failed"); } } using System.Drawing.Printing; // For PrinterSettings // ... other usings ... public IActionResult SafePrint(string documentId) { try { var pdf = LoadPdfDocument(documentId); // Verify printer availability if (!PrinterSettings.InstalledPrinters.Cast<string>() .Contains("Target Printer")) { // Log error and handle gracefully return BadRequest("Printer not available"); } pdf.Print(); // Log successful output return Ok($"Document {documentId} printed successfully"); } catch (Exception ex) { // Log error details return StatusCode(500, "Printing failed"); } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 这能确保即使在系统资源不可用时也能可靠打印,是打印服务的关键部分。 輸出 Scenarios 印表機不可用 如果代码中指定的打印机不可用,代码将提供此错误消息: PDF 成功打印 如果您的 PDF 已成功列印,您應該會看到如下確認信息: 高级配置 IronPDF的文件夾結構支持複雜場景。 您所使用的 IronPDF 庫版本可能會影響這些設置: public IActionResult ConfigureAdvancedPrinting(object sender, EventArgs e) { var renderer = new ChromePdfRenderer(); // Configure rendering options renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.RenderDelay = 500; // Wait for dynamic content // Generate complex PDF documents var pdf = renderer.RenderHtmlAsPdf(GetDynamicContent()); // Apply security settings pdf.SecuritySettings.AllowUserPrinting = true; pdf.MetaData.Author = "Your Company"; return File(pdf.BinaryData, "application/pdf"); } public IActionResult ConfigureAdvancedPrinting(object sender, EventArgs e) { var renderer = new ChromePdfRenderer(); // Configure rendering options renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.RenderDelay = 500; // Wait for dynamic content // Generate complex PDF documents var pdf = renderer.RenderHtmlAsPdf(GetDynamicContent()); // Apply security settings pdf.SecuritySettings.AllowUserPrinting = true; pdf.MetaData.Author = "Your Company"; return File(pdf.BinaryData, "application/pdf"); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 生成文檔後,打印的命令很簡單,就是 pdf.Print()。 IronPrint 替代方案 對於專門的打印需求,Iron Software 還提供了 IronPrint,一個具有增強跨平台支持的專用 .NET 列印庫。 您可以在其網站上找到更多信息的鏈接。主要參數僅僅是文件路徑。 產品描述可在他們的網站找到。 結論 IronPDF 將 ASP.NET PDF 列印從一個複雜的挑戰轉變為直接的實施。 無需要求 Adobe Reader 或外部依賴,您可以以最少的代碼生成和列印 PDF 文件。 該 PDF 庫從 HTML 轉換到印表機配置進行處理,這使其成為伺服器端自動化和客戶端列印場景的理想選擇。 準備好簡化您的 PDF 列印工作流程了嗎? 立即開始免費使用免費試用,體驗 IronPDF 如何簡化您的 ASP.NET 應用程式中的文档處理。 通过全面的文档和直接的工程支持,您可以在几分钟内运行生产就绪的 PDF 列印。 常見問題解答 如何在 ASP.NET 中列印 PDF 文件? 您可以使用 IronPDF 在 ASP.NET 中列印 PDF 文件,它透過其全面的 API 簡化了列印過程,實現了輕鬆整合和可靠的列印功能。 在 ASP.NET 應用程式中列印 PDF 時,常見的挑戰有哪些? 常見的挑戰包括管理複雜的伺服器-客戶端架構以及產生一致的列印輸出。 IronPDF 透過旨在實現無縫整合和可靠結果的功能來應對這些挑戰。 IronPDF 能否用於產生特定用途的 PDF 文檔,例如發票或報告? 是的,IronPDF 可用於產生各種用途的 PDF 文件,包括發票、報告和運送標籤,為開發人員提供了一個多功能的文件產生工具。 IronPDF 提供了哪些功能來支援 ASP.NET 中的 PDF 列印? IronPDF 提供 HTML 轉 PDF、CSS 樣式和 JavaScript 支援等功能,所有這些都有助於在 ASP.NET 應用程式中有效地列印 PDF。 是否可以使用 IronPDF 在 ASP.NET 中實現 PDF 自動列印? 是的,IronPDF 允許在 ASP.NET 應用程式中自動列印 PDF 文件,使開發人員能夠簡化工作流程並提高生產力。 IronPDF 如何處理伺服器-客戶端架構的複雜度? IronPDF 旨在透過提供強大的 API 來處理伺服器-客戶端架構的複雜性,從而簡化直接從伺服器端產生和列印 PDF 的過程。 IronPDF是否支援在列印前對PDF文件進行自訂? IronPDF 支援對 PDF 文件進行廣泛的自訂選項,讓開發人員在列印前控制佈局、內容和設計。 IronPDF支援哪些程式語言進行PDF列印? IronPDF 與 C# 和其他 .NET 語言相容,是 ASP.NET 框架內開發人員的理想選擇。 IronPDF 能否與其他 .NET 應用程式整合? 是的,IronPDF 可以輕鬆與其他 .NET 應用程式集成,從而可以無縫添加到現有系統中,並增強 PDF 管理功能。 IronPDF 如何確保不同裝置上列印輸出的一致性? IronPDF 支援高保真渲染和將 HTML、CSS 和 JavaScript 精確轉換為 PDF,從而確保列印輸出的一致性,無論使用何種列印裝置。 IronPDF 是否相容於 .NET 10?升級到 .NET 10 能帶來哪些好處? 是的,IronPDF 完全相容於 .NET 10,包括 Windows、Linux、macOS 和容器化環境的 .NET 10 專案。升級至 .NET 10 可解鎖諸多改進,例如降低記憶體佔用、提升效能、使用新的 C# 語言特性,以及 ASP.NET Core 10 中可簡化 PDF 產生和整合的增強功能。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 相關文章 發表日期 11月 13, 2025 如何在 C# 中合併兩個 PDF 位元組數組 使用 IronPDF 在 C# 中合併兩個 PDF 位元組數組。學習如何透過簡單的程式碼範例,將來自位元組數組、記憶體流和資料庫的多個 PDF 文件合併在一起。 閱讀更多 發表日期 11月 13, 2025 如何在 ASP.NET MVC 中創建 PDF 檢視器 為 ASP.NET MVC 應用程式構建一個強大的 PDF 檢視器。顯示 PDF 文件,將視圖轉換為 PDF,使用 IronPDF 添加互動功能。 閱讀更多 發表日期 11月 13, 2025 如何建立 .NET HTML 轉 PDF 轉換器 學習如何在.NET中使用IronPDF將HTML轉換為PDF。 閱讀更多 如何在 VB.NET 中將 PDF 轉換為 JPG如何在 .NET 中將 PDF 轉換為...
發表日期 11月 13, 2025 如何在 C# 中合併兩個 PDF 位元組數組 使用 IronPDF 在 C# 中合併兩個 PDF 位元組數組。學習如何透過簡單的程式碼範例,將來自位元組數組、記憶體流和資料庫的多個 PDF 文件合併在一起。 閱讀更多
發表日期 11月 13, 2025 如何在 ASP.NET MVC 中創建 PDF 檢視器 為 ASP.NET MVC 應用程式構建一個強大的 PDF 檢視器。顯示 PDF 文件,將視圖轉換為 PDF,使用 IronPDF 添加互動功能。 閱讀更多