跳至页脚内容
使用IRONPDF

如何在ASP.NET Core中将HTML转换为PDF

在 ASP.NET Core 应用程序中构建 PDF 查看器比大多数开发人员想象的要容易。 通过在服务器端生成 PDF 并以正确的 MIME 类型返回,您可以直接在任何现代浏览器中显示文档——无需插件,也无需 Adobe Acrobat Reader。 IronPDF 通过其基于 Chrome 的引擎处理渲染,将 HTML、CSS 和 JavaScript 转换为高保真 PDF,这些 PDF 会以内联方式显示在浏览器的内置查看器中。

本教程将引导您完成所有主要场景:显示由 HTML 字符串生成的 PDF、渲染实时 网址、转换 Razor 视图、流式传输大型文件,以及将所有内容连接到 ASP.NET Core MVC 控制器中。 代码示例针对 .NET 10,并在适用情况下使用顶级语句。

ASP.NET 中基于浏览器的 PDF 查看功能是如何工作的?

现代浏览器都内置了 PDF 查看器。 当服务器响应Content-Type: application/pdf标头时,浏览器会内联渲染文档,而不是触发文件下载。 关键是将该标头与Content-Disposition: inline配对。

在服务器端,您的任务是生成一个有效的PDF二进制文件,并通过FileResult返回它。 浏览器会自动处理分页、缩放、文本选择、搜索、打印和下载等功能,无需您编写任何额外的用户界面代码。

IronPDF 自然而然地契合了这种模式。 它的File()助手。 最终成果是一个功能齐全的文档查看器,可在 Chrome、Firefox、Edge 和 Safari 浏览器上运行。

现代浏览器通过其原生查看器引擎实现了W3C PDF 渲染规范,这意味着您的服务器返回的任何符合规范的 PDF 文件都将正确显示,无需额外配置。 IronPDF 的输出完全符合标准,因此您可以信赖跨浏览器版本的一致渲染效果。

对于容器化部署,IronPDF 提供官方 Docker 镜像,其中预配置了 Chromium 依赖项,因此您无需在每个节点上手动安装 Chrome。 Linux 和 Windows 容器均受支持。 如果您需要独立扩展 PDF 生成, IronPDF Engine Docker 镜像允许您将渲染过程作为单独的微服务运行。

如何在 ASP.NET Core 项目中安装 IronPDF?

在 Visual Studio 中打开您的 ASP.NET Core 项目,然后通过 NuGet 包管理器控制台安装 IronPDF:

Install-Package IronPdf

或使用 .NET CLI:

dotnet add package IronPdf

安装后,将您的许可证密钥添加到Program.cs中,然后调用任何IronPDF API:

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

如果要部署到Azure ,请将许可证密钥存储在 Azure Key Vault 或应用程序配置中,而不是将其硬编码。 对于 AWS Lambda 部署,请使用在 Lambda 函数设置中配置的环境变量。

这就是全部设置步骤。IronPDF 会在 Windows 运行时自动检测并配置 Chromium。 在 Linux 系统上,请查阅Linux 安装指南,了解所需的几个系统软件包。

您可以先从免费试用版开始,评估全部功能,然后再选择用于生产环境的许可证级别。

如何从 HTML 字符串生成并显示 PDF?

将PDF呈现在用户面前的最快方法是渲染一个HTML字符串并内联返回。创建一个名为PdfController的控制器,并添加如下操作:

using IronPdf;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();

var app = builder.Build();
app.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();

