跳過到頁腳內容
USING IRONPDF

How to Create a PDF Viewer in ASP.NET Web Application with IronPDF

IronPDF 透過產生伺服器端 PDF,直接在瀏覽器的內建檢視器中顯示,在 ASP.NET Core 應用程式中實現無縫的 PDF 檢視,無需外掛程式或外部相依性-只需配置回應標頭,然後讓 IronPDF基於 Chrome 的渲染引擎處理HTML 到 PDF 的轉換即可。

建立用於顯示PDF文件的網路應用程式很簡單。 無論您是展示發票、報告還是互動式表單,使用者都希望獲得流暢的瀏覽器內文件檢視體驗—無需 Adobe Acrobat Reader 或其他第三方工具。

IronPDF 讓這一切變得異常簡單。 這個經常更新的.NET 程式庫可讓您使用幾行程式碼在 ASP.NET Core 專案中建立、渲染和顯示 PDF 檔案。 讓我們深入了解如何實現一個專業的PDF 檢視器控件,它可以處理從簡單的HTML 轉換到複雜的Razor 視圖的一切操作。

基於瀏覽器的PDF檢視是如何運作的?

好消息是:現代瀏覽器已經內建了 PDF 檢視器。 當您的伺服器傳送的 PDF 檔案具有正確的 MIME 類型( application/pdf )時,瀏覽器會自動將其內嵌顯示。這意味著您無需外部插件或複雜的客戶端 JavaScript 程式庫即可查看 PDF 文件

關鍵在於產生高品質的PDF文件並配置正確的回應標頭。 IronPDF 在伺服器端處理繁重的工作,使用其Chrome 渲染引擎從 HTML、CSS 和JavaScript創建像素級完美的PDF 頁面。 結果如何? 您的使用者將獲得原生文件檢視器體驗,具備文字選擇、搜尋、列印和下載等功能,而無需任何額外的 UI 配置。 您可以輕鬆地嵌入和顯示內容。

這種方法可以無縫地應用於所有.NET 應用程序,無論您是使用ASP.NET Core MVCRazor 視圖構建,還是使用傳統的 Web 資料夾專案構建。 對於容器化部署,IronPDF 提供出色的Docker 支持,依賴項極少,使其成為微服務架構的理想選擇。

如何安裝和設定 PDF 檢視器控制項?

在 Visual Studio 中開始使用 IronPDF 只需幾個步驟。 開啟您的 ASP.NET Core 專案並安裝NuGet 套件

Install-Package IronPdf

對於容器化環境,IronPDF 提供官方 Docker 映像,並支援LinuxWindows 容器。 該程式庫會自動處理Chrome 依賴項和字型安裝,從而最大限度地降低部署複雜度。

接下來,在Program.cs中新增您的許可證金鑰配置

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

對於Azure 部署,您可以將許可證金鑰儲存在 Azure Key Vault 或環境變數中。 IronPDF 也支援AWS Lambda和其他雲端平台,並優化了效能設定

這就是將 IronPDF 完全整合到您的.NET 應用程式中所需的所有設定。 有關Azure 部署Docker 容器等進階場景的其他設定選項,請參閱IronPDF 的文件。 您可以先免費試用,在正式購買前體驗所有功能

如何從 HTML 產生和顯示 PDF 文件?

在 ASP.NET Core Web 應用程式中建立 PDF 檢視器的最簡單方法是直接轉換 HTML 字串。 以下是一個完整的容器編排控制器範例,其中包含健康檢查端點:

using IronPdf;
using Microsoft.AspNetCore.Mvc;

