跳過到頁腳內容
USING IRONPDF

How to Create an ASP.NET Core MVC PdfViewer with IronPDF

使用 IronPDF 基於 Chrome 的渲染引擎建立 ASP.NET Core MVC PDF 檢視器,以在瀏覽器中內嵌顯示 PDF 文件,從 HTML 內容產生動態 PDF,並控制使用者是查看還是下載文件——所有這些都不需要外部插件或依賴項。

現代瀏覽器都內建了 PDF 檢視器,當 Web 應用程式提供具有正確 MIME 類型的 PDF 檔案時,該檢視器會自動啟動。 這樣就無需使用第三方工具或插件,使用者可以直接在瀏覽器中顯示 PDF 文件。 IronPDF是一個經常更新的 .NET PDF 庫,它使在 ASP.NET Core MVC 應用程式中產生、渲染和顯示 PDF 檔案變得簡單。

在本文中,我們將向您展示如何使用 IronPDF 的基於 Chrome 的渲染引擎建立一個 ASP.NET Core MVC PDF 檢視器 Web 應用程式。 本指南的主要重點是在保持高性能的同時,實現像素級的完美效果

!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--

現代瀏覽器如何顯示PDF檔案?

Chrome、Firefox、Edge 和 Safari 等現代瀏覽器都內建了 PDF 檢視器功能。 當您的 ASP.NET Core 應用程式傳回 application/pdf 內容類型的檔案時,瀏覽器會將 PDF 文件內嵌呈現,而無需 Adobe Acrobat 或外部插件。 這款內建的 PDF 檢視器支援文字選擇、列印、縮放控制、書籤和頁面導航等基本功能,從而打造完整的文件檢視體驗。

為了安全地提供現有文件,最佳實踐是使用託管環境來定位它們,而不是依賴開發和生產之間可能會發生變化的目錄路徑。 此外,對於大型文檔,使用文件流通常比載入整個位元組數組更節省記憶體。

using Microsoft.AspNetCore.Mvc;
public class DocumentController : Controller
{
    public IActionResult ViewPdf()
    {
        // Path to an existing PDF file in the wwwroot folder
        string path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "documents", "sample.pdf");
        byte[] fileBytes = System.IO.File.ReadAllBytes(path);
        // Return file for inline browser display
        return File(fileBytes, "application/pdf");
    }
}
using Microsoft.AspNetCore.Mvc;
public class DocumentController : Controller
{
    public IActionResult ViewPdf()
    {
        // Path to an existing PDF file in the wwwroot folder
        string path = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "documents", "sample.pdf");
        byte[] fileBytes = System.IO.File.ReadAllBytes(path);
        // Return file for inline browser display
        return File(fileBytes, "application/pdf");
    }
}
Imports Microsoft.AspNetCore.Mvc

