跳過到頁腳內容
使用IRONPDF

如何使用 IronPDF for .NET 在新視窗 ASP .NET C# 中開啟 PDF

介紹

在 ASP.NET Web 應用程式中,在新視窗或瀏覽器標籤頁中開啟 PDF 檔案是一個常見的請求。 開發人員經常遇到這樣的問題:當使用者點擊連結時,PDF 文件會自動下載,而不是在瀏覽器中顯示。 這種令人沮喪的行為會擾亂使用者體驗,尤其是在使用者需要在當前頁面上繼續工作的同時查看報告、發票或文件時。

IronPDF為應對這項挑戰提供了一個優雅的解決方案,它提供了強大的 PDF 生成和顯示功能,可與 ASP.NET 應用程式無縫整合。 開發者無需費力處理回應標頭和內容處置設置,即可利用 IronPDF 的 ChromePdfRenderer 建立和提供可在新瀏覽器標籤頁中可靠開啟的 PDF 檔案。

在本文中,我們將探討 IronPDF 如何解決在電腦瀏覽器中產生和顯示 PDF 檔案的問題。

為什麼PDF檔案會下載而不是直接開啟?

透過 ASP.NET 提供 PDF 檔案時,預設行為通常會導致檔案下載而不是在瀏覽器中顯示。 這是因為伺服器透過 HTTP 回應頭將檔案傳送到瀏覽器的方式所造成的。 Content-Disposition 標頭主要控制 PDF 檔案是直接開啟還是下載。

傳統的 ASP.NET 程式碼使用 Response.BinaryWrite 和位元組數組時,通常會設定觸發下載的標頭。 即使開發者設定了Response.ContentType = "application/pdf" ,缺少或不正確的Content-Disposition值也會導致瀏覽器下載而不是顯示 PDF 文件。 此外,不同的瀏覽器對 PDF 文件的處理方式也不一致——雖然 Adobe PDF 閱讀器外掛程式可能會直接顯示文件,但行動瀏覽器通常會預設會下載文件。

當處理從 HTML 字串或資料來源動態產生的 PDF 文件時,伺服器端配置會變得更加複雜。 如果沒有正確的路徑和合適的標頭,實現跨瀏覽器一致的顯示就變得很困難。 許多開發者轉向Stack Overflow 的討論,尋求解決這個長期存在的問題。 使用搜尋功能快速找到答案。

IronPDF 如何簡化 PDF 顯示?

IronPDF 將複雜的 PDF 產生和顯示任務轉換為簡單的程式碼。 IronPDF 使用基於 Chrome 的渲染引擎,從 HTML 內容生成像素級完美的 PDF 文件,同時自動處理經常讓開發人員頭疼的技術細節。

該庫的ChromePdfRenderer類別提供了一種現代化的 PDF 創建方法。 開發人員無需手動管理位元組數組和響應流,只需透過簡單的方法調用,即可從HTML 字串HTML 檔案或 URL 產生 PDF。 IronPDF 在內部處理渲染過程,確保在不同環境下輸出一致的結果。

除了基本生成功能外,IronPDF 還提供豐富的渲染選項,用於自訂輸出,包括紙張大小、邊距和JavaScript 執行延遲。 這種靈活性使其成為創建各種內容的理想選擇,從簡單的文件到包含圖表和動態內容的複雜報告,都能輕鬆勝任。 歡迎您就您偏好的渲染設定提出意見。

如何使用 IronPDF 產生和開啟 PDF 文件?

首先,透過 NuGet 套件管理器安裝 IronPDF:

Install-Package IronPdf

以下是一個完整的 ASP.NET Core 範例,它會產生 PDF 檔案並將其提供給我們,以便在瀏覽器標籤頁中開啟:

