USING IRONPDF How to Open a PDF in a New Tab in Blazor Curtis Chau 更新:2025年11月13日 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 如何在 Blazor 中於新分頁開啟 PDF 文件 要從 Blazor Server 應用程式在新瀏覽器標籤頁中開啟 PDF,可以使用 IronPDF 進行伺服器端 PDF 生成,並結合 JavaScript 互通來處理用戶端視窗管理,從而解決跨邊界通訊的難題。 在新的瀏覽器標籤頁中開啟 PDF 文件是 Blazor Web 應用程式的常見需求。 本教學課程示範如何使用 IronPDF 產生 PDF 文件,並使用 JavaScript 互通在新分頁中顯示它們,從而為使用者提供無縫的文件檢視體驗。 本範例以 Blazor Server 版本為例。 我的 Blazor 專案需要哪些先決條件? 首先在 Visual Studio 2022 中建立一個新的 Blazor Server 專案。透過 NuGet 套件管理器控制台安裝 IronPDF: Install-Package IronPdf 在Program.cs中設定您的 IronPDF 授權以啟用全部功能: License.LicenseKey = "YOUR-LICENSE-KEY"; License.LicenseKey = "YOUR-LICENSE-KEY"; License.LicenseKey = "YOUR-LICENSE-KEY" $vbLabelText $csharpLabel 您需要輸入許可證密鑰才能解鎖所有功能。 IronPDF 可與Blazor Server 應用程式無縫協作,為現代 Web 應用程式提供強大的PDF 生成功能。 如果您是 IronPDF 的新手,請查看快速入門指南以熟悉基本操作。 為什麼 Blazor 不能直接在新分頁中開啟 PDF 檔案? Blazor Server 應用程式無法透過伺服器上的 C# 程式碼直接操作瀏覽器標籤頁。 在 Blazor 的新分頁中開啟 PDF 需要 JavaScript 互通(JS 互通)來連接伺服器端 PDF 產生和用戶端視窗管理。 IronPDF 使開發人員能夠在伺服器上產生高品質的 PDF 文檔,然後可以使用 JavaScript 的window.open()功能顯示這些文檔。 這種方法解決了 .NET 應用程式中常見的客戶端-伺服器邊界問題。 此函式庫的Chrome 渲染引擎可確保HTML 到 PDF 的像素級完美轉換,維持文件的視覺完整性。 在使用Blazor 和 IronPDF時,需要了解的是, JavaScript 執行發生在客戶端,而 PDF 產生發生在伺服器端。 這種分離使得視窗管理任務需要使用 JavaScript 互通。 如何在我的 Blazor Web 應用程式中實作 JavaScript 函數? 將此 JavaScript 程式碼新增至您的_Host.cshtml檔案中,以處理在新瀏覽器標籤頁中顯示 PDF 檔案。 此模組管理客戶端視窗操作: <script> window.openPdfInNewTab = function (pdfData, fileName) { // Convert base64 to blob const byteCharacters = atob(pdfData); const byteNumbers = new Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); // The type is 'application/pdf', not 'image/png' or 'image/jpg' const blob = new Blob([byteArray], { type: 'application/pdf' }); // Create URL and open in new tab const blobUrl = URL.createObjectURL(blob); const newWindow = window.open(blobUrl, '_blank'); if (newWindow) { newWindow.document.title = fileName || 'PDF Document'; } // Clean up setTimeout(() => URL.revokeObjectURL(blobUrl), 100); return newWindow !== null; }; </script> <script> window.openPdfInNewTab = function (pdfData, fileName) { // Convert base64 to blob const byteCharacters = atob(pdfData); const byteNumbers = new Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); // The type is 'application/pdf', not 'image/png' or 'image/jpg' const blob = new Blob([byteArray], { type: 'application/pdf' }); // Create URL and open in new tab const blobUrl = URL.createObjectURL(blob); const newWindow = window.open(blobUrl, '_blank'); if (newWindow) { newWindow.document.title = fileName || 'PDF Document'; } // Clean up setTimeout(() => URL.revokeObjectURL(blobUrl), 100); return newWindow !== null; }; </script> HTML window.openPdfInNewTab JavaScript 函數對於從伺服器開啟新標籤頁至關重要。 它從 Blazor 伺服器接收 Base64 字串形式的 PDF 數據,客戶端程式碼將其轉換為二進位Blob物件。 這種方法類似於將 PDF 轉換為 Base64 ,但方向相反,使瀏覽器能夠顯示 PDF 內容。 然後使用此 blob 建立一個臨時 URL,最後將其傳遞給window.open(blobUrl, '_blank')以強制瀏覽器在新標籤頁中開啟 PDF。 當從記憶體載入 PDF 檔案而無需伺服器端檔案儲存時,通常會使用 blob URL 技術。 對於需要更高安全性的應用,請考慮在將文件傳輸給客戶端之前實施PDF 權限和密碼保護。 您還可以探索使用數位簽章來確保文件的真實性。 如何建立 Blazor 組件? 建立一個新的 Razor 元件,用於產生 PDF 檔案並在新分頁中開啟它們。 這是解決方案的主要範本: @page "/pdf-viewer" @using IronPdf @inject IJSRuntime JS <h3>Open PDF in New Tab</h3> <div class="mb-3"> <label>Enter URL:</label> <input @bind="targetUrl" class="form-control" /> </div> <button class="btn btn-primary" @onclick="GenerateAndOpenPdf" disabled="@isProcessing"> @if (isProcessing) { <span>Generating PDF...</span> } else { <span>Generate and Open PDF</span> } </button> @if (!string.IsNullOrEmpty(errorMessage)) { <div class="alert alert-danger mt-3">@errorMessage</div> } @code { private string targetUrl = "___PROTECTED_URL_69___"; private bool isProcessing = false; private string errorMessage = ""; private async Task GenerateAndOpenPdf() { isProcessing = true; errorMessage = ""; try { // Configure Chrome PDF renderer. Note the rendering details var renderer = new ChromePdfRenderer { RenderingOptions = new ChromePdfRenderOptions { MarginTop = 10, MarginBottom = 10, MarginLeft = 10, MarginRight = 10, EnableJavaScript = true, RenderDelay = 500 } }; // Generate PDF from URL var pdfDocument = await Task.Run(() => renderer.RenderUrlAsPdf(targetUrl)); // Convert to base64 byte[] pdfBytes = pdfDocument.BinaryData; string base64Pdf = Convert.ToBase64String(pdfBytes); // Open in new tab via JS interop bool success = await JS.InvokeAsync<bool>("openPdfInNewTab", base64Pdf, $"Document_{DateTime.Now:yyyyMMdd_HHmmss}.pdf"); if (!success) { // Giving the user an understandable error is key errorMessage = "Pop-up blocked. Please allow pop-ups for this site."; } } catch (Exception ex) { errorMessage = $"Error: {ex.Message}"; } finally { isProcessing = false; } } } 此程式碼區塊定義了主要的互動式頁面。 Razor 標記創建了一個簡單的使用者介面,其中包含一個 URL 輸入欄位和一個按鈕。 C# @code程式碼區塊處理邏輯:當按鈕被點擊時,它使用ChromePdfRenderer實例從使用者提供的 URL 產生 PDF。 渲染選項可讓您自訂邊距、啟用JavaScript 渲染以及設定動態內容的渲染延遲。 然後,它將產生的 PDF 位元組陣列轉換為 Base64 字串,並使用@inject IJSRuntime JS呼叫 JavaScript 函數,從而為使用者開啟文件。 這種模式在 Web 應用程式中將URL 轉換為 PDF時特別有用。 對於更複雜的場景,您可能需要實現非同步 PDF 生成以獲得更好的效能。 考慮實施自訂日誌記錄,以追蹤 PDF 產生活動並排查問題。 您也可以新增浮水印或頁眉頁腳來美化您的 PDF 檔案。 使用者介面長什麼樣? 一個簡單的網頁表單,URL輸入框預先填入了"https://ironpdf.com",還有一個"產生並開啟PDF"按鈕,用於在新分頁中開啟PDF檔案。 PDF檔案如何在新的標籤頁中顯示? ! PDF 檢視器正在瀏覽器標籤頁中顯示一個 C# PDF 庫演示文稿,其中包含多個頁面,並以 IronPDF for .NET 文件為例,提供可見的導航控制項和縮放選項。 如何使用動態HTML內容? 若要從動態內容而非 URL 產生 PDF,請修改您的方法以使用RenderHtmlAsPdf : private async Task GenerateFromHtml() { // Define CSS styles inside the HTML string for structure and appearance. string htmlContent = $@" <!DOCTYPE html> <html> <head> <style> body {{ font-family: Arial; padding: 20px; }} h1 {{ color: #2c3e50; }} table {{ border-collapse: collapse; width: 100%; }} th, td {{ border: 1px solid #ddd; padding: 8px; }} </style> </head> <body> <h1>{documentTitle}</h1> <p>{documentContent}</p> <table> <tr> <th>Item</th> <th>Value</th> </tr> <tr> <td>Generated</td> <td>{DateTime.Now}</td> </tr> </table> </body> </html>"; var renderer = new ChromePdfRenderer(); var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent); byte[] pdfBytes = pdfDocument.BinaryData; await JS.InvokeVoidAsync("openPdfInNewTab", Convert.ToBase64String(pdfBytes), "dynamic.pdf"); } private async Task GenerateFromHtml() { // Define CSS styles inside the HTML string for structure and appearance. string htmlContent = $@" <!DOCTYPE html> <html> <head> <style> body {{ font-family: Arial; padding: 20px; }} h1 {{ color: #2c3e50; }} table {{ border-collapse: collapse; width: 100%; }} th, td {{ border: 1px solid #ddd; padding: 8px; }} </style> </head> <body> <h1>{documentTitle}</h1> <p>{documentContent}</p> <table> <tr> <th>Item</th> <th>Value</th> </tr> <tr> <td>Generated</td> <td>{DateTime.Now}</td> </tr> </table> </body> </html>"; var renderer = new ChromePdfRenderer(); var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent); byte[] pdfBytes = pdfDocument.BinaryData; await JS.InvokeVoidAsync("openPdfInNewTab", Convert.ToBase64String(pdfBytes), "dynamic.pdf"); } Private Async Function GenerateFromHtml() As Task ' Define CSS styles inside the HTML string for structure and appearance. Dim htmlContent As String = $" <!DOCTYPE html> <html> <head> <style> body {{ font-family: Arial; padding: 20px; }} h1 {{ color: #2c3e50; }} table {{ border-collapse: collapse; width: 100%; }} th, td {{ border: 1px solid #ddd; padding: 8px; }} </style> </head> <body> <h1>{documentTitle}</h1> <p>{documentContent}</p> <table> <tr> <th>Item</th> <th>Value</th> </tr> <tr> <td>Generated</td> <td>{DateTime.Now}</td> </tr> </table> </body> </html>" Dim renderer = New ChromePdfRenderer() Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent) Dim pdfBytes As Byte() = pdfDocument.BinaryData Await JS.InvokeVoidAsync("openPdfInNewTab", Convert.ToBase64String(pdfBytes), "dynamic.pdf") End Function $vbLabelText $csharpLabel GenerateFromHtml方法示範了 IronPDF 如何從動態產生的 HTML 標籤而不是現有 URL 產生 PDF。 它會建立一個完整的 HTML 字串,其中包含標題、內容和動態資料。 RenderHtmlAsPdf方法可以無縫地處理轉換。 這種方法非常適合使用來自資料庫或 API 的動態資料建立 PDF 報告。 您可以使用DataURIs透過自訂字體、響應式 CSS甚至嵌入圖像來增強 HTML 內容。 對於複雜的佈局,可以考慮使用Bootstrap 和 Flexbox來確保渲染效果的一致性。 在處理國際語言時,IronPDF 提供出色的Unicode 支持,確保不同語言和文字的字元正確顯示。您還可以控制分頁符號並自訂紙張尺寸,以滿足特定的文件需求。 更新後的使用者介面是什麼樣子的? !兩個表單部分分別展示了從 URL 開啟 PDF 和從動態 HTML 內容產生 PDF 的選項,並配有樣式化的輸入欄位、佔位符文字和操作按鈕,以增強使用者引導。 動態 PDF 如何顯示? 瀏覽器在新標籤頁中顯示一個 PDF 文檔,其中包含一個名為"動態 PDF 報告"的格式化報告,報告帶有表格資料和產生時間戳,表示動態內容渲染成功。 我應該處理哪些常見問題? 為什麼跨瀏覽器相容性很重要? 不同的瀏覽器對 blob URL 的處理方式不同。 在 Chrome、Firefox、Edge 和 Safari 瀏覽器上測試您的實現,以確保行為一致。 某些瀏覽器可能對彈出視窗處理或安全限制有特定要求。 考慮為預設阻止彈出視窗的瀏覽器實作備用機制。 在使用Azure 部署時,您可能會遇到502 Bad Gateway 錯誤或其他特定於託管的問題。 務必在目標環境中測試 PDF 產生功能,並實施適當的錯誤處理。 如何處理大型PDF文件? 對於大型PDF文檔,可以考慮實施伺服器端快取來提高效能: services.AddMemoryCache(); // Cache generated PDFs to avoid regeneration private readonly IMemoryCache _cache; public async Task<byte[]> GetCachedPdf(string cacheKey) { if (!_cache.TryGetValue(cacheKey, out byte[] pdfBytes)) { // Generate PDF var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_70___"); pdfBytes = pdf.BinaryData; // Cache for 10 minutes _cache.Set(cacheKey, pdfBytes, TimeSpan.FromMinutes(10)); } return pdfBytes; } services.AddMemoryCache(); // Cache generated PDFs to avoid regeneration private readonly IMemoryCache _cache; public async Task<byte[]> GetCachedPdf(string cacheKey) { if (!_cache.TryGetValue(cacheKey, out byte[] pdfBytes)) { // Generate PDF var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_70___"); pdfBytes = pdf.BinaryData; // Cache for 10 minutes _cache.Set(cacheKey, pdfBytes, TimeSpan.FromMinutes(10)); } return pdfBytes; } Imports System Imports System.Threading.Tasks Imports Microsoft.Extensions.Caching.Memory ' Cache generated PDFs to avoid regeneration Private ReadOnly _cache As IMemoryCache Public Async Function GetCachedPdf(cacheKey As String) As Task(Of Byte()) Dim pdfBytes As Byte() = Nothing If Not _cache.TryGetValue(cacheKey, pdfBytes) Then ' Generate PDF Dim renderer As New ChromePdfRenderer() Dim pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_70___") pdfBytes = pdf.BinaryData ' Cache for 10 minutes _cache.Set(cacheKey, pdfBytes, TimeSpan.FromMinutes(10)) End If Return pdfBytes End Function $vbLabelText $csharpLabel 為了獲得最佳的大文件瀏覽效能,請考慮使用PDF 壓縮技術和線性化技術,以實現快速的網頁瀏覽。 您也可以探索在批次處理場景中並行產生 PDF 的功能。 我可以使用哪些導航替代方案? 除了 JavaScript 互通之外,您還可以透過靜態檔案中間件提供 PDF 文件,並使用標準的 HTML 錨點標籤進行其他導覽方式: <a href="/pdfs/document.pdf" target="_blank">Open PDF</a> <a href="/pdfs/document.pdf" target="_blank">Open PDF</a> HTML 這種方法對於預先產生的 PDF 檔案效果很好,但缺乏 JS 互通方法的動態產生功能。 對於更進階的場景,可以考慮實作專用的PDF 檢視元件,或使用MemoryStream來提供 PDF 檔案而無需儲存到磁碟。 您也可以考慮將 PDF 檔案儲存到 Azure Blob Storage 等雲端儲存體中,以獲得更好的可擴充性。 對於需要離線存取的應用,可以考慮在新增標籤頁功能的同時實作PDF 下載功能。 我應該遵循哪些最佳實務? 1.錯誤處理:將 PDF 產生過程封裝在 try-catch 區塊中,並新增有意義的錯誤訊息。 使用自訂錯誤日誌追蹤問題。 2.效能:使用 async/await 防止 UI 阻塞。 對 JavaScript 程式碼較多的頁面實作渲染延遲。 預熱引擎以加快初始渲染速度。 3.使用者體驗:顯示載入指示器並優雅地處理彈出視窗攔截器。 追蹤多頁PDF的進度。 針對網路問題提供清晰的回饋。 DOM 操作:請記住,伺服器端 C# 不能直接操作客戶端 DOM。 使用JavaScript 訊息監聽器實現複雜互動。 5.安全性:在產生 PDF 之前驗證所有使用者輸入。 根據需要應用PDF 安全處理、數位簽章和加密。 使用HTTPS進行安全傳輸。 6.資源管理:妥善處置 PDF 文檔,防止記憶體洩漏。 監控軟體包大小,以優化容器化部署。 結論 將 IronPDF 強大的 PDF 生成功能與 Blazor 的 JavaScript 互通性相結合,為在新瀏覽器標籤頁中開啟 PDF 提供了一個強大的解決方案。 這種方法使開發人員能夠創建動態、專業的 PDF 文檔,並與現代 Blazor 應用程式無縫整合。 無論您是將 HTML 轉換為 PDF 、建立表單還是組織複雜文檔,IronPDF 都提供了企業級 PDF 處理所需的工具。 準備在 Blazor 專案中實現 PDF 功能嗎? 立即開始您的IronPDF 免費試用。 試用版包含所有功能,無浮水印,並提供全面的支持,確保您成功。 對於生產部署,請瀏覽我們針對各種平台(包括Windows 、 Linux和Azure)的授權選項和部署指南。 常見問題解答 如何使用 Blazor 在新標籤中開啟 PDF? 您可以在 Blazor 的新標籤頁面中開啟 PDF,方法是使用 IronPDF 來產生 PDF,並透過 JavaScript interop 將 PDF 顯示在新的瀏覽器標籤頁面中。 IronPDF 在 Blazor 應用程式中扮演什麼角色? IronPDF 用於 Blazor 應用程式中以產生 PDF 文件,讓開發人員可以在應用程式中以程式化的方式建立和處理 PDF。 為何Blazor使用JavaScript互動來開啟PDF? 在 Blazor 中,JavaScript interop 用於與瀏覽器功能互動,例如開啟新的標籤頁,這對於以人性化的方式顯示 IronPDF 所產生的 PDF 是必要的。 我可以在Blazor伺服器應用程式中實作PDF檢視嗎? 是的,您可以在 Blazor Server 應用程式中實現 PDF 檢視,方法是使用 IronPDF 來產生 PDF,並使用 JavaScript interop 來在新標籤中打開 PDF,以獲得無縫的使用者體驗。 在 Blazor 應用程式中以新標籤開啟 PDF 有什麼好處? 在新索引標籤中開啟 PDF 可增強使用者體驗,讓使用者不需從目前頁面導航即可檢視文件,並保持應用程式狀態不變。 是否可以在 Blazor 中使用 IronPDF 自訂 PDF 輸出? 是的,IronPDF 允許您在 Blazor 應用程式中自訂 PDF 輸出,包括設定頁眉、頁腳,以及套用樣式以符合特定的設計需求。 打開 PDF 的教學中使用的是哪個版本的 Blazor? 本教學著重於 Blazor 伺服器版本,以示範如何使用 IronPDF 與 JavaScript interop 在新標籤頁中開啟 PDF。 使用 IronPDF 如何改善 Blazor 中的文件處理? 在 Blazor 中使用 IronPDF 可提供強大的 PDF 生成和處理功能,從而改善文件處理,讓您可以輕鬆地直接從應用程式中創建專業品質的 PDF。 Curtis Chau 立即與工程團隊聊天 技術撰稿人 Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。 相關文章 更新2026年1月22日 How to Create PDF Documents in .NET with IronPDF: Complete Guide Discover effective methods to create PDF files in C# for developers. Enhance your coding skills and streamline your projects. Read the article now! 閱讀更多 更新2026年1月21日 How to Merge PDF Files in VB.NET: Complete Tutorial Merge PDF VB NET with IronPDF. Learn to combine multiple PDF files into one document using simple VB.NET code. Step-by-step examples included. 閱讀更多 更新2026年1月21日 C# PDFWriter Tutorial: Create PDF Documents in .NET Learn to create PDFs efficiently using C# PDFWriter with this step-by-step guide for developers. Read the article to enhance your skills today! 閱讀更多 How to Display, Save, and Print PDFs in an ASP.NET Core ViewerHow to Display a PDF from a Databas...
更新2026年1月22日 How to Create PDF Documents in .NET with IronPDF: Complete Guide Discover effective methods to create PDF files in C# for developers. Enhance your coding skills and streamline your projects. Read the article now! 閱讀更多
更新2026年1月21日 How to Merge PDF Files in VB.NET: Complete Tutorial Merge PDF VB NET with IronPDF. Learn to combine multiple PDF files into one document using simple VB.NET code. Step-by-step examples included. 閱讀更多
更新2026年1月21日 C# PDFWriter Tutorial: Create PDF Documents in .NET Learn to create PDFs efficiently using C# PDFWriter with this step-by-step guide for developers. Read the article to enhance your skills today! 閱讀更多