跳至页脚内容
使用IRONPDF

如何在 ASP.NET Core 中创建 PDF 查看器:图 1

要在 ASP.NET Core 中实现 PDF 查看器,可以使用 IronPDF 从HTMLURLRazor 视图生成 PDF。 为它们提供合适的头部信息,以便在浏览器中内联显示,无需外部插件或下载即可提供流畅的文档查看体验。

使用 .NET 构建 Web 应用程序通常需要直接在浏览器中显示PDF 文档。 无论是发票报告还是交互式 PDF 表单,用户都希望获得流畅的文档查看体验,而无需 Adobe Acrobat Reader 或其他第三方浏览器工具。

在本教程中,您将学习如何使用IronPDF为 ASP.NET 和 .NET Core 实现 PDF 查看器。 这款可靠的PDF 查看器控件允许开发人员在其 .NET 应用程序中创建渲染和显示 PDF 文件,为处理业务关键型文档提供专业的解决方案。

PDF查看在ASP.NET Core中如何工作?

现代浏览器都内置了PDF 查看器。 当您使用正确的MIME 类型(application/pdf)提供 PDF 文件时,浏览器会自动将其内嵌显示。这意味着您无需外部插件即可查看 PDF 文档或显示 PDF 文件。 关键在于生成高质量的 PDF 文件并配置正确的响应标头

IronPDF 是一个经常更新的.NET PDF 库,它擅长从HTMLRazor 视图现有文档创建像素级完美的PDF 页面。 它基于 Chrome 的渲染确保了对CSSJavaScript图像的精确支持,为用户提供类似于桌面 PDF 查看器的查看体验。

为什么要先创建一个 ASP.NET Core 项目?

首先创建一个新的ASP.NET Core MVC 应用程序

dotnet new mvc -n PdfViewerApp
cd PdfViewerApp

这会搭建一个支持 MVC 的基本 .NET 应用程序。 然后您可以安装PDF 处理渲染所需的IronPDF NuGet 包

如何安装和配置 IronPDF?

安装IronPDF只需几个步骤。 在Visual Studio中打开程序包管理器控制台并运行:

Install-Package IronPdf

或使用.NET CLI:

dotnet add package IronPdf

在您的Program.cs或Startup.cs中配置IronPDF:

// Add this at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Use your trial or commercial key
// Add this at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Use your trial or commercial key
$vbLabelText   $csharpLabel

安装完成后,在 Program.cs 中设置您的许可证密钥。 IronPDF 的文档提供了更多配置信息和示例。 部署时,请确保使用适用于目标环境的正确安装方法

如何生成可供查看的PDF文件?

IronPDF 允许您从原始HTML网页Razor 视图创建PDF 文件。 然后,只需几行 C# 源代码即可将生成的PDF 文档内联显示。 例如,使用ChromePdfRenderer ,您可以渲染 HTML并将其作为 PDF 文件返回给浏览器,该 PDF 文件将显示在您的 ASP.NET PDF 查看器控件中。

这种方法避免了强制下载,使用户能够直接在您的 Web 表单或Blazor 项目查看打印搜索保存 PDF 文件

如何从HTML字符串创建PDF?

将HTML直接转换为PDF是最简单的方法:

using IronPdf;
public class PdfController : Controller
{
    public IActionResult GenerateFromHtml()
    {
        var renderer = new ChromePdfRenderer();
        // Create PDF from HTML
        var html = @"
            <html>
            <head>
                <style>
                    body { font-family: Arial; padding: 20px; }
                    h1 { color: #333; }
                </style>
            </head>
            <body>
                <h1>Sample PDF Document</h1>
                <p>This PDF was generated using IronPDF in ASP.NET Core.</p>
            </body>
            </html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        // Return PDF to browser for viewing
        return File(pdf.BinaryData, "application/pdf");
    }
}
using IronPdf;
public class PdfController : Controller
{
    public IActionResult GenerateFromHtml()
    {
        var renderer = new ChromePdfRenderer();
        // Create PDF from HTML
        var html = @"
            <html>
            <head>
                <style>
                    body { font-family: Arial; padding: 20px; }
                    h1 { color: #333; }
                </style>
            </head>
            <body>
                <h1>Sample PDF Document</h1>
                <p>This PDF was generated using IronPDF in ASP.NET Core.</p>
            </body>
            </html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        // Return PDF to browser for viewing
        return File(pdf.BinaryData, "application/pdf");
    }
}
$vbLabelText   $csharpLabel

本示例展示了如何直接从HTML 字符串生成 PDF。 创建了一个ChromePdfRenderer ,它使用Chromium进行精确渲染。 将 HTML(包含内联 CSS )传递给RenderHtmlAsPdf ,生成PdfDocument 。 返回文件时使用 application/pdf MIME 类型可确保浏览器以内联方式显示该文件。这对于在ASP.NET Core中动态生成报表或发票非常有用。

何时应该从 URL 生成 PDF?

将现有网页转换为 PDF:

public IActionResult GenerateFromUrl(string url = "___PROTECTED_URL_133___")
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.EnableJavaScript = true;
    renderer.RenderingOptions.WaitFor.JavaScript(3000);
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
    var pdf = renderer.RenderUrlAsPdf(url);
    Response.Headers.Add("Content-Disposition", "inline; filename=webpage.pdf");
    return File(pdf.BinaryData, "application/pdf");
}
public IActionResult GenerateFromUrl(string url = "___PROTECTED_URL_133___")
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.EnableJavaScript = true;
    renderer.RenderingOptions.WaitFor.JavaScript(3000);
    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
    var pdf = renderer.RenderUrlAsPdf(url);
    Response.Headers.Add("Content-Disposition", "inline; filename=webpage.pdf");
    return File(pdf.BinaryData, "application/pdf");
}
$vbLabelText   $csharpLabel