using IronPdf;
using Microsoft.AspNetCore.Mvc;
public class PdfController : Controller
{
    [HttpGet]
    public IActionResult GeneratePdf()
    {
        // Create a new ChromePdfRenderer instance
        var renderer = new ChromePdfRenderer();
        // Generate PDF from HTML string with support for CSS and JavaScript
        string htmlString = @"
            <html>
                <body>
                    <h1>Sample PDF Document</h1>
                    <p>This PDF will open in a new browser tab.</p>
                    <p>Generated on: " + DateTime.Now.ToString() + @"</p>
                </body>
            </html>";
        // Create PDF document with proper format
        var PDF = renderer.RenderHtmlAsPdf(htmlString);
        // Convert to byte array for streaming
        byte[] pdfBytes = pdf.BinaryData;
        // Return file with inline display - key for opening in browser
        Response.Headers.Add("Content-Disposition", "inline; filename=document.pdf");
        Response.Headers.Add("Content-Length", pdfBytes.Length.ToString());
        return File(pdfBytes, "application/pdf");
    }
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;
public class PdfController : Controller
{
    [HttpGet]
    public IActionResult GeneratePdf()
    {
        // Create a new ChromePdfRenderer instance
        var renderer = new ChromePdfRenderer();
        // Generate PDF from HTML string with support for CSS and JavaScript
        string htmlString = @"
            <html>
                <body>
                    <h1>Sample PDF Document</h1>
                    <p>This PDF will open in a new browser tab.</p>
                    <p>Generated on: " + DateTime.Now.ToString() + @"</p>
                </body>
            </html>";
        // Create PDF document with proper format
        var PDF = renderer.RenderHtmlAsPdf(htmlString);
        // Convert to byte array for streaming
        byte[] pdfBytes = pdf.BinaryData;
        // Return file with inline display - key for opening in browser
        Response.Headers.Add("Content-Disposition", "inline; filename=document.pdf");
        Response.Headers.Add("Content-Length", pdfBytes.Length.ToString());
        return File(pdfBytes, "application/pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

顯示的PDF

如何使用 IronPDF 在 ASP.NET C# 中在新視窗中開啟 PDF:圖 1 - 與"如何使用 IronPDF 在 ASP.NET C# 中在新視窗中開啟 PDF"相關的 4 張圖片中的第 1 張

上面的程式碼使用了[HttpGet]。 如果是在使用者提交表單後建立此 PDF,則可能會使用 [HttpPost] 屬性。 這樣可以確保讀者了解簡單請求和提交包含資料的貼文請求之間的差異。

在瀏覽器中開啟 PDF 檔案的關鍵是將 Content-Disposition 標頭設定為"inline"而不是"attachment"。 這會告訴瀏覽器直接顯示文件,而不是下載並儲存。 傳統ASP.NET按鈕點擊事件中的 object sender 和 EventArgs e 參數可以觸發此控制器操作。

對於使用 Literal 控制項或 Literal 標籤的 WebForms 應用程序,您可以將 PDF 檢視器直接嵌入到目前頁面中:

protected void OpenPdf_Click(object sender, EventArgs e)
{
    var renderer = new ChromePdfRenderer();
    // Generate PDF document from HTML
    var PDF = renderer.RenderHtmlAsPdf("<h1>Invoice</h1><p>Your order details</p>");
    // Get byte array from PDF
    byte[] data = pdf.BinaryData;
    // Clear response and write PDF to browser
    Response.Clear();
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-Length", data.Length.ToString());
    Response.AddHeader("Content-Disposition", "inline; filename=invoice.pdf");
    Response.BinaryWrite(data);
    Response.End();
}
protected void OpenPdf_Click(object sender, EventArgs e)
{
    var renderer = new ChromePdfRenderer();
    // Generate PDF document from HTML
    var PDF = renderer.RenderHtmlAsPdf("<h1>Invoice</h1><p>Your order details</p>");
    // Get byte array from PDF
    byte[] data = pdf.BinaryData;
    // Clear response and write PDF to browser
    Response.Clear();
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-Length", data.Length.ToString());
    Response.AddHeader("Content-Disposition", "inline; filename=invoice.pdf");
    Response.BinaryWrite(data);
    Response.End();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

對於希望建立 PDF 表單或新增數位簽章的用戶,IronPDF 為這些進階功能提供了全面的支援。

瀏覽器標籤頁控制呢?

伺服器端程式碼決定 PDF 是否以內聯方式顯示,而控制它是在同一標籤頁還是新標籤頁中開啟則需要客戶端 JavaScript。 HTML連結中的target屬性提供了一個最簡單的在新視窗中開啟PDF的方法:

<a href="/Pdf/GeneratePdf" target="_blank">View File</a>
<a href="/Pdf/GeneratePdf" target="_blank">View File</a>
HTML

PDF 檔案在新瀏覽器標籤頁中顯示

如何使用 IronPDF 在 ASP.NET C# 中在新視窗中開啟 PDF:圖 2 - 在新分頁中開啟 PDF

為了更好地控制,JavaScript 的window.open函數可以很好地配合動態產生的 URL,在新瀏覽器標籤頁中開啟 PDF 檔案:

function openPdfInNewTab() {
    // Open PDF in new window using JavaScript
    window.open('/Pdf/GeneratePdf', '_blank');
    return false; // Prevent default form submission
}
function openPdfInNewTab() {
    // Open PDF in new window using JavaScript
    window.open('/Pdf/GeneratePdf', '_blank');
    return false; // Prevent default form submission
}
JAVASCRIPT

在 ASP.NET Web 應用程式中,將此控制項與按鈕控制項結合使用:

<asp:Button ID="btnViewPdf" runat="server"
            OnClientClick="window.open('/Pdf/GeneratePdf', '_blank'); return false;"
            Text="Open PDF in New Tab" />
<asp:Button ID="btnViewPdf" runat="server"
            OnClientClick="window.open('/Pdf/GeneratePdf', '_blank'); return false;"
            Text="Open PDF in New Tab" />
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

注意:使用 JavaScript 的window.open()時,第二個參數&#39;_blank&#39;會在一個新的、單獨的視窗或標籤頁中開啟文件。 如果不需要指定視窗名稱,可以將新視窗的名稱留空。

HTML 物件標籤提供了另一種將 PDF 文件直接嵌入頁面的方法,當使用者安裝了 Adobe PDF 閱讀器時尤其有用:

<object data="/Pdf/GeneratePdf" type="application/pdf" width="100%" height="600px">
    <embed src="/Pdf/GeneratePdf" type="application/pdf" />
    <p>Your browser doesn't support embedded PDF documents.
       <a href="/Pdf/GeneratePdf" target="_blank">View PDF File</a>
    </p>
</object>
<object data="/Pdf/GeneratePdf" type="application/pdf" width="100%" height="600px">
    <embed src="/Pdf/GeneratePdf" type="application/pdf" />
    <p>Your browser doesn't support embedded PDF documents.
       <a href="/Pdf/GeneratePdf" target="_blank">View PDF File</a>
    </p>
</object>
HTML

嵌入式 PDF 文件

如何使用 IronPDF 在 ASP.NET C# 中在新視窗中開啟 PDF 檔案:圖 3 - 嵌入式 PDF 文件

當可以使用 Adobe PDF 閱讀器或類似插件時,這種方法效果很好,不過現代瀏覽器越來越多地支援原生 PDF 顯示,無需額外軟體。 根據微軟的文檔,正確的 HTTP 標頭與客戶端程式碼結合,可提供最可靠的跨瀏覽器解決方案。 請注意 target="_blank" 屬性的重要性。

如何處理不同的文件來源?

IronPDF 擅長處理 HTML 字串以外的各種輸入來源。 在處理現有 PDF 文件或從不同資料格式產生 PDF 文件時,該庫提供了靈活的選項,可將 PDF 文件提供給使用者。

若要從正確的路徑載入現有的 PDF 文件:

public IActionResult ViewFile(string fileName)
{
    // Ensure correct path to PDF file
    string path = Path.Combine(_webHostEnvironment.WebRootPath, "pdfs", fileName);
    // Load existing PDF document
    var PDF = PdfDocument.FromFile(path);
    // Optionally add additional information to the PDF
    pdf.AddPage(renderer.RenderHtmlAsPdf("<h2>Additional Information</h2>"));
    // Convert to stream for browser display
    var stream = pdf.Stream;
    byte[] bytes = stream.ToArray();
    // Set headers for inline display in new browser tab
    Response.Headers.Add("Content-Disposition", "inline; filename=" + fileName);
    Response.Headers.Add("Content-Length", bytes.Length.ToString());
    return File(bytes, "application/pdf");
}
public IActionResult ViewFile(string fileName)
{
    // Ensure correct path to PDF file
    string path = Path.Combine(_webHostEnvironment.WebRootPath, "pdfs", fileName);
    // Load existing PDF document
    var PDF = PdfDocument.FromFile(path);
    // Optionally add additional information to the PDF
    pdf.AddPage(renderer.RenderHtmlAsPdf("<h2>Additional Information</h2>"));
    // Convert to stream for browser display
    var stream = pdf.Stream;
    byte[] bytes = stream.ToArray();
    // Set headers for inline display in new browser tab
    Response.Headers.Add("Content-Disposition", "inline; filename=" + fileName);
    Response.Headers.Add("Content-Length", bytes.Length.ToString());
    return File(bytes, "application/pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

開啟的PDF

如何使用 IronPDF 在 ASP.NET C# 中在新視窗中開啟 PDF:圖 4 - 查看現有 PDF 文檔

處理來自資料庫或外部來源的位元組數組時需要格外小心,以確保 PDF 檔案能夠正確開啟:

public IActionResult DisplayFromDatabase(int documentId)
{
    // Retrieve byte array from database or system
    byte[] pdfData = GetPdfFromDatabase(documentId);
    // Load PDF document from bytes
    var PDF = PdfDocument.FromBytes(pdfData);
    // Optionally sign or modify the PDF
    // pdf.SignWithDigitalCertificate(...);
    // Set response headers for inline display
    Response.Headers.Add("Content-Disposition",
                        $"inline; filename=document_{documentId}.pdf");
    Response.Headers.Add("Content-Length", pdfData.Length.ToString());
    // Return file to open in browser
    return File(pdfData, "application/pdf");
}
public IActionResult DisplayFromDatabase(int documentId)
{
    // Retrieve byte array from database or system
    byte[] pdfData = GetPdfFromDatabase(documentId);
    // Load PDF document from bytes
    var PDF = PdfDocument.FromBytes(pdfData);
    // Optionally sign or modify the PDF
    // pdf.SignWithDigitalCertificate(...);
    // Set response headers for inline display
    Response.Headers.Add("Content-Disposition",
                        $"inline; filename=document_{documentId}.pdf");
    Response.Headers.Add("Content-Length", pdfData.Length.ToString());
    // Return file to open in browser
    return File(pdfData, "application/pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

對於需要將 HTML 物件標籤與 Literal 控制項整合的場景,IronPDF 支援進階 HTML 到 PDF 轉換,包括 CSS 樣式、圖像,甚至Web 字體。 該庫還提供全面的故障排除指南,以實現像素級的完美效果。 這樣您就可以輕鬆存取文件資料。

結論

使用 IronPDF,學習如何在 ASP.NET C# 中在新視窗中開啟 PDF 檔案變得非常簡單。 透過處理複雜的 PDF 產生過程並正確設定 HTTP 標頭,開發人員可以確保在各種瀏覽器上一致顯示,同時保持程式碼的簡潔性和可維護性。 無論您是處理 HTML 字串、現有 PDF 文件或來自資料庫的位元組數組,IronPDF 都能提供所需的工具,以使用者期望的方式交付 PDF 內容。

立即開始 IronPDF 免費試用,在您的 ASP.NET 應用程式中實現專業的 PDF 功能。 對於生產環境部署,請了解我們的授權選項,其中包括全面的支援和針對企業級 Web 應用程式的附加功能。

常見問題解答

如何使用 ASP.NET 和 C# 在新的瀏覽器標籤中開啟 PDF?

若要使用 ASP.NET 和 C# 在新的瀏覽器標籤中開啟 PDF,您可以使用 IronPDF for .NET 來產生和串流 PDF 文件。透過在您的回應中設定正確的 HTTP 標頭,您可以確保 PDF 在新的索引標籤中開啟,而不是下載。

在瀏覽器標籤中顯示 PDF 有什麼好處?

在瀏覽器索引標籤中顯示 PDF 可讓使用者直接在瀏覽器中檢視文件,而無需先下載文件,進而提升使用者體驗。這種方式也能讓使用者在您的網站上停留更長的時間,並維持他們瀏覽會話的情境。

如何設定 HTTP 標頭以在新標籤頁開啟 PDF?

若要設定在新索引標籤中開啟 PDF 的 HTTP 標頭,請確保使用「Content-Disposition: inline; filename="yourfile.pdf"」。這個標頭會建議瀏覽器嘗試在瀏覽器視窗內以內嵌方式顯示 PDF。

JavaScript 可以用來在新視窗中開啟 PDF 嗎?

是的,JavaScript 可用於在新視窗中開啟 PDF。透過建立目標屬性設定為 '_blank' 的超連結元素,您可以確保 PDF 在新的瀏覽器索引標籤或視窗中開啟。

IronPDF 是否支援 ASP.NET 中的各種 PDF 功能?

是的,IronPDF for .NET 支援 ASP.NET 中廣泛的 PDF 功能,包括建立、編輯和渲染 PDF,以及在瀏覽器標籤中打開 PDF。

是否可以自訂 PDF 在瀏覽器標籤中顯示的外觀?

雖然自訂 PDF 本身的外觀是透過 PDF 生成過程完成,但 PDF 在瀏覽器標籤中的顯示方式則取決於瀏覽器的 PDF 檢視器功能。IronPDF 有助于生成在浏览器中呈现良好的高质量 PDF。

IronPDF 在改善 Web 應用程式中的 PDF 顯示方面扮演什麼角色?

IronPDF 為開發人員提供以程式化方式產生和處理 PDF 的工具,確保 PDF 在瀏覽器中的最佳化顯示,並滿足特定使用者的需求,進而增強 PDF 在網頁應用程式中的顯示效果。

IronPDF 能否高效處理大型 PDF 檔案?

是的,IronPDF 旨在高效處理大型 PDF 檔案,提供效能最佳化,確保在新的瀏覽器索引標籤中開啟 PDF 檔案時,能快速渲染並縮短載入時間。

IronPDF 如何確保不同瀏覽器之間的相容性?

IronPdf 生成符合标准的 PDF 文件,可兼容不同的浏览器,确保用户无论选择何种浏览器,都能获得一致的浏览体验。

Curtis Chau
技術作家

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

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