Public Class DocumentController
    Inherits Controller

    Public Function ViewPdf() As IActionResult
        ' Path to an existing PDF file in the wwwroot folder
        Dim path As String = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "documents", "sample.pdf")
        Dim fileBytes As Byte() = System.IO.File.ReadAllBytes(path)
        ' Return file for inline browser display
        Return File(fileBytes, "application/pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

這種簡單的方法可以有效地提供儲存在伺服器上的靜態 PDF 檔案。 對於更高級的場景,您可能需要從記憶體或Azure Blob 儲存裝置載入 PDF ,這樣可以提高可擴充性並減少伺服器儲存需求。

PDF檔案在瀏覽器中顯示時是什麼樣子?

一個關於"什麼是 PDF?"的 PDF 文件在本機 7162/Pdf/ViewPdf 的網頁瀏覽器中顯示,以 PDF 檢視器介面呈現格式化的文字內容,並帶有縮放控制項和導覽選項。

上面的程式碼從伺服器讀取一個現有的 PDF 文件,並將其傳回給瀏覽器。 File() 方法接受一個位元組陣列和一個內容類型,指示瀏覽器的文件檢視器以內嵌方式渲染內容。這種方法適用於所有現代瀏覽器,無論是在桌面端還是行動裝置上,都能為所有使用者提供一致的體驗。

開發者如何動態產生PDF文件?

靜態 PDF 文件雖然有用,但許多 Web 應用程式需要動態產生的文件。 IronPDF 的ChromePdfRenderer類別可以將 HTML 內容轉換為專業渲染的 PDF 檔案。 首先,透過 Visual Studio 中的NuGet 套件安裝 IronPDF 即可開始使用。

您可以直接在 HTML 字串中包含外部資源,例如特定主題的 CSS圖表的 JavaScript 。 渲染引擎支援現代網頁標準,包括 CSS3、JavaScript ES6+ 和網頁字體

using IronPdf;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
    public IActionResult GenerateReport()
    {
        var renderer = new ChromePdfRenderer();
        // HTML content with CSS styling
        string html = @"
            <html>
            <head>
                <style>
                    body { font-family: Arial, sans-serif; padding: 40px; }
                    h1 { color: #2c3e50; }
                    .report-body { line-height: 1.6; }
                </style>
            </head>
            <body>
                <h1>Monthly Sales Report</h1>
                <div class='report-body'>
                    <p>Generated: " + DateTime.Now.ToString("MMMM dd, yyyy") + @"</p>
                    <p>This report contains the latest sales figures.</p>
                </div>
            </body>
            </html>";
        PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
        return File(pdf.BinaryData, "application/pdf");
    }
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
    public IActionResult GenerateReport()
    {
        var renderer = new ChromePdfRenderer();
        // HTML content with CSS styling
        string html = @"
            <html>
            <head>
                <style>
                    body { font-family: Arial, sans-serif; padding: 40px; }
                    h1 { color: #2c3e50; }
                    .report-body { line-height: 1.6; }
                </style>
            </head>
            <body>
                <h1>Monthly Sales Report</h1>
                <div class='report-body'>
                    <p>Generated: " + DateTime.Now.ToString("MMMM dd, yyyy") + @"</p>
                    <p>This report contains the latest sales figures.</p>
                </div>
            </body>
            </html>";
        PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
        return File(pdf.BinaryData, "application/pdf");
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

Public Class ReportController
    Inherits Controller

    Public Function GenerateReport() As IActionResult
        Dim renderer As New ChromePdfRenderer()
        ' HTML content with CSS styling
        Dim html As String = "
            <html>
            <head>
                <style>
                    body { font-family: Arial, sans-serif; padding: 40px; }
                    h1 { color: #2c3e50; }
                    .report-body { line-height: 1.6; }
                </style>
            </head>
            <body>
                <h1>Monthly Sales Report</h1>
                <div class='report-body'>
                    <p>Generated: " & DateTime.Now.ToString("MMMM dd, yyyy") & "</p>
                    <p>This report contains the latest sales figures.</p>
                </div>
            </body>
            </html>"
        Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
        Return File(pdf.BinaryData, "application/pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

PDF產生後,HTML內容會如何顯示?

! PDF 檢視器顯示一份每月銷售報告,其中包含格式化的標題文字和生成日期,演示了透過 IronPDF 將 HTML 轉換為 PDF 並套用自訂 CSS 樣式的過程。

此範例示範了 IronPDF 如何將HTML 字串轉換為 PDF文件。 ChromePdfRenderer使用基於 Chromium 的引擎,確保準確的 CSS 渲染和 JavaScript 支援。 產生的 PDF 文件保留了 HTML 中定義的所有樣式,因此非常適合建立報告發票和其他需要一致格式的文件。 控制器處理請求並將渲染後的輸出傳回給使用者。

有關HTML 轉 PDF 轉換的更多資訊和程式碼範例,請查閱 IronPDF 的綜合文件。 您也可以從CSHTML Razor 視圖URL甚至Markdown 內容產生 PDF。

在線上顯示和下載之間有哪些選項?

有時用戶需要下載 PDF 檔案而不是在瀏覽器中查看。 您可以在主頁上放置一個鏈接,引導用戶查看這些報告。 瀏覽器如何處理回應取決於Content-Disposition標頭。 理解這種差異對於提供正確的使用者體驗至關重要。

using IronPdf;
using Microsoft.AspNetCore.Mvc;
public class PdfController : Controller
{
    public IActionResult DisplayInline()
    {
        var renderer = new ChromePdfRenderer();
        // Configure rendering options for better output
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
        renderer.RenderingOptions.MarginTop = 25;
        renderer.RenderingOptions.MarginBottom = 25;

        PdfDocument pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_42___");
        // Display PDF inline in browser
        return File(pdf.BinaryData, "application/pdf");
    }

    public IActionResult DownloadPdf()
    {
        var renderer = new ChromePdfRenderer();
        // Set additional options for downloaded PDFs
        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
        renderer.RenderingOptions.EnableJavaScript = true;

        PdfDocument pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_43___");
        // Prompt download with specified filename
        return File(pdf.BinaryData, "application/pdf", "webpage-report.pdf");
    }
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;
public class PdfController : Controller
{
    public IActionResult DisplayInline()
    {
        var renderer = new ChromePdfRenderer();
        // Configure rendering options for better output
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
        renderer.RenderingOptions.MarginTop = 25;
        renderer.RenderingOptions.MarginBottom = 25;

        PdfDocument pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_42___");
        // Display PDF inline in browser
        return File(pdf.BinaryData, "application/pdf");
    }

    public IActionResult DownloadPdf()
    {
        var renderer = new ChromePdfRenderer();
        // Set additional options for downloaded PDFs
        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
        renderer.RenderingOptions.EnableJavaScript = true;

        PdfDocument pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_43___");
        // Prompt download with specified filename
        return File(pdf.BinaryData, "application/pdf", "webpage-report.pdf");
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

Public Class PdfController
    Inherits Controller

    Public Function DisplayInline() As IActionResult
        Dim renderer As New ChromePdfRenderer()
        ' Configure rendering options for better output
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait
        renderer.RenderingOptions.MarginTop = 25
        renderer.RenderingOptions.MarginBottom = 25

        Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("___PROTECTED_URL_42___")
        ' Display PDF inline in browser
        Return File(pdf.BinaryData, "application/pdf")
    End Function

    Public Function DownloadPdf() As IActionResult
        Dim renderer As New ChromePdfRenderer()
        ' Set additional options for downloaded PDFs
        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
        renderer.RenderingOptions.EnableJavaScript = True

        Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("___PROTECTED_URL_43___")
        ' Prompt download with specified filename
        Return File(pdf.BinaryData, "application/pdf", "webpage-report.pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

何時應該使用內聯顯示而不是下載顯示?

螢幕截圖顯示了維基百科主頁轉換為 PDF 格式後,在瀏覽器視窗中以內嵌方式顯示,並帶有 PDF 檢視器控件,包括縮放、頁面導航和列印選項。

這兩個控制器操作的差異在於 File() 方法的第三個參數。 當您提供檔案名稱時,ASP.NET Core 會自動新增Content-Disposition: attachment標頭,提示使用者下載檔案。如果省略檔案名稱參數,則使用預設的內嵌顯示模式。

這種靈活性使您的應用程式能夠根據使用者需求或專案要求支援不同的查看場景。 為了增強控制,您還可以實現自訂頁首或配置紙張尺寸方向設定

Razor Pages 如何與 .NET Core PDF 產生整合?

ASP.NET Core MVC 中的 Razor Pages 為實作 .NET PDF 檢視器提供了另一種方法。 頁面模型可以使用與 IronPDF 相同的功能來產生和返回 PDF 檔案。 這種模式對於已經使用 Razor Pages 作為其架構的應用程式來說尤其有效。

using IronPdf;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
public class InvoiceModel : PageModel
{
    public IActionResult OnGet(int id)
    {
        var renderer = new ChromePdfRenderer();
        // Configure rendering options
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

        // Add header and footer
        renderer.RenderingOptions.TextHeader.CenterText = "Invoice Document";
        renderer.RenderingOptions.TextFooter.RightText = "Page {page} of {total-pages}";
        renderer.RenderingOptions.TextFooter.FontSize = 10;

        string html = $@"
            <html>
            <head>
                <style>
                    body {{ font-family: 'Segoe UI', Arial, sans-serif; padding: 40px; }}
                    h1 {{ color: #1a5490; border-bottom: 2px solid #1a5490; padding-bottom: 10px; }}
                    .invoice-details {{ margin: 20px 0; }}
                    table {{ width: 100%; border-collapse: collapse; }}
                    th, td {{ padding: 10px; text-align: left; border-bottom: 1px solid #ddd; }}
                </style>
            </head>
            <body>
                <h1>Invoice #{id}</h1>
                <div class='invoice-details'>
                    <p><strong>Date:</strong> {DateTime.Now:yyyy-MM-dd}</p>
                    <p><strong>Due Date:</strong> {DateTime.Now.AddDays(30):yyyy-MM-dd}</p>
                </div>
                <table>
                    <tr>
                        <th>Description</th>
                        <th>Amount</th>
                    </tr>
                    <tr>
                        <td>Professional Services</td>
                        <td>$1,500.00</td>
                    </tr>
                </table>
                <p style='margin-top: 40px;'>Thank you for your business!</p>
            </body>
            </html>";

        PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
        return File(pdf.BinaryData, "application/pdf");
    }
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
public class InvoiceModel : PageModel
{
    public IActionResult OnGet(int id)
    {
        var renderer = new ChromePdfRenderer();
        // Configure rendering options
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

        // Add header and footer
        renderer.RenderingOptions.TextHeader.CenterText = "Invoice Document";
        renderer.RenderingOptions.TextFooter.RightText = "Page {page} of {total-pages}";
        renderer.RenderingOptions.TextFooter.FontSize = 10;

        string html = $@"
            <html>
            <head>
                <style>
                    body {{ font-family: 'Segoe UI', Arial, sans-serif; padding: 40px; }}
                    h1 {{ color: #1a5490; border-bottom: 2px solid #1a5490; padding-bottom: 10px; }}
                    .invoice-details {{ margin: 20px 0; }}
                    table {{ width: 100%; border-collapse: collapse; }}
                    th, td {{ padding: 10px; text-align: left; border-bottom: 1px solid #ddd; }}
                </style>
            </head>
            <body>
                <h1>Invoice #{id}</h1>
                <div class='invoice-details'>
                    <p><strong>Date:</strong> {DateTime.Now:yyyy-MM-dd}</p>
                    <p><strong>Due Date:</strong> {DateTime.Now.AddDays(30):yyyy-MM-dd}</p>
                </div>
                <table>
                    <tr>
                        <th>Description</th>
                        <th>Amount</th>
                    </tr>
                    <tr>
                        <td>Professional Services</td>
                        <td>$1,500.00</td>
                    </tr>
                </table>
                <p style='margin-top: 40px;'>Thank you for your business!</p>
            </body>
            </html>";

        PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
        return File(pdf.BinaryData, "application/pdf");
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.AspNetCore.Mvc.RazorPages

Public Class InvoiceModel
    Inherits PageModel

    Public Function OnGet(id As Integer) As IActionResult
        Dim renderer As New ChromePdfRenderer()
        ' Configure rendering options
        renderer.RenderingOptions.MarginTop = 20
        renderer.RenderingOptions.MarginBottom = 20
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4

        ' Add header and footer
        renderer.RenderingOptions.TextHeader.CenterText = "Invoice Document"
        renderer.RenderingOptions.TextFooter.RightText = "Page {page} of {total-pages}"
        renderer.RenderingOptions.TextFooter.FontSize = 10

        Dim html As String = $"
            <html>
            <head>
                <style>
                    body {{ font-family: 'Segoe UI', Arial, sans-serif; padding: 40px; }}
                    h1 {{ color: #1a5490; border-bottom: 2px solid #1a5490; padding-bottom: 10px; }}
                    .invoice-details {{ margin: 20px 0; }}
                    table {{ width: 100%; border-collapse: collapse; }}
                    th, td {{ padding: 10px; text-align: left; border-bottom: 1px solid #ddd; }}
                </style>
            </head>
            <body>
                <h1>Invoice #{id}</h1>
                <div class='invoice-details'>
                    <p><strong>Date:</strong> {DateTime.Now:yyyy-MM-dd}</p>
                    <p><strong>Due Date:</strong> {DateTime.Now.AddDays(30):yyyy-MM-dd}</p>
                </div>
                <table>
                    <tr>
                        <th>Description</th>
                        <th>Amount</th>
                    </tr>
                    <tr>
                        <td>Professional Services</td>
                        <td>$1,500.00</td>
                    </tr>
                </table>
                <p style='margin-top: 40px;'>Thank you for your business!</p>
            </body>
            </html>"

        Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
        Return File(pdf.BinaryData, "application/pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

PDF自訂有哪些渲染選項?

PDF 檢視器以專業格式顯示第 20 號發票,包括樣式化的標題、到期日資訊和感謝訊息,並在深色主題瀏覽器介面中顯示

此 Razor Pages 範例示範了OnGet處理程序如何根據 URL 參數產生 PDF。 RenderingOptions屬性允許自訂邊距、頁面方向和其他設定。 您也可以新增頁首和頁腳,配置頁碼,或設定自訂紙張尺寸。 如需了解更多信息,請查閱 IronPDF 的渲染選項文件

高級功能包括浮水印PDF壓縮和數位簽章。 您還可以實現表單建立合併多個 PDF 文件,以實現更複雜的文件工作流程。

建立 PDF 檢視器的關鍵要點是什麼?

建立一個用於 PDF 文件的 ASP.NET Core MVC 檢視器,將瀏覽器原生功能與 IronPDF 的強大生成功能結合。 現代瀏覽器內建的 PDF 檢視器會在 ASP.NET 控制器傳回具有正確 MIME 類型的檔案時自動處理顯示、列印和導航功能。 IronPDF 簡化了從 HTML、URL 或現有文件建立專業 PDF 文件的過程,並完全支援 CSS、JavaScript 和自訂渲染選項。

在 ASP.NET Core 中使用 IronPDF 檢視 PDF 檔案的主要優點包括:

  • 無需外部檢視器插件 Chrome渲染引擎確保HTML/CSS渲染的準確性
  • 支援 JavaScript 和動態內容
  • 提供靈活的線上檢視和文件下載選項
  • 提供豐富的自訂選項,實現專業輸出
  • 支援跨平台,包括 Linux 和 Docker

無論是建立用於顯示 PDF 文件的簡單文件檢視器,還是實現完整的報表產生系統,IronPDF 都提供了無縫 PDF 整合所需的工具和功能。 該程式庫可與您的 ASP.NET Core Web 應用程式無縫集成,同時支援傳統的 MVC 控制器和現代的 Razor Pages 方法。

對於生產環境部署,請考慮非同步渲染和適當的記憶體管理效能最佳化技術。 您也可以探索進階功能,例如用於長期存檔的PDF/A 合規性或用於敏感文件的PDF 安全性

立即開始免費試用,探索 IronPDF 的全部功能,或購買許可證用於生產環境。 請造訪我們的完整文檔,以了解更多高級功能和最佳實踐。

常見問題解答

如何在 ASP.NET Core MVC 應用程式中顯示 PDF 檔案?

您可以使用 IronPDF for .NET 在 ASP.NET Core MVC 應用程式中顯示 PDF 檔案。它允許您使用現代的內建 PDF 檢視器直接在瀏覽器中產生、渲染和顯示 PDF 檔案。

在瀏覽器中檢視 PDF 是否需要第三方外掛程式?

不,現代瀏覽器已內建 PDF 檢視器,可在提供具有正確 MIME 類型的 PDF 檔案時自動啟動。IronPDF 可協助確保您的 PDF 正確提供。

在 ASP.NET Core MVC 中使用 IronPDF 有何優勢?

IronPDF for .NET 是一個 .NET PDF 函式庫,可簡化在 ASP.NET Core MVC 應用程式中產生和渲染 PDF 文件的流程,提高生產力並簡化 PDF 管理。

IronPDF 可與現有的瀏覽器 PDF 檢視器搭配使用嗎?

是的,IronPDF 可與現有的瀏覽器 PDF 檢視器無縫配合,確保 PDF 以正確的 MIME 類型提供,以便在瀏覽器中自動顯示。

IronPdf 是否經常更新?

是的,IronPDF 是一個經常更新的 .NET PDF 函式庫,提供在 ASP.NET Core MVC 應用程式中處理 PDF 文件的最新功能和改進。

IronPDF 如何處理 Web 應用程式中的 PDF 生成?

IronPDF 提供從各種內容類型產生 PDF 的強大功能,讓開發人員可以在 Web 應用程式中建立動態且互動的 PDF 文件。

應使用何種 MIME 類型來提供 PDF 檔案?

為了確保在瀏覽器中正常顯示,PDF 檔案應使用 MIME 類型「application/pdf」。IronPDF 可協助有效管理這方面的工作。

我可以自訂 IronPDF 中的 PDF 渲染方式嗎?

是的,IronPDF 提供廣泛的自訂選項來渲染 PDF,讓您可以量身訂做輸出,以符合特定的設計和功能需求。

IronPDF 是否僅支援 ASP.NET Core MVC 應用程式?

雖然 IronPDF 非常適合 ASP.NET Core MVC 應用程式,但它也具有多樣性,可搭配其他 .NET 應用程式來處理 PDF 功能。

Curtis Chau
技術撰稿人

Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。