public class PdfController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public PdfController()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.WaitFor.RenderDelay(100);
        _renderer.RenderingOptions.Timeout = 30;
    }

    public IActionResult DisplayFromHtml()
    {
        string html = @"
            <html>
            <head>
                <style>
                    body { font-family: Arial, sans-serif; padding: 40px; }
                    h1   { color: #2c3e50; }
                    p    { line-height: 1.7; color: #444; }
                </style>
            </head>
            <body>
                <h1>Sample PDF Document</h1>
                <p>This PDF was generated using IronPDF in an ASP.NET Core application.</p>
            </body>
            </html>";

        PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        Response.Headers.Append("Content-Disposition", "inline; filename=document.pdf");
        return File(pdf.BinaryData, "application/pdf");
    }
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();

var app = builder.Build();
app.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();

public class PdfController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public PdfController()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.WaitFor.RenderDelay(100);
        _renderer.RenderingOptions.Timeout = 30;
    }

    public IActionResult DisplayFromHtml()
    {
        string html = @"
            <html>
            <head>
                <style>
                    body { font-family: Arial, sans-serif; padding: 40px; }
                    h1   { color: #2c3e50; }
                    p    { line-height: 1.7; color: #444; }
                </style>
            </head>
            <body>
                <h1>Sample PDF Document</h1>
                <p>This PDF was generated using IronPDF in an ASP.NET Core application.</p>
            </body>
            </html>";

        PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        Response.Headers.Append("Content-Disposition", "inline; filename=document.pdf");
        return File(pdf.BinaryData, "application/pdf");
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllersWithViews()

Dim app = builder.Build()
app.MapControllerRoute(name:="default", pattern:="{controller=Home}/{action=Index}/{id?}")
app.Run()

Public Class PdfController
    Inherits Controller

    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer()
        _renderer.RenderingOptions.WaitFor.RenderDelay(100)
        _renderer.RenderingOptions.Timeout = 30
    End Sub

    Public Function DisplayFromHtml() As IActionResult
        Dim html As String = "
            <html>
            <head>
                <style>
                    body { font-family: Arial, sans-serif; padding: 40px; }
                    h1   { color: #2c3e50; }
                    p    { line-height: 1.7; color: #444; }
                </style>
            </head>
            <body>
                <h1>Sample PDF Document</h1>
                <p>This PDF was generated using IronPDF in an ASP.NET Core application.</p>
            </body>
            </html>"

        Dim pdf As PdfDocument = _renderer.RenderHtmlAsPdf(html)

        Response.Headers.Append("Content-Disposition", "inline; filename=document.pdf")
        Return File(pdf.BinaryData, "application/pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

浏览器中渲染后的 PDF 文件是什么样子的?

浏览器显示标题为

ChromePdfRenderer在底层使用Chromium,因此CSS网格、弹性布局、网页字体和现代CSS特性都能准确渲染。 设置inline告诉浏览器显示文件而不是保存它。 如果您将该值更改为attachment,浏览器会提示用户下载。

对于布局复杂的文档,您可以通过自定义纸张尺寸、边距和打印 CSS 媒体类型等渲染选项来微调输出。 WaitFor API在容器化环境中尤其有用,因为网络延迟可能会延迟外部资源的加载。

要深入了解 HTML 转换选项,请参阅HTML 字符串转 PDF 指南

如何通过 网址 和 Razor 视图渲染 PDF 文件?

IronPDF 可以将任何实时网页捕获为 PDF 文件——非常适合存档网页内容或从现有页面生成报告。 ASP.NET Core 文档介绍了控制器操作如何返回结果,这也是这里使用的模式。

public IActionResult RenderFromUrl(string url = "https://en.wikipedia.org/wiki/Main_Page")
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.EnableJavaScript = true;
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
    renderer.RenderingOptions.WaitFor.NetworkIdle();

    PdfDocument pdf = renderer.RenderUrlAsPdf(url);

    Response.Headers.Append("Content-Disposition", "inline; filename=webpage.pdf");
    Response.Headers.Append("Cache-Control", "public, max-age=3600");
    return File(pdf.BinaryData, "application/pdf");
}
public IActionResult RenderFromUrl(string url = "https://en.wikipedia.org/wiki/Main_Page")
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.EnableJavaScript = true;
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
    renderer.RenderingOptions.WaitFor.NetworkIdle();

    PdfDocument pdf = renderer.RenderUrlAsPdf(url);

    Response.Headers.Append("Content-Disposition", "inline; filename=webpage.pdf");
    Response.Headers.Append("Cache-Control", "public, max-age=3600");
    return File(pdf.BinaryData, "application/pdf");
}
Public Function RenderFromUrl(Optional url As String = "https://en.wikipedia.org/wiki/Main_Page") As IActionResult
    Dim renderer As New ChromePdfRenderer()
    renderer.RenderingOptions.EnableJavaScript = True
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
    renderer.RenderingOptions.WaitFor.NetworkIdle()

    Dim pdf As PdfDocument = renderer.RenderUrlAsPdf(url)

    Response.Headers.Append("Content-Disposition", "inline; filename=webpage.pdf")
    Response.Headers.Append("Cache-Control", "public, max-age=3600")
    Return File(pdf.BinaryData, "application/pdf")
End Function
$vbLabelText   $csharpLabel

基于网址的PDF渲染是如何显示的?

使用IronPDF在ASP.NET web应用程序中呈现的维基百科主页PDF查看器截图,显示了主页面内容和导航元素,并完全保留了CSS样式

当您需要转换Razor 视图(例如发票或对账单模板)时,首先需要将视图渲染为 HTML 字符串,然后将该字符串传递给 IronPDF。 这样可以确保您的模板在网页和PDF输出中均可重复使用:

public async Task<IActionResult> ViewToPdf()
{
    var model = 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 }
        }
    };
    model.TotalAmount = model.Items.Sum(i => i.LineTotal);

    string htmlContent = await RenderViewToStringAsync("Invoice", model);

    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.MarginTop    = 40;
    renderer.RenderingOptions.MarginBottom = 40;

    string baseUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}";
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent, baseUrl);

    return File(pdf.BinaryData, "application/pdf");
}