此处,IronPDF将一个实时网页转换为PDF。 RenderUrlAsPdf方法获取页面,应用样式脚本,并输出精美的 PDF。 将Content-Disposition标头设置为 inline 会使文件在浏览器的 PDF 查看器中打开。 JavaScript渲染选项可确保动态内容正确加载。 这非常适合将网页内容存档或以PDF 文档形式共享。

输出

! PDF 查看器 Web 应用程序,显示 IronPDF for .NET 文档,顶部带有"从 HTML 生成"、"从 URL 生成"和"打印"按钮。

如何将 Razor 视图转换为 PDF?

动态地将Razor 视图转换为 PDF:

public async Task<IActionResult> ViewToPdf()
{
    // Render the view to HTML string first
    var htmlContent = await RenderViewToString("Invoice", invoiceModel);
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(htmlContent);
    return File(pdf.BinaryData, "application/pdf");
}
private async Task<string> RenderViewToString(string viewName, object model)
{
    ViewData.Model = model;
    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);
        return sw.ToString();
    }
}
public async Task<IActionResult> ViewToPdf()
{
    // Render the view to HTML string first
    var htmlContent = await RenderViewToString("Invoice", invoiceModel);
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(htmlContent);
    return File(pdf.BinaryData, "application/pdf");
}
private async Task<string> RenderViewToString(string viewName, object model)
{
    ViewData.Model = model;
    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);
        return sw.ToString();
    }
}
$vbLabelText   $csharpLabel

这段代码将Razor 视图转换为 PDF。 首先使用RenderViewToString将视图渲染成 HTML 字符串,然后使用RenderHtmlAsPdf进行转换。 结果以浏览器可查看的文件形式返回。这样,您就可以在网页显示和PDF 生成中重复使用Razor 模板(例如发票),从而确保一致性。 对于MVC 框架项目,类似的方法稍作调整即可适用。

如何在浏览器中显示PDF文件?

内联显示 PDF 文件(而不是下载)的关键在于设置正确的响应标头。 现代浏览器在正确配置后支持内嵌PDF查看

内嵌式显示的基本方法是什么?

public IActionResult ViewPdf()
{
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
    Response.Headers.Add("Content-Disposition", "inline");
    return File(pdf.BinaryData, "application/pdf");
}
public IActionResult ViewPdf()
{
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
    Response.Headers.Add("Content-Disposition", "inline");
    return File(pdf.BinaryData, "application/pdf");
}
$vbLabelText   $csharpLabel

此示例强制PDF内联显示,而非下载。 使用RenderHtmlAsPdf将简单的HTML 字符串转换为 PDF 文件,并将Content-Disposition标头设置为 inline。这是一种直接在浏览器中预览生成的PDF 文件的快捷方法。 您可以通过添加页眉、页脚水印来改善这一点。

输出

! PdfViewerApp 的屏幕截图,显示一个 PDF 查看器,其中显示"Hello World"文本,并带有导航控件和"从 HTML 生成"、"从 URL 生成"和"打印"等操作按钮。

如何启用动态PDF加载?

无需刷新页面,加载不同的PDF:

[HttpGet]
public IActionResult GetPdfList()
{
    var pdfs = new List<object>
    {
        new { id = 1, name = "Report 1" },
        new { id = 2, name = "Report 2" }
    };
    return Json(pdfs);
}
[HttpGet]
public IActionResult GetPdf(int id)
{
    var renderer = new ChromePdfRenderer();
    var html = $"<h1>Report {id}</h1><p>Content for report {id}</p>";
    var pdf = renderer.RenderHtmlAsPdf(html);
    return File(pdf.BinaryData, "application/pdf");
}
// Load PDF dynamically
function loadPdf(pdfId) {
    const frame = document.getElementById('pdfFrame');
    frame.src = `/Pdf/GetPdf?id=${pdfId}`;
}
[HttpGet]
public IActionResult GetPdfList()
{
    var pdfs = new List<object>
    {
        new { id = 1, name = "Report 1" },
        new { id = 2, name = "Report 2" }
    };
    return Json(pdfs);
}
[HttpGet]
public IActionResult GetPdf(int id)
{
    var renderer = new ChromePdfRenderer();
    var html = $"<h1>Report {id}</h1><p>Content for report {id}</p>";
    var pdf = renderer.RenderHtmlAsPdf(html);
    return File(pdf.BinaryData, "application/pdf");
}
// Load PDF dynamically
function loadPdf(pdfId) {
    const frame = document.getElementById('pdfFrame');
    frame.src = `/Pdf/GetPdf?id=${pdfId}`;
}
$vbLabelText   $csharpLabel

此代码动态加载不同的PDF到查看器中。 控制器提供PDF列表,并根据需要生成它们。 JavaScript loadPdf 函数会更新<iframe>无需重新加载页面即可获取源文件,从而实现文档之间的快速切换。 考虑采用异步方法来提高处理大型文档的性能。

如何实现高级查看功能?

通过添加更多功能来改进您的 PDF 查看器:

public class AdvancedPdfController : Controller
{
    // Add zoom controls
    public IActionResult ViewWithZoom()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.ViewPortWidth = 1024;
        renderer.RenderingOptions.Zoom = 150; // 150% zoom
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        return File(pdf.BinaryData, "application/pdf");
    }

    // Enable text search
    public IActionResult SearchablePdf()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
        var pdf = renderer.RenderHtmlAsPdf(htmlWithForms);
        // PDF text is searchable by default
        return File(pdf.BinaryData, "application/pdf");
    }
}
public class AdvancedPdfController : Controller
{
    // Add zoom controls
    public IActionResult ViewWithZoom()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.ViewPortWidth = 1024;
        renderer.RenderingOptions.Zoom = 150; // 150% zoom
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        return File(pdf.BinaryData, "application/pdf");
    }

    // Enable text search
    public IActionResult SearchablePdf()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
        var pdf = renderer.RenderHtmlAsPdf(htmlWithForms);
        // PDF text is searchable by default
        return File(pdf.BinaryData, "application/pdf");
    }
}
$vbLabelText   $csharpLabel

这些示例演示了视口控制表单创建渲染选项可对 PDF 生成进行精细控制。 启用文本提取功能以用于搜索功能,并启用交互式文档的表单字段

部署注意事项如何?

IronPDF 可跨ASP.NETASP.NET CoreBlazor Server项目运行。 您可以将其托管在服务器上,部署到Azure ,或者使用Docker进行容器化。 由于它是一个经常更新且有积极支持的库,您可以依靠它进行专业的文档处理。

如何部署到 Azure?

部署到Azure 应用服务时,IronPDF 可以无缝运行,只需极少的配置。 为了获得最佳性能,请确保您的应用服务计划至少为 B1 级别。 IronPDF 会自动处理Chrome 渲染引擎的部署。 请参考此处获取选择正确Azure层的文档。 考虑使用Azure Functions进行无服务器 PDF 生成。

Docker 支持情况如何?

对于容器化部署,IronPDF 提供Docker 支持。 将此添加到您的Dockerfile:

# Install IronPDF dependencies
RUN apt-get update && apt-get install -y libgdiplus

对于Linux 部署,可能需要额外的依赖项。 请查看安装指南,了解特定平台的要求。 考虑使用IronPDF Slim以减小容器大小。

什么是关键绩效指标?

如何排查常见问题?

为什么您的PDF文件无法内嵌显示?

如果PDF下载而非显示:

// Ensure Content-Disposition is set correctly
Response.Headers.Add("Content-Disposition", "inline; filename=document.pdf");
// Ensure Content-Disposition is set correctly
Response.Headers.Add("Content-Disposition", "inline; filename=document.pdf");
$vbLabelText   $csharpLabel

