跳至页脚内容
使用IRONPDF

如何使用 IronPDF 在 ASP.NET Web 应用程序中创建 PDF 查看器

IronPDF 通过生成服务器端 PDF,直接在浏览器的内置查看器中显示,从而在 ASP.NET Core 应用程序中实现无缝的 PDF 查看,无需插件或外部依赖项——只需配置响应标头,然后让 IronPDF基于 Chrome 的渲染引擎处理HTML 到 PDF 的转换即可。

创建用于显示PDF文档的Web应用程序很简单。 无论您是展示发票、报告还是交互式表单,用户都希望获得流畅的浏览器内文档查看体验——无需 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 Viewer 控件?

在 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 设置为内联,浏览器就会显示而不是下载 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 for .NET 在 ASP.NET Web 应用程序中创建 PDF 查看器非常简单。 通过将强大的渲染引擎与浏览器内置的 PDF 查看器相结合,您可以获得在 Web 应用程序中显示、处理和管理 PDF 文件的专业解决方案。 无论您是转换 HTMLURL还是Razor 视图,该实现方式都只需编写最少的代码即可提供最大的功能。

对于生产环境部署,请考虑以下因素:

准备好在您的项目中实施 PDF 浏览了吗? 从免费试用 IronPDF 开始,改变您的 .NET Core Web 应用程序处理文档的方式。 对于生产部署,请查看适合您团队需求的许可选项。 想看更多转化率示例吗? 了解 IronPDF 如何处理DOCX 到 PDF 的转换图像到 PDF 的转换等等,请参阅这些有用的操作指南

立即开始使用 IronPDF。
green arrow pointer

常见问题解答

如何在 ASP.NET 网络应用程序中创建 PDF 查看器?

您可以使用 IronPDF 在 ASP.NET Web 应用程序中创建一个 PDF 查看器。它能让您直接在应用程序中显示 PDF 文档,提供无缝的查看体验,而无需使用 Adobe Acrobat Reader 等外部工具。

在 ASP.NET 中使用 IronPDF 查看 PDF 有哪些好处?

IronPDF 可在 ASP.NET 应用程序中提供流畅的集成 PDF 查看体验。它允许您以内联方式显示文档,支持各种文件类型,无需第三方 PDF 查看器,从而增强了用户体验。

能否在 ASP.NET 网络应用程序中显示交互式 PDF 表单?

是的,使用 IronPDF,您可以在 ASP.NET Web 应用程序中显示交互式 PDF 表单。它支持表单字段和交互式元素的渲染,允许用户直接在浏览器中与文档进行交互。

是否可以在 ASP.NET 中使用 IronPDF 展示发票和报告?

当然,IronPDF 非常适合在 ASP.NET 应用程序中显示发票、报告和其他文档类型。它能确保在网络应用程序中准确高效地呈现文档。

在使用 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 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。