跳至页脚内容
使用IRONPDF

如何在ASP.NET Core中创建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库,擅长从HTML、Razor视图或现有文档创建像素完美的PDF页面。 其基于Chrome的渲染确保准确的CSS、JavaScript和图像支持,为您的最终用户提供一个类似桌面PDF查看器的查看体验。

设置您的ASP.NET Core项目

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

dotnet new mvc -n PdfViewerApp
cd PdfViewerApp

这将构建一个具有MVC支持的基本.NET应用程序。 然后,您可以安装需要的IronPDF NuGet包来处理和渲染PDF。

如何安装和配置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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

安装后,在Program.cs中设置您的许可证密钥。 IronPDF的文档提供了额外的信息和配置示例。

如何生成PDF以供查看?

IronPDF让您从原始HTML、网页或Razor视图创建PDF文件。 生成的PDF文档可以通过几行C#源代码内联显示。 例如,使用ChromePdfRenderer,您可以渲染HTML并将其作为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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

从URLs生成PDFs

转换现有网页为PDF:

public IActionResult GenerateFromUrl(string url = "https://ironpdf.com")
{
    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 = "https://ironpdf.com")
{
    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");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此处,IronPDF将一个实时网页转换为PDF。 RenderUrlAsPdf方法获取页面,应用样式和脚本,并输出一个完美的PDF。 将Content-Disposition头设置为inline,使文件在浏览器的PDF查看器中打开。 这对于将Web内容归档或共享为PDF文档是理想的。

输出

如何在ASP.NET Core中创建PDF查看器:图2 - URL到PDF输出显示在PDF查看器中

将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();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此代码段将Razor视图转换为PDF。 首先使用RenderViewToString将视图渲染为HTML字符串,然后使用RenderHtmlAsPdf转换。 结果作为浏览器可视文件返回。这允许您重用Razor模板(如发票)用于网页显示和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");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此示例强制PDF内联显示,而非下载。 一个简单的HTML字符串使用RenderHtmlAsPdf转换,并将Content-Disposition头设置为inline。这是直接在浏览器中快速预览生成的PDF文件的一种快捷方式。

输出

如何在ASP.NET Core中创建PDF查看器:图3 - 简单的内联PDF查看器示例

动态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}`;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此代码动态加载不同的PDF到查看器中。 控制器提供PDF列表,并根据需要生成它们。 JavaScript的loadPdf函数更新<iframe>源,而不重新加载页面,实现文档之间的快速切换。

部署注意事项如何?

IronPDF可在ASP.NET、ASP.NET Core和Blazor服务器项目中使用。 您可以在服务器上托管、部署到Azure或使用Docker进行容器化。 由于它是一个经常更新的库并有活动的支持,您可以依靠它进行企业级文档处理。

Azure部署

在部署到Azure应用服务时,IronPDF可与极少的配置无缝工作。 确保您的应用服务计划至少是B1层,以获得最佳性能。 IronPDF自动处理Chrome渲染引擎的部署。 请参考此处获取选择正确Azure层的文档。

Docker支持

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

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

性能提示

  • 缓存生成的PDF,当内容不频繁变化时
  • 使用异步方法以获得更好的可扩展性
  • 为复杂的PDF生成设置适当的超时时间

常见问题和解决方案

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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

跨域问题

从不同域加载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", "*");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

大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");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

结论

ASP.NET Core中创建一个PDF查看器并不需要复杂。 通过结合IronPDF的渲染引擎和浏览器的默认PDF查看器,您可以获得一个专业、用户友好的解决方案,用于在线显示、编辑和处理PDF文件。无论您需要渲染发票、集成动态报告,还是为移动应用构建文档查看器,这种方法都提供了合适的功能、可扩展性和性能的平衡。

在寻找具有工作源代码的完整教程吗? 下载我们的免费示例项目,探索IronPDF如何帮助您集成一个现代、安全、灵活的PDF查看器到ASP.NET中。

准备好在您的ASP.NET Core应用程序中实现PDF查看吗? 从IronPDF的免费试用开始,今天就提升您的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 机器人,将他对技术的热爱与创造力相结合。