private async Task<string> RenderViewToStringAsync(string viewName, object model)
{
    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)
    {
        string searched = string.Join(
            Environment.NewLine,
            viewResult.SearchedLocations ?? Array.Empty<string>());
        throw new InvalidOperationException(
            $"Could not find view '{viewName}'. Searched:{Environment.NewLine}{searched}");
    }

    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 model = 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 }
        }
    };
    model.TotalAmount = model.Items.Sum(i => i.LineTotal);

    string htmlContent = await RenderViewToStringAsync("Invoice", model);

    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.MarginTop    = 40;
    renderer.RenderingOptions.MarginBottom = 40;

    string baseUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}";
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent, baseUrl);

    return File(pdf.BinaryData, "application/pdf");
}

private async Task<string> RenderViewToStringAsync(string viewName, object model)
{
    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)
    {
        string searched = string.Join(
            Environment.NewLine,
            viewResult.SearchedLocations ?? Array.Empty<string>());
        throw new InvalidOperationException(
            $"Could not find view '{viewName}'. Searched:{Environment.NewLine}{searched}");
    }

    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.AspNetCore.Mvc.ViewEngines
Imports Microsoft.AspNetCore.Mvc.Rendering
Imports Microsoft.AspNetCore.Mvc.ViewFeatures
Imports Microsoft.Extensions.DependencyInjection
Imports IronPdf