检查浏览器兼容性并确保MIME 类型正确。 某些旧版浏览器可能需要额外配置

如何处理跨域问题?

从不同域加载PDF时:

// Add CORS headers if needed
Response.Headers.Add("Access-Control-Allow-Origin", "*");
// Add CORS headers if needed
Response.Headers.Add("Access-Control-Allow-Origin", "*");
$vbLabelText   $csharpLabel

对于安全环境,请正确配置 CORS 策略。 考虑受保护文档的身份验证要求。

大型PDF文件怎么办?

对于大型文档,请考虑流式传输

public async Task<IActionResult> StreamPdf()
{
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(largeHtmlContent);
    var stream = new MemoryStream(pdf.BinaryData);
    return new FileStreamResult(stream, "application/pdf");
}
public async Task<IActionResult> StreamPdf()
{
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(largeHtmlContent);
    var stream = new MemoryStream(pdf.BinaryData);
    return new FileStreamResult(stream, "application/pdf");
}
$vbLabelText   $csharpLabel

对超大型文档实现分页功能。 使用压缩技术来减少带宽占用。 考虑使用异步渲染以提高性能。

下一步是什么? 在[ASP.NET Core](/blog/using-ironpdf/asp-net-core-display-pdf-tutorial)中创建 PDF 查看器并不一定很复杂。 通过将[IronPDF 的](https://ironpdf.com)[渲染引擎](/how-to/chrome-pdf-rendering-engine)与浏览器的默认[PDF 查看器](/how-to/pdf-viewing)相结合,您可以获得一个专业且用户友好的解决方案,用于在线显示、[编辑](/features/edit)和处理 PDF 文件。无论您需要渲染[发票](/tutorials/html-to-pdf)、集成[动态报表](/how-to/csharp-pdf-reports),还是为[移动应用](/get-started/android)构建文档查看器,这种方法都能在功能、可扩展性和性能之间取得理想的平衡。 在寻找具有工作源代码的完整教程吗? 下载我们的[免费示例项目](/demos/),了解 IronPDF 如何帮助您立即为 ASP.NET 集成现代、安全、灵活的[PDF 查看器](/tutorials/pdf-viewing)。 请查看我们的[API 参考文档](/object-reference/api/)以获取详细文档和[代码示例](/examples/aspx-to-pdf-settings)。 准备好在您的ASP.NET Core应用程序中实现PDF查看吗? 从[**IronPDF的免费试用**](trial-license)开始,今天就提升您的Web应用程序的文档处理能力。
立即开始使用 IronPDF。
green arrow pointer

常见问题解答

在ASP.NET应用程序中显示PDF文档的最佳方法是什么?

使用IronPDF允许开发人员在ASP.NET应用程序中直接在浏览器中轻松渲染PDF文档,提供无缝用户体验,无需像Adobe Acrobat Reader这样的第三方工具。

IronPDF能否用于增强Web应用程序中的PDF查看?

是的,IronPDF旨在通过允许平滑集成到Web应用程序中来增强PDF查看,确保用户能够轻松高效地查看PDF文档。

在ASP.NET中使用IronPDF查看PDF时是否需要额外的工具?

不,IronPDF消除了对额外工具的需求,如Adobe Acrobat Reader,为在ASP.NET应用程序中直接查看PDF提供内置解决方案。

如何在我的.NET网络应用中实现PDF查看器?

通过将IronPDF集成到您的.NET网络应用程序中,您可以实现支持多种PDF功能且提供用户友好界面的强大PDF查看器。

为什么要在ASP.NET中使用IronPDF进行PDF查看?

IronPDF为在ASP.NET应用程序中提供可靠而高效的PDF查看解决方案,使开发人员无需依赖外部插件即可为用户提供无缝体验。

使用IronPDF是否可以显示互动PDF表单?

是的,IronPDF支持显示交互式PDF表单,允许用户直接在浏览器中填写和交互PDF文档。

使用IronPDF可以查看哪些类型的PDF文档?

IronPDF可以处理各种类型的PDF文档,包括发票、报告和交互式表单,使其成为任何ASP.NET应用程序的万能工具。

IronPDF 是否支持 .NET 10 进行 PDF 生成和查看?

是的。IronPDF 完全支持 .NET 10,以及更早的版本,例如 .NET 9、8、7、6 和 .NET Core 及 .NET Framework。这意味着您可以在现代的 .NET 10 ASP.NET 或 Blazor 应用程序中使用 IronPDF,在浏览器中生成、提供和显示 PDF 文件。(ironpdf.com)

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。