跳至页脚内容
使用IRONPDF

如何使用 IronPDF for .NET 在新窗口 ASP .NET C# 中打开 PDF

简介

在新窗口或浏览器标签页中打开 PDF 文件是 ASP.NET 网络应用程序中的常见要求。 用户点击链接时,PDF 文档会自动下载,而不是显示在浏览器中,开发人员常常为此而苦恼。 这种令人沮丧的行为破坏了用户体验,尤其是在查看报告、发票或文档时,用户需要在继续当前页面的工作时参考这些内容。

IronPDF 为这一挑战提供了优雅的解决方案,它提供了强大的 PDF 生成和显示功能,可与 ASP.NET 应用程序无缝集成。 开发人员可以利用 IronPDF 的 ChromePdfRenderer 来创建和提供能在新浏览器标签页中可靠打开的 PDF 文件,而不必纠结于响应头和内容处置设置。

在本文中,我们将看看 IronPDF 是如何在计算机浏览器中生成和显示 PDF 文件的。

为什么 PDF 文件下载后无法打开?

在通过 ASP.NET 提供 PDF 文件时,默认行为通常会导致下载而不是浏览器显示。 这是因为服务器如何通过 HTTP 响应标头将文件发送到浏览器。 Content-Disposition 标题特别控制 PDF 文件是在线打开还是下载。

传统的 ASP.NET 代码使用带有字节数组的 Response.BinaryWrite 通常会设置触发下载的标题。 即使开发人员设置了 Response.ContentType = "application/pdf", 缺少或不正确的 Content-Disposition 值也会导致浏览器下载而不是显示 PDF 文档。 此外,不同的浏览器对 PDF 文件的处理方式也不一致--Adobe PDF 阅读器插件可能会在线显示文件,而移动浏览器通常默认为下载。

在处理从 HTML 字符串或数据源动态生成的 PDF 文档时,服务器端配置变得更加复杂。 如果没有正确的路径和适当的标头,实现一致的跨浏览器显示就变得非常具有挑战性。 许多开发人员都在堆栈溢出讨论中寻求解决这一老大难问题的方法。 使用搜索功能快速查找答案。

IronPDF 如何简化 PDF 显示?

IronPDF 将复杂的 PDF 生成和显示任务转化为简单明了的代码。 IronPDF 使用其基于 Chrome 浏览器的渲染引擎,从 HTML 内容生成像素完美的 PDF 文档,同时自动处理经常困扰开发人员的技术细节。

该库的ChromePdfRenderer类提供了一种现代的 PDF 创建方法。 开发人员无需手动管理字节数组和响应流,只需调用简单的方法,即可从 HTML 字符串HTML 文件或 URL 生成 PDF。 IronPDF 在内部处理渲染过程,确保在不同环境下输出一致。

除了基本的生成功能外,IronPDF 还提供了广泛的渲染选项,用于自定义输出,包括纸张大小、页边距和JavaScript 执行延迟。 这种灵活性使它成为创建从简单文档到复杂带图表和动态内容的报告的理想选择。 我们诚邀您就首选的渲染设置发表意见。

如何使用 IronPDF 生成和打开 PDF 文件?

首先,通过 NuGet 包管理器安装 IronPdf:

Install-Package IronPdf

下面是 ASP.NET Core 的一个完整示例,它可以生成一个 PDF 文件,并提供在我们的浏览器标签页中打开:

using IronPdf;
using Microsoft.AspNetCore.Mvc;
public class PdfController : Controller
{
    [HttpGet]
    public IActionResult GeneratePdf()
    {
        // Create a new ChromePdfRenderer instance
        var renderer = new ChromePdfRenderer();
        // Generate PDF from HTML string with support for CSS and JavaScript
        string htmlString = @"
            <html>
                <body>
                    <h1>Sample PDF Document</h1>
                    <p>This PDF will open in a new browser tab.</p>
                    <p>Generated on: " + DateTime.Now.ToString() + @"</p>
                </body>
            </html>";
        // Create PDF document with proper format
        var PDF = renderer.RenderHtmlAsPdf(htmlString);
        // Convert to byte array for streaming
        byte[] pdfBytes = pdf.BinaryData;
        // Return file with inline display - key for opening in browser
        Response.Headers.Add("Content-Disposition", "inline; filename=document.pdf");
        Response.Headers.Add("Content-Length", pdfBytes.Length.ToString());
        return File(pdfBytes, "application/pdf");
    }
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;
public class PdfController : Controller
{
    [HttpGet]
    public IActionResult GeneratePdf()
    {
        // Create a new ChromePdfRenderer instance
        var renderer = new ChromePdfRenderer();
        // Generate PDF from HTML string with support for CSS and JavaScript
        string htmlString = @"
            <html>
                <body>
                    <h1>Sample PDF Document</h1>
                    <p>This PDF will open in a new browser tab.</p>
                    <p>Generated on: " + DateTime.Now.ToString() + @"</p>
                </body>
            </html>";
        // Create PDF document with proper format
        var PDF = renderer.RenderHtmlAsPdf(htmlString);
        // Convert to byte array for streaming
        byte[] pdfBytes = pdf.BinaryData;
        // Return file with inline display - key for opening in browser
        Response.Headers.Add("Content-Disposition", "inline; filename=document.pdf");
        Response.Headers.Add("Content-Length", pdfBytes.Length.ToString());
        return File(pdfBytes, "application/pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

显示 PDF 文件

How to Open PDF in New Window ASP .NET C# with IronPDF:Image 1 - Image 1 of 4 related to How to Open PDF in New Window ASP .NET C# with IronPDF

上面的代码使用了 [HttpGet]。 如果您是在用户提交表单后创建此 PDF,您可能会使用 [HttpPost] 属性。 这将确保您的读者了解简单请求与提交包含数据的帖子请求之间的区别。

在浏览器中打开 PDF 文件的关键是将 Content-Disposition 标头设置为 "内联 "而不是 "附件"。 这将告诉浏览器显示文件,而不是通过下载保存文件。 传统 ASP.NET 按钮点击事件中的对象发送者和 EventArgs e 参数可以触发此控制器动作。

对于使用 Literal 控件或 Literal 标签的 WebForms 应用程序,您可以直接在当前页面上嵌入 PDF 查看器:

protected void OpenPdf_Click(object sender, EventArgs e)
{
    var renderer = new ChromePdfRenderer();
    // Generate PDF document from HTML
    var PDF = renderer.RenderHtmlAsPdf("<h1>Invoice</h1><p>Your order details</p>");
    // Get byte array from PDF
    byte[] data = pdf.BinaryData;
    // Clear response and write PDF to browser
    Response.Clear();
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-Length", data.Length.ToString());
    Response.AddHeader("Content-Disposition", "inline; filename=invoice.pdf");
    Response.BinaryWrite(data);
    Response.End();
}
protected void OpenPdf_Click(object sender, EventArgs e)
{
    var renderer = new ChromePdfRenderer();
    // Generate PDF document from HTML
    var PDF = renderer.RenderHtmlAsPdf("<h1>Invoice</h1><p>Your order details</p>");
    // Get byte array from PDF
    byte[] data = pdf.BinaryData;
    // Clear response and write PDF to browser
    Response.Clear();
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-Length", data.Length.ToString());
    Response.AddHeader("Content-Disposition", "inline; filename=invoice.pdf");
    Response.BinaryWrite(data);
    Response.End();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

对于希望创建 PDF 表单或添加数字签名的用户,IronPDF 可为这些高级功能提供全面支持。

浏览器选项卡控件怎么样?

服务器端代码决定 PDF 是否内联显示,而控制 PDF 在同一标签页或新标签页打开则需要客户端 JavaScript。 HTML 链接中的 target 属性为在新窗口中打开 PDF 提供了最简单的解决方案:

<a href="/Pdf/GeneratePdf" target="_blank">View File</a>
<a href="/Pdf/GeneratePdf" target="_blank">View File</a>
HTML

PDF在新浏览器标签中显示

How to Open PDF in New Window ASP .NET C# with IronPDF:图片 2 - 在新标签页中打开 PDF

为了获得更多控制权,JavaScript 的 window.open 函数可以很好地与动态生成的 URL 配合使用,在新的浏览器标签页中打开 PDF 文件:

function openPdfInNewTab() {
    // Open PDF in new window using JavaScript
    window.open('/Pdf/GeneratePdf', '_blank');
    return false; // Prevent default form submission
}
function openPdfInNewTab() {
    // Open PDF in new window using JavaScript
    window.open('/Pdf/GeneratePdf', '_blank');
    return false; // Prevent default form submission
}
JAVASCRIPT

在 ASP.NET 网络应用程序中,将其与按钮控件相结合:

<asp:Button ID="btnViewPdf" runat="server"
            OnClientClick="window.open('/Pdf/GeneratePdf', '_blank'); return false;"
            Text="Open PDF in New Tab" />
<asp:Button ID="btnViewPdf" runat="server"
            OnClientClick="window.open('/Pdf/GeneratePdf', '_blank'); return false;"
            Text="Open PDF in New Tab" />
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

注意:在使用 JavaScript 的 window.open() 时,第二个参数 '_blank' 将在新的单独窗口或选项卡中打开文档。 如果不需要指定新窗口的名称,可以留空。

HTML 对象标签为在页面中直接嵌入 PDF 文档提供了另一种选择,在用户安装了 Adobe PDF 阅读器时尤其有用:

<object data="/Pdf/GeneratePdf" type="application/pdf" width="100%" height="600px">
    <embed src="/Pdf/GeneratePdf" type="application/pdf" />
    <p>Your browser doesn't support embedded PDF documents.
       <a href="/Pdf/GeneratePdf" target="_blank">View PDF File</a>
    </p>
</object>
<object data="/Pdf/GeneratePdf" type="application/pdf" width="100%" height="600px">
    <embed src="/Pdf/GeneratePdf" type="application/pdf" />
    <p>Your browser doesn't support embedded PDF documents.
       <a href="/Pdf/GeneratePdf" target="_blank">View PDF File</a>
    </p>
</object>
HTML

嵌入式 PDF 文件

How to Open PDF in New Window ASP .NET C# with IronPDF:图像 3 - 嵌入式 PDF 文件

在有 Adobe PDF 阅读器或类似插件的情况下,虽然现代浏览器越来越多地支持原生 PDF 显示而无需额外软件,但这种方法仍能很好地发挥作用。 根据 Microsoft 文档,正确的 HTTP 标头与客户端代码相结合,可提供最可靠的跨浏览器解决方案。 请注意 target="_blank" 属性的重要性。

如何处理不同的文件源?

IronPDF 擅长处理 HTML 字符串以外的各种输入源。 在处理现有的 PDF 文件或从不同的数据格式生成文件时,该库提供了灵活的选项,可为用户提供 PDF 文档。

用于从正确路径加载现有 PDF 文档:

public IActionResult ViewFile(string fileName)
{
    // Ensure correct path to PDF file
    string path = Path.Combine(_webHostEnvironment.WebRootPath, "pdfs", fileName);
    // Load existing PDF document
    var PDF = PdfDocument.FromFile(path);
    // Optionally add additional information to the PDF
    pdf.AddPage(renderer.RenderHtmlAsPdf("<h2>Additional Information</h2>"));
    // Convert to stream for browser display
    var stream = pdf.Stream;
    byte[] bytes = stream.ToArray();
    // Set headers for inline display in new browser tab
    Response.Headers.Add("Content-Disposition", "inline; filename=" + fileName);
    Response.Headers.Add("Content-Length", bytes.Length.ToString());
    return File(bytes, "application/pdf");
}
public IActionResult ViewFile(string fileName)
{
    // Ensure correct path to PDF file
    string path = Path.Combine(_webHostEnvironment.WebRootPath, "pdfs", fileName);
    // Load existing PDF document
    var PDF = PdfDocument.FromFile(path);
    // Optionally add additional information to the PDF
    pdf.AddPage(renderer.RenderHtmlAsPdf("<h2>Additional Information</h2>"));
    // Convert to stream for browser display
    var stream = pdf.Stream;
    byte[] bytes = stream.ToArray();
    // Set headers for inline display in new browser tab
    Response.Headers.Add("Content-Disposition", "inline; filename=" + fileName);
    Response.Headers.Add("Content-Length", bytes.Length.ToString());
    return File(bytes, "application/pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

打开的 PDF 文件

How to Open PDF in New Window ASP .NET C# with IronPDF:图像 4 - 查看现有 PDF 文档

在使用数据库或外部来源的字节数组时,需要小心处理,以确保 PDF 能正确打开:

public IActionResult DisplayFromDatabase(int documentId)
{
    // Retrieve byte array from database or system
    byte[] pdfData = GetPdfFromDatabase(documentId);
    // Load PDF document from bytes
    var PDF = PdfDocument.FromBytes(pdfData);
    // Optionally sign or modify the PDF
    // pdf.SignWithDigitalCertificate(...);
    // Set response headers for inline display
    Response.Headers.Add("Content-Disposition",
                        $"inline; filename=document_{documentId}.pdf");
    Response.Headers.Add("Content-Length", pdfData.Length.ToString());
    // Return file to open in browser
    return File(pdfData, "application/pdf");
}
public IActionResult DisplayFromDatabase(int documentId)
{
    // Retrieve byte array from database or system
    byte[] pdfData = GetPdfFromDatabase(documentId);
    // Load PDF document from bytes
    var PDF = PdfDocument.FromBytes(pdfData);
    // Optionally sign or modify the PDF
    // pdf.SignWithDigitalCertificate(...);
    // Set response headers for inline display
    Response.Headers.Add("Content-Disposition",
                        $"inline; filename=document_{documentId}.pdf");
    Response.Headers.Add("Content-Length", pdfData.Length.ToString());
    // Return file to open in browser
    return File(pdfData, "application/pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

对于需要将 HTML 对象标记与 Literal 控件集成的场景,IronPDF 支持 高级 HTML 到 PDF 的转换,包括 CSS 样式、图像,甚至 网络字体。 该库还提供全面的故障排除指南,以实现完美的像素效果。 这样您就可以轻松访问文件数据。

结论

使用 IronPDF for .NET 学习如何在新窗口中打开 PDF 变得简单易行。 通过处理生成 PDF 的复杂性和正确设置 HTTP 标头,开发人员可以确保在不同浏览器上显示一致,同时保持程序代码的简洁和可维护性。 无论您是处理 HTML 字符串、现有 PDF 文档,还是数据库中的字节数组,IronPDF 都能提供所需的工具,以用户期望的方式准确交付 PDF 内容。

立即开始免费试用 IronPDF,在您的 ASP.NET 应用程序中实现专业的 PDF 功能。 对于生产部署,请查看我们的 许可选项,其中包括针对企业网络应用程序的全面支持和附加功能。

常见问题解答

如何使用 ASP.NET 和 C# 在新的浏览器标签页中打开 PDF?

要使用 ASP.NET 和 C# 在新的浏览器标签页中打开 PDF,可以使用 IronPDF for .NET 来生成和流式传输 PDF 文档。通过在响应中设置正确的 HTTP 标头,可以确保 PDF 在新标签页中打开,而不是下载。

在浏览器标签页中显示 PDF 有什么好处?

在浏览器标签页中显示 PDF 可让用户直接在浏览器中查看文档,而无需先下载文档,从而增强了用户体验。这种方法还能让用户在网站上停留更长时间,并保持其浏览会话的上下文。

如何设置 HTTP 标头以在新标签页中打开 PDF?

要为在新标签页中打开 PDF 设置 HTTP 标头,请确保使用 "Content-Disposition: inline; filename="yourfile.pdf""。该标头建议浏览器尝试在浏览器窗口中以内联方式显示 PDF。

JavaScript 能否用于在新窗口中打开 PDF?

是的,JavaScript 可用来在新窗口中打开 PDF。通过创建目标属性设置为"_blank "的超链接元素,可以确保在新的浏览器标签页或窗口中打开 PDF。

IronPDF 是否支持 ASP.NET 中的各种 PDF 功能?

是的,IronPDF for .NET 支持 ASP.NET 中广泛的 PDF 功能,包括创建、编辑和渲染 PDF 以及在浏览器标签页中打开 PDF。

是否可以自定义浏览器标签页中显示的 PDF 的外观?

虽然定制 PDF 本身的外观是通过 PDF 生成过程完成的,但它们在浏览器标签页中的显示方式则取决于浏览器的 PDF 查看器功能。IronPDF 可帮助生成在浏览器中显示效果良好的高质量 PDF。

IronPDF 在改善网络应用程序中的 PDF 显示方面发挥了什么作用?

IronPDF 通过为开发人员提供以编程方式生成和处理 PDF 的工具,增强了 PDF 在网络应用程序中的显示效果,确保其在浏览器中的显示效果得到优化,并满足特定用户的需求。

IronPdf 能否高效处理大型 PDF 文件?

是的,IronPDF 旨在高效处理大型 PDF 文件,提供性能优化,确保在新浏览器标签页中打开 PDF 文件时能快速渲染并尽量缩短加载时间。

IronPDF 如何确保不同浏览器之间的兼容性?

IronPDF 生成符合标准的 PDF 文件,可兼容不同的浏览器,确保用户无论选择何种浏览器,都能获得一致的浏览体验。

Curtis Chau
技术作家

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

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