Public Class YourController
    Inherits Controller

    Public Async Function ViewToPdf() As Task(Of IActionResult)
        Dim model 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}
            }
        }
        model.TotalAmount = model.Items.Sum(Function(i) i.LineTotal)

        Dim htmlContent As String = Await RenderViewToStringAsync("Invoice", model)

        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.MarginTop = 40
        renderer.RenderingOptions.MarginBottom = 40

        Dim baseUrl As String = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}"
        Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent, baseUrl)

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

    Private Async Function RenderViewToStringAsync(viewName As String, model As Object) As Task(Of String)
        Dim actionContext As New ActionContext(HttpContext, RouteData, ControllerContext.ActionDescriptor)

        Dim viewEngine As IRazorViewEngine = HttpContext.RequestServices.GetRequiredService(Of IRazorViewEngine)()
        Dim tempDataFactory As ITempDataDictionaryFactory = HttpContext.RequestServices.GetRequiredService(Of ITempDataDictionaryFactory)()
        Dim tempData As ITempDataDictionary = tempDataFactory.GetTempData(HttpContext)

        ViewData.Model = model

        Dim viewResult As ViewEngineResult = viewEngine.FindView(actionContext, viewName, isMainPage:=False)
        If Not viewResult.Success Then
            Dim searched As String = String.Join(Environment.NewLine, viewResult.SearchedLocations ?? Array.Empty(Of String)())
            Throw New InvalidOperationException($"Could not find view '{viewName}'. Searched:{Environment.NewLine}{searched}")
        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 invoice displayed in a web browser showing Invoice #1001 for Acme Corp with two line items totaling $250.00, demonstrating successful Razor view to PDF conversion

当您的Razor视图引用相对CSS或图像路径时,baseUrl参数很重要。 传递当前主机 网址 可以让 IronPDF 正确解析这些路径。 请参阅Razor 转 PDF 教程,了解包括 Blazor 应用程序模式在内的完整演练过程。

如何处理流式传输中的大型 PDF 文件?

对于大小可能达到几兆字节的文档,流式传输可以降低峰值内存使用量,并更快地将字节传输到客户端。 使用File()与原始字节数组:

public async Task<IActionResult> StreamLargePdf()
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.CreatePdfFormsFromHtml = false;

    PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(
        "<h1>Large Document</h1><p>Full content here...</p>");

    pdf.CompressImages(80);

    var stream = new MemoryStream(pdf.BinaryData);

    Response.Headers.Append("Content-Length", pdf.BinaryData.Length.ToString());
    Response.Headers.Append("Accept-Ranges",  "bytes");

    return new FileStreamResult(stream, "application/pdf");
}
public async Task<IActionResult> StreamLargePdf()
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.CreatePdfFormsFromHtml = false;

    PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(
        "<h1>Large Document</h1><p>Full content here...</p>");

    pdf.CompressImages(80);

    var stream = new MemoryStream(pdf.BinaryData);

    Response.Headers.Append("Content-Length", pdf.BinaryData.Length.ToString());
    Response.Headers.Append("Accept-Ranges",  "bytes");

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

Public Class YourController
    Inherits Controller

    Public Async Function StreamLargePdf() As Task(Of IActionResult)
        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.CreatePdfFormsFromHtml = False

        Dim pdf As PdfDocument = Await renderer.RenderHtmlAsPdfAsync("<h1>Large Document</h1><p>Full content here...</p>")

        pdf.CompressImages(80)

        Dim stream As New MemoryStream(pdf.BinaryData)

        Response.Headers.Append("Content-Length", pdf.BinaryData.Length.ToString())
        Response.Headers.Append("Accept-Ranges", "bytes")

        Return New FileStreamResult(stream, "application/pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

CompressImages(80)将JPEG质量降低到80%,这显著减小了图片较多文档的文件大小,同时质量损失最小。 设置Accept-Ranges: bytes会向浏览器表明它可以请求字节范围的数据块,从而在不需要下载整个文件的情况下使在大型PDF内的快速寻位成为可能。

ISO 的PDF/A 规范定义了存档质量 PDF 的要求。 如果您的应用程序需要生成长期存档文档,IronPDF 的 PDF/A 合规模式可确保输出符合这些标准,这对于监管或法律工作流程尤为重要。

对于旧版 ASP.NET Web Forms 项目,模式略有不同,因为您需要直接写入 HTTP 响应:

protected void btnGeneratePdf_Click(object sender, EventArgs e)
{
    using var renderer = new ChromePdfRenderer();
    PdfDocument 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();
    PdfDocument 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 As New ChromePdfRenderer()
        Dim pdf As PdfDocument = 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 异步 API 指南性能优化参考,以了解在高吞吐量场景下减少内存开销的设置。

基于浏览器的查看器能为用户提供哪些功能?

当浏览器以内嵌方式显示 PDF 文件时,它会自动打开一个功能齐全的 PDF 查看器。 您的用户可以进行文本选择以复制内容,使用内置搜索栏查找特定单词或数字,使用打印控件,以及一键下载——所有这些都无需您编写任何前端代码。

除了基本查看功能外,IronPDF 还支持多种文档功能,这些功能会影响用户在查看器中看到的内容:

下表总结了库中可用的主要转换方法以及何时使用每种方法:

IronPDF转换方法及推荐用例
方法 输入 最适合
RenderHtmlAsPdf HTML字符串 模板化文档、发票、报告
RenderUrlAsPdf 网址 网页存档,实时内容快照
RenderHtmlAsPdf + Razor 渲染后的视图 HTML 将现有的 MVC 模板重用于 PDF 格式。
RenderHtmlFileAsPdf 本地 HTML 文件 存储在磁盘上的静态模板

对于容器化部署,IronPDF 还提供远程引擎支持,因此您可以将 PDF 生成作为专用微服务运行。请参阅内存优化指南,了解针对资源受限环境的优化设置。

如需全面了解各项功能,请访问IronPDF 功能页面

IronPDF 支持哪些格式和编辑选项?

IronPDF的功能远不止基本的渲染。 您可以使用以下选项为每个文档添加结构和品牌标识。

页面布局控制包括自定义纸张尺寸、方向设置和边距配置。 字体支持通过CSS @font-face声明覆盖完整的网页字体渲染,这意味着文档与您的品牌字体完全匹配。 您还可以将图像嵌入 PDF 页面中并调整其大小,从而完全控制视觉效果。

对于文档操作,IronPDF 允许您合并或拆分现有 PDF、添加或删除单个页面,以及以编程方式提取文本和图像。 捕获前的JavaScript执行支持动态图表和数据可视化——在生成依赖于客户端渲染库(如Chart.jsD3.js)的报告时非常有用。

这些功能意味着您可以直接从应用程序生成精美、可直接打印的文档,而无需单独的文档处理层。

如果您需要接收用户上传的 PDF 文件并将其与生成的 PDF 文件一起显示,IronPDF 读取现有 PDF 二进制文件与创建新文件一样简单。 使用BinaryData

请参阅C# 编辑 PDF 教程,了解有关编辑、注释和修改现有文档的详细步骤。

IronPDF 与其他方法相比有何优势?

IronPDF 服务器端方法的两种最常见的替代方案是嵌入客户端 PDF 查看器库(例如PDF.js ,Mozilla 的开源查看器)和将用户路由到单独的文档管理系统。

像 PDF.js 这样的客户端查看器对于简单的显示场景效果很好,但需要自行提供查看器 JavaScript 包、处理外部 PDF 的 CORS 以及管理浏览器兼容性。 使用 IronPDF 的服务器端生成功能,使 PDF 管道完全位于 .NET 堆栈上,从而简化了安全策略并避免了跨域复杂性。

专用文档管理系统会增加大多数 Web 应用程序不需要的运维开销。 对于已经运行 ASP.NET Core 的团队来说,直接从控制器生成和流式传输 PDF 是阻力最小的途径。

下一步计划是什么?

在 ASP.NET Core Web 应用程序中显示 PDF 文件只需要几行代码。 使用FileResult——浏览器的内置查看器处理所有其他事情。

对于生产环境部署,请考虑以下步骤来准备您的设置:

准备好为您的项目添加 PDF 查看功能了吗? 首先进行免费试用,几分钟内即可运行上述示例。 准备部署时,请查看适合您团队规模和使用情况的许可选项。 要探索相关的转换,请浏览 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 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我