public class PdfController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public PdfController()
    {
        _renderer = new ChromePdfRenderer();
        // Configure for container environments
        _renderer.RenderingOptions.WaitFor.RenderDelay = 100; // ms
        _renderer.RenderingOptions.Timeout = 30000; // 30 seconds
    }

    public IActionResult DisplayFromHtml()
    {
        // Create PDF from HTML with CSS styling
        var html = @"
            <html>
            <head>
                <style>
                    body { font-family: Arial; padding: 20px; }
                    h1 { color: #2c3e50; }
                    .content { line-height: 1.6; }
                </style>
            </head>
            <body>
                <h1>Sample PDF Document</h1>
                <p class='content'>This PDF was generated using IronPDF in ASP.NET Core.</p>
            </body>
            </html>";
        var pdf = _renderer.RenderHtmlAsPdf(html);
        // Display PDF inline in browser
        Response.Headers.Add("Content-Disposition", "inline; filename=document.pdf");
        return File(pdf.BinaryData, "application/pdf");
    }

    // Health check endpoint for Kubernetes readiness probe
    [HttpGet("health")]
    public IActionResult Health()
    {
        try
        {
            var test = _renderer.RenderHtmlAsPdf("<p>Health check</p>");
            return Ok(new { status = "healthy", engine = "ready" });
        }
        catch
        {
            return StatusCode(503, new { status = "unhealthy" });
        }
    }
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;

public class PdfController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public PdfController()
    {
        _renderer = new ChromePdfRenderer();
        // Configure for container environments
        _renderer.RenderingOptions.WaitFor.RenderDelay = 100; // ms
        _renderer.RenderingOptions.Timeout = 30000; // 30 seconds
    }

    public IActionResult DisplayFromHtml()
    {
        // Create PDF from HTML with CSS styling
        var html = @"
            <html>
            <head>
                <style>
                    body { font-family: Arial; padding: 20px; }
                    h1 { color: #2c3e50; }
                    .content { line-height: 1.6; }
                </style>
            </head>
            <body>
                <h1>Sample PDF Document</h1>
                <p class='content'>This PDF was generated using IronPDF in ASP.NET Core.</p>
            </body>
            </html>";
        var pdf = _renderer.RenderHtmlAsPdf(html);
        // Display PDF inline in browser
        Response.Headers.Add("Content-Disposition", "inline; filename=document.pdf");
        return File(pdf.BinaryData, "application/pdf");
    }

    // Health check endpoint for Kubernetes readiness probe
    [HttpGet("health")]
    public IActionResult Health()
    {
        try
        {
            var test = _renderer.RenderHtmlAsPdf("<p>Health check</p>");
            return Ok(new { status = "healthy", engine = "ready" });
        }
        catch
        {
            return StatusCode(503, new { status = "unhealthy" });
        }
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

Public Class PdfController
    Inherits Controller

    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer()
        ' Configure for container environments
        _renderer.RenderingOptions.WaitFor.RenderDelay = 100 ' ms
        _renderer.RenderingOptions.Timeout = 30000 ' 30 seconds
    End Sub

    Public Function DisplayFromHtml() As IActionResult
        ' Create PDF from HTML with CSS styling
        Dim html As String = "
            <html>
            <head>
                <style>
                    body { font-family: Arial; padding: 20px; }
                    h1 { color: #2c3e50; }
                    .content { line-height: 1.6; }
                </style>
            </head>
            <body>
                <h1>Sample PDF Document</h1>
                <p class='content'>This PDF was generated using IronPDF in ASP.NET Core.</p>
            </body>
            </html>"
        Dim pdf = _renderer.RenderHtmlAsPdf(html)
        ' Display PDF inline in browser
        Response.Headers.Add("Content-Disposition", "inline; filename=document.pdf")
        Return File(pdf.BinaryData, "application/pdf")
    End Function

    ' Health check endpoint for Kubernetes readiness probe
    <HttpGet("health")>
    Public Function Health() As IActionResult
        Try
            Dim test = _renderer.RenderHtmlAsPdf("<p>Health check</p>")
            Return Ok(New With {Key .status = "healthy", Key .engine = "ready"})
        Catch
            Return StatusCode(503, New With {Key .status = "unhealthy"})
        End Try
    End Function
End Class
$vbLabelText   $csharpLabel

瀏覽器中產生的 PDF 檔案是什麼樣子的?

瀏覽器正在顯示一個標題為"範例 PDF 文件"且文字為"此 PDF 文檔使用 ASP.NET Core 中的 IronPDF 產生"的 PDF 文檔,該文件位於 localhost:7254/Pdf/DisplayFromHtml

ChromePdfRenderer類別使用 Chromium 進行精確渲染,確保您的CSSJavaScript圖像能夠完全按照預期顯示。 將Content-Disposition設為 inline 會告訴瀏覽器直接顯示 PDF 文件,而不是下載它。

這樣就能創造無縫的檢視體驗,使用戶可以直接在您的網頁使用者介面中存取文件。 對於佈局複雜的文檔,您可以在 HTML 中或使用RenderingOptions指定寬度和高度等渲染設定WaitFor 選項可確保在容器化環境中正確渲染,因為網路延遲可能會影響資源載入。

如需了解更多 HTML 轉換選項,請查看HTML 字串轉 PDF 指南效能最佳化技巧

如何透過 URL 和 Razor 視圖渲染 PDF 檔案?

IronPDF也可以將即時網頁轉換為PDF文件。 這非常適合在分散式系統中產生報表或存檔 Web 內容:

public IActionResult RenderFromUrl(string url = "___PROTECTED_URL_92___")
{
    var renderer = new ChromePdfRenderer();
    // Configure for production environments
    renderer.RenderingOptions.EnableJavaScript = true;
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
    renderer.RenderingOptions.WaitFor.NetworkIdle = 2000; // Wait for network idle
    renderer.RenderingOptions.PaperFit.UseChromeDefaultRendering = false; // Consistent across environments

    var pdf = renderer.RenderUrlAsPdf(url);
    Response.Headers.Add("Content-Disposition", "inline; filename=webpage.pdf");
    // Add caching headers for CDN distribution
    Response.Headers.Add("Cache-Control", "public, max-age=3600");
    return File(pdf.BinaryData, "application/pdf");
}
public IActionResult RenderFromUrl(string url = "___PROTECTED_URL_92___")
{
    var renderer = new ChromePdfRenderer();
    // Configure for production environments
    renderer.RenderingOptions.EnableJavaScript = true;
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
    renderer.RenderingOptions.WaitFor.NetworkIdle = 2000; // Wait for network idle
    renderer.RenderingOptions.PaperFit.UseChromeDefaultRendering = false; // Consistent across environments

    var pdf = renderer.RenderUrlAsPdf(url);
    Response.Headers.Add("Content-Disposition", "inline; filename=webpage.pdf");
    // Add caching headers for CDN distribution
    Response.Headers.Add("Cache-Control", "public, max-age=3600");
    return File(pdf.BinaryData, "application/pdf");
}
Public Function RenderFromUrl(Optional url As String = "___PROTECTED_URL_92___") As IActionResult
    Dim renderer = New ChromePdfRenderer()
    ' Configure for production environments
    renderer.RenderingOptions.EnableJavaScript = True
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
    renderer.RenderingOptions.WaitFor.NetworkIdle = 2000 ' Wait for network idle
    renderer.RenderingOptions.PaperFit.UseChromeDefaultRendering = False ' Consistent across environments

    Dim pdf = renderer.RenderUrlAsPdf(url)
    Response.Headers.Add("Content-Disposition", "inline; filename=webpage.pdf")
    ' Add caching headers for CDN distribution
    Response.Headers.Add("Cache-Control", "public, max-age=3600")
    Return File(pdf.BinaryData, "application/pdf")
End Function
$vbLabelText   $csharpLabel

基於URL的PDF渲染是如何顯示的?

! 這是使用 IronPDF 在 ASP.NET Web 應用程式中渲染的維基百科首頁的 PDF 檢視器螢幕截圖,顯示了主要頁面內容和導航元素,並保留了完整的 CSS 樣式。

要將Razor 視圖轉換為 PDF ,您需要一個輔助方法先將視圖渲染為 HTML。這種方法可讓您重複使用現有範本進行 Web 顯示和PDF 生成,這對於保持微服務之間的一致性至關重要:

public async Task<IActionResult> ViewToPdf()
{
    var invoiceModel = new InvoiceModel
    {
        InvoiceNumber = 1001,
        InvoiceDate = DateTime.Now,
        CustomerName = "Acme Corp.",
        Items = new List<ItemModel>
        {
            new ItemModel { Description = "Product A", Quantity = 2, UnitPrice = 50.00m },
            new ItemModel { Description = "Service B", Quantity = 1, UnitPrice = 150.00m }
        }
    };
    invoiceModel.TotalAmount = invoiceModel.Items.Sum(i => i.LineTotal);
    // NOTE: RenderViewToStringAsync uses the Request services and ActionContext
    var htmlContent = await RenderViewToStringAsync("Invoice", invoiceModel);

    var renderer = new IronPdf.ChromePdfRenderer();
    // Optimize for memory-constrained containers
    renderer.RenderingOptions.UseMarginsOnHeaderAndFooter = UseMargins.All;
    renderer.RenderingOptions.MarginTop = renderer.RenderingOptions.MarginBottom = 40;

    var pdf = renderer.RenderHtmlAsPdf(htmlContent, baseUrl: HttpContext.Request.Scheme + "://" + HttpContext.Request.Host);

    // Add monitoring metrics
    _logger.LogInformation($"PDF generated: Size={pdf.BinaryData.Length} bytes, Pages={pdf.PageCount}");

    return File(pdf.BinaryData, "application/pdf");
}
private async Task<string> RenderViewToStringAsync(string viewName, object model)
{
    // Use the current HttpContext's service provider (guaranteed available during a request)
    var actionContext = new ActionContext(HttpContext, RouteData, ControllerContext.ActionDescriptor);
    var viewEngine = HttpContext.RequestServices.GetRequiredService<IRazorViewEngine>();
    var tempDataFactory = HttpContext.RequestServices.GetRequiredService<ITempDataDictionaryFactory>();
    var tempData = tempDataFactory.GetTempData(HttpContext);
    ViewData.Model = model;
    var viewResult = viewEngine.FindView(actionContext, viewName, isMainPage: false);
    if (!viewResult.Success)
    {
        // Helpful error for debugging
        var searchedLocations = string.Join(Environment.NewLine, viewResult.SearchedLocations ?? Array.Empty<string>());
        throw new InvalidOperationException($"Couldn't find view '{viewName}'. Searched locations:{Environment.NewLine}{searchedLocations}");
    }
    await using var writer = new StringWriter();
    var viewContext = new ViewContext(
        actionContext,
        viewResult.View,
        ViewData,
        tempData,
        writer,
        new HtmlHelperOptions()
    );
    await viewResult.View.RenderAsync(viewContext);
    return writer.ToString();
}
public async Task<IActionResult> ViewToPdf()
{
    var invoiceModel = new InvoiceModel
    {
        InvoiceNumber = 1001,
        InvoiceDate = DateTime.Now,
        CustomerName = "Acme Corp.",
        Items = new List<ItemModel>
        {
            new ItemModel { Description = "Product A", Quantity = 2, UnitPrice = 50.00m },
            new ItemModel { Description = "Service B", Quantity = 1, UnitPrice = 150.00m }
        }
    };
    invoiceModel.TotalAmount = invoiceModel.Items.Sum(i => i.LineTotal);
    // NOTE: RenderViewToStringAsync uses the Request services and ActionContext
    var htmlContent = await RenderViewToStringAsync("Invoice", invoiceModel);

    var renderer = new IronPdf.ChromePdfRenderer();
    // Optimize for memory-constrained containers
    renderer.RenderingOptions.UseMarginsOnHeaderAndFooter = UseMargins.All;
    renderer.RenderingOptions.MarginTop = renderer.RenderingOptions.MarginBottom = 40;

    var pdf = renderer.RenderHtmlAsPdf(htmlContent, baseUrl: HttpContext.Request.Scheme + "://" + HttpContext.Request.Host);

    // Add monitoring metrics
    _logger.LogInformation($"PDF generated: Size={pdf.BinaryData.Length} bytes, Pages={pdf.PageCount}");

    return File(pdf.BinaryData, "application/pdf");
}
private async Task<string> RenderViewToStringAsync(string viewName, object model)
{
    // Use the current HttpContext's service provider (guaranteed available during a request)
    var actionContext = new ActionContext(HttpContext, RouteData, ControllerContext.ActionDescriptor);
    var viewEngine = HttpContext.RequestServices.GetRequiredService<IRazorViewEngine>();
    var tempDataFactory = HttpContext.RequestServices.GetRequiredService<ITempDataDictionaryFactory>();
    var tempData = tempDataFactory.GetTempData(HttpContext);
    ViewData.Model = model;
    var viewResult = viewEngine.FindView(actionContext, viewName, isMainPage: false);
    if (!viewResult.Success)
    {
        // Helpful error for debugging
        var searchedLocations = string.Join(Environment.NewLine, viewResult.SearchedLocations ?? Array.Empty<string>());
        throw new InvalidOperationException($"Couldn't find view '{viewName}'. Searched locations:{Environment.NewLine}{searchedLocations}");
    }
    await using var writer = new StringWriter();
    var viewContext = new ViewContext(
        actionContext,
        viewResult.View,
        ViewData,
        tempData,
        writer,
        new HtmlHelperOptions()
    );
    await viewResult.View.RenderAsync(viewContext);
    return writer.ToString();
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.Extensions.DependencyInjection
Imports Microsoft.Extensions.Logging
Imports IronPdf

Public Class YourController
    Inherits Controller

    Private ReadOnly _logger As ILogger(Of YourController)

    Public Sub New(logger As ILogger(Of YourController))
        _logger = logger
    End Sub

    Public Async Function ViewToPdf() As Task(Of IActionResult)
        Dim invoiceModel As New InvoiceModel With {
            .InvoiceNumber = 1001,
            .InvoiceDate = DateTime.Now,
            .CustomerName = "Acme Corp.",
            .Items = New List(Of ItemModel) From {
                New ItemModel With {.Description = "Product A", .Quantity = 2, .UnitPrice = 50.0D},
                New ItemModel With {.Description = "Service B", .Quantity = 1, .UnitPrice = 150.0D}
            }
        }
        invoiceModel.TotalAmount = invoiceModel.Items.Sum(Function(i) i.LineTotal)
        ' NOTE: RenderViewToStringAsync uses the Request services and ActionContext
        Dim htmlContent As String = Await RenderViewToStringAsync("Invoice", invoiceModel)

        Dim renderer As New ChromePdfRenderer()
        ' Optimize for memory-constrained containers
        renderer.RenderingOptions.UseMarginsOnHeaderAndFooter = UseMargins.All
        renderer.RenderingOptions.MarginTop = 40
        renderer.RenderingOptions.MarginBottom = 40

        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent, baseUrl:=HttpContext.Request.Scheme & "://" & HttpContext.Request.Host)

        ' Add monitoring metrics
        _logger.LogInformation($"PDF generated: Size={pdf.BinaryData.Length} bytes, Pages={pdf.PageCount}")

        Return File(pdf.BinaryData, "application/pdf")
    End Function

    Private Async Function RenderViewToStringAsync(viewName As String, model As Object) As Task(Of String)
        ' Use the current HttpContext's service provider (guaranteed available during a request)
        Dim actionContext As New ActionContext(HttpContext, RouteData, ControllerContext.ActionDescriptor)
        Dim viewEngine = HttpContext.RequestServices.GetRequiredService(Of IRazorViewEngine)()
        Dim tempDataFactory = HttpContext.RequestServices.GetRequiredService(Of ITempDataDictionaryFactory)()
        Dim tempData = tempDataFactory.GetTempData(HttpContext)
        ViewData.Model = model
        Dim viewResult = viewEngine.FindView(actionContext, viewName, isMainPage:=False)
        If Not viewResult.Success Then
            ' Helpful error for debugging
            Dim searchedLocations = String.Join(Environment.NewLine, viewResult.SearchedLocations ?? Array.Empty(Of String)())
            Throw New InvalidOperationException($"Couldn't find view '{viewName}'. Searched locations:{Environment.NewLine}{searchedLocations}")
        End If
        Await Using writer As New StringWriter()
            Dim viewContext As New ViewContext(
                actionContext,
                viewResult.View,
                ViewData,
                tempData,
                writer,
                New HtmlHelperOptions()
            )
            Await viewResult.View.RenderAsync(viewContext)
            Return writer.ToString()
        End Using
    End Function
End Class

Public Class InvoiceModel
    Public Property InvoiceNumber As Integer
    Public Property InvoiceDate As DateTime
    Public Property CustomerName As String
    Public Property Items As List(Of ItemModel)
    Public Property TotalAmount As Decimal
End Class

Public Class ItemModel
    Public Property Description As String
    Public Property Quantity As Integer
    Public Property UnitPrice As Decimal
    Public ReadOnly Property LineTotal As Decimal
        Get
            Return Quantity * UnitPrice
        End Get
    End Property
End Class
$vbLabelText   $csharpLabel

Razor View 產生 PDF 的結果是什麼?

網頁瀏覽器中顯示的 PDF 發票,發票編號為 1001,寄件人為 Acme 公司,包含兩項,總計 250.00 美元,表示 Razor 視圖到 PDF 的轉換已成功完成。

此輔助方法可確保您有清晰的路徑將Razor 視圖內容渲染為 HTML 字串,然後 IronPDF 可以對其進行轉換。 Razor 轉 PDF 教學詳細介紹了這個工作流程。 對於Blazor 應用程序,類似的方法也適用於元件渲染。

如何處理串流的大型PDF檔案?

在容器化環境中處理大型 PDF 文件時,串流可提高效能並減少記憶體使用。 使用MemoryStream可以有效率地提供檔案服務,同時保持較低的記憶體佔用:

public IActionResult StreamLargePdf()
{
    var renderer = new ChromePdfRenderer();
    // Configure for memory efficiency
    renderer.RenderingOptions.CreatePdfFormsFromHtml = false; // Reduce memory if forms not needed

    var pdf = renderer.RenderHtmlAsPdf("<h1>Large Document</h1><p>Content here...</p>");

    // Optional: Compress for reduced bandwidth
    pdf.CompressImages(80); // 80% quality

    var stream = new MemoryStream(pdf.BinaryData);

    // Set response headers for optimal streaming
    Response.Headers.Add("Content-Length", pdf.BinaryData.Length.ToString());
    Response.Headers.Add("Accept-Ranges", "bytes");

    return new FileStreamResult(stream, "application/pdf");
}

// Async version for better container performance
public async Task<IActionResult> StreamLargePdfAsync()
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Large Document</h1><p>Content here...</p>");

    var stream = new MemoryStream(pdf.BinaryData);
    return new FileStreamResult(stream, "application/pdf");
}
public IActionResult StreamLargePdf()
{
    var renderer = new ChromePdfRenderer();
    // Configure for memory efficiency
    renderer.RenderingOptions.CreatePdfFormsFromHtml = false; // Reduce memory if forms not needed

    var pdf = renderer.RenderHtmlAsPdf("<h1>Large Document</h1><p>Content here...</p>");

    // Optional: Compress for reduced bandwidth
    pdf.CompressImages(80); // 80% quality

    var stream = new MemoryStream(pdf.BinaryData);

    // Set response headers for optimal streaming
    Response.Headers.Add("Content-Length", pdf.BinaryData.Length.ToString());
    Response.Headers.Add("Accept-Ranges", "bytes");

    return new FileStreamResult(stream, "application/pdf");
}

// Async version for better container performance
public async Task<IActionResult> StreamLargePdfAsync()
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Large Document</h1><p>Content here...</p>");

    var stream = new MemoryStream(pdf.BinaryData);
    return new FileStreamResult(stream, "application/pdf");
}
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

Public Class PdfController
    Inherits Controller

    Public Function StreamLargePdf() As IActionResult
        Dim renderer As New ChromePdfRenderer()
        ' Configure for memory efficiency
        renderer.RenderingOptions.CreatePdfFormsFromHtml = False ' Reduce memory if forms not needed

        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Large Document</h1><p>Content here...</p>")

        ' Optional: Compress for reduced bandwidth
        pdf.CompressImages(80) ' 80% quality

        Dim stream As New MemoryStream(pdf.BinaryData)

        ' Set response headers for optimal streaming
        Response.Headers.Add("Content-Length", pdf.BinaryData.Length.ToString())
        Response.Headers.Add("Accept-Ranges", "bytes")

        Return New FileStreamResult(stream, "application/pdf")
    End Function

    ' Async version for better container performance
    Public Async Function StreamLargePdfAsync() As Task(Of IActionResult)
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Large Document</h1><p>Content here...</p>")

        Dim stream As New MemoryStream(pdf.BinaryData)
        Return New FileStreamResult(stream, "application/pdf")
    End Function

End Class
$vbLabelText   $csharpLabel

對於舊版ASP.NET Web Forms項目,您可以使用事件處理程序並進行適當的資源清理來實現類似的功能:

protected void btnGeneratePdf_Click(object sender, EventArgs e)
{
    using (var renderer = new ChromePdfRenderer())
    {
        var pdf = renderer.RenderHtmlAsPdf("<h1>Web Form PDF</h1>");
        Response.ContentType = "application/pdf";
        Response.BinaryWrite(pdf.BinaryData);
        Response.End();
    }
}
protected void btnGeneratePdf_Click(object sender, EventArgs e)
{
    using (var renderer = new ChromePdfRenderer())
    {
        var pdf = renderer.RenderHtmlAsPdf("<h1>Web Form PDF</h1>");
        Response.ContentType = "application/pdf";
        Response.BinaryWrite(pdf.BinaryData);
        Response.End();
    }
}
Protected Sub btnGeneratePdf_Click(sender As Object, e As EventArgs)
    Using renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Web Form PDF</h1>")
        Response.ContentType = "application/pdf"
        Response.BinaryWrite(pdf.BinaryData)
        Response.End()
    End Using
End Sub
$vbLabelText   $csharpLabel

對於高效能場景,在產生多個 PDF 時,請考慮使用非同步方法平行處理IronPDF性能指南提供了詳細的最佳化策略。

此PDF檢視器控制支援哪些功能?

透過利用瀏覽器的原生 PDF 檢視器,您的使用者可自動獲得豐富的功能:文字選擇以複製內容、搜尋功能以查找特定資料、列印選項以產生實體副本以及下載功能以離線存取。

這種方法還可以處理使用者需要上傳現有文件進行檢視、編輯合併的情況。 IronPDF 的伺服器端處理功能包括JavaScript 執行CSS 渲染表單(包含使用者可以填寫的互動式元素)。

該框架支援標籤助理整合、自訂頁面大小頁首和頁尾浮水印,甚至還支援編輯功能。 在安全功能方面,IronPDF 提供加密數位簽章PDF/A 合規性,以實現長期存檔。

對於容器化部署,IronPDF 提供: -原生支援 Linux,無需 Wine 或複雜的依賴項

如需了解完整的功能概述,請瀏覽IronPDF 功能頁面

下一步實施步驟是什麼?

使用 IronPDF 在 ASP.NET Web 應用程式中建立 PDF 檢視器非常簡單。 透過將強大的渲染引擎與瀏覽器內建的 PDF 檢視器結合,您可以獲得在 Web 應用程式中顯示、處理和管理 PDF 文件的專業解決方案。 無論您是轉換 HTMLURL還是Razor 視圖,此實作方式都只需編寫最少的程式碼即可提供最大的功能。

對於生產環境部署,請考慮以下因素:

準備好在您的專案中實現 PDF 查看功能了嗎? 立即開始 IronPDF 的免費試用,改變您的 .NET Core Web 應用程式處理文件的方式。 對於生產環境部署,請查看符合您團隊需求的授權選項。 想看更多轉換率範例嗎? 了解 IronPDF 如何處理DOCX 到 PDF 的轉換影像到 PDF 的轉換等等,請參閱這些有用的操作指南

!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--

常見問題解答

如何在 ASP.NET Web 應用程式中建立 PDF 檢視器?

您可以使用 IronPDF 在 ASP.NET Web 應用程式中建立 PDF 檢視器。它可讓您直接在應用程式中顯示 PDF 文件,提供無縫的檢視體驗,而不需要 Adobe Acrobat Reader 等外部工具。

在 ASP.NET 中使用 IronPDF 檢視 PDF 有哪些好處?

IronPDF 在 ASP.NET 應用程式中提供流暢且整合的 PDF 檢視體驗。它允許您以內嵌方式顯示文件,支援各種檔案類型,而且不需要第三方 PDF 檢視器,提升了使用者體驗。

我可以在 ASP.NET Web 應用程式中顯示互動式 PDF 表單嗎?

是的,使用 IronPDF,您可以在 ASP.NET Web 應用程式中顯示互動式 PDF 表單。它支援表單欄位和互動元素的渲染,讓使用者可以直接在瀏覽器中與文件互動。

是否可以在 ASP.NET 中使用 IronPDF 展示發票和報表?

IronPDF 絕對適合在 ASP.NET 應用程式中顯示發票、報表和其他文件類型。它可以確保您的文件在 Web 應用程式中準確且有效率地呈現。

在使用 IronPDF 的 ASP.NET 應用程式中檢視 PDF 是否需要 Adobe Acrobat Reader?

不,使用 IronPDF for .NET 時,您不需要 Adobe Acrobat Reader 來在 ASP.NET 應用程式中檢視 PDF。它允許您直接在瀏覽器中渲染和檢視 PDF,而無需第三方依賴。

Curtis Chau
技術撰稿人

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

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