Saltar al pie de página
USANDO IRONPDF

Cómo crear un visor de PDF en una aplicación web ASP.NET con IronPDF

IronPDF permite la visualización perfecta de PDF en aplicaciones ASP.NET Core al generar PDF del lado del servidor que se muestran directamente en los visores integrados de los navegadores, sin necesidad de complementos ni dependencias externas: solo configure los encabezados de respuesta y deje que el motor de renderizado basado en Chrome de IronPDF maneje la conversión de HTML a PDF .

Crear aplicaciones web que muestren documentos PDF es sencillo. Ya sea que muestre facturas, informes o formularios interactivos, los usuarios esperan una experiencia de visualización de documentos fluida en el navegador, sin necesidad de Adobe Acrobat Reader ni herramientas adicionales de terceros.

IronPDF hace que esto sea notablemente sencillo. Esta biblioteca .NET, actualizada con frecuencia, le permite crear, renderizar y mostrar archivos PDF dentro de su proyecto ASP.NET Core con solo unas pocas líneas de código. Veamos cómo implementar un control de visor de PDF profesional que maneje todo, desde la conversión HTML simple hasta vistas Razor complejas.

¿Cómo funciona la visualización de PDF basada en navegador?

La buena noticia es que los navegadores modernos ya incorporan un visor de PDF. Cuando su servidor envía un archivo PDF con el tipo MIME correcto ( application/pdf ), el navegador lo muestra automáticamente en línea. Esto significa que no necesita complementos externos ni complejas bibliotecas JavaScript del lado del cliente para ver documentos PDF .

La clave está en generar documentos PDF de alta calidad y configurar los encabezados de respuesta correctos. IronPDF se encarga del trabajo pesado en el lado del servidor, utilizando su motor de renderizado Chrome para crear páginas PDF con píxeles perfectos a partir de HTML, CSS y JavaScript . ¿El resultado? Sus usuarios obtienen una experiencia de visualización de documentos nativa con funciones como selección de texto , búsqueda, impresión y descarga, todo sin ninguna configuración de interfaz de usuario adicional. El contenido se puede incrustar y mostrar fácilmente.

Este enfoque funciona sin problemas en todas las aplicaciones .NET , ya sea que esté construyendo con ASP.NET Core MVC , vistas Razor o incluso proyectos de carpetas web heredados. Para implementaciones en contenedores, IronPDF ofrece un excelente soporte de Docker con dependencias mínimas, lo que lo hace ideal para arquitecturas de microservicios.

¿Cómo instalar y configurar el PDF Viewer Control?

Empezar a utilizar IronPDF en Visual Studio sólo requiere unos pocos pasos. Abra su proyecto ASP.NET Core e instale el paquete NuGet :

Install-Package IronPdf

Para entornos en contenedores, IronPDF proporciona imágenes oficiales de Docker y admite contenedores tanto de Linux como de Windows. La biblioteca maneja automáticamente las dependencias de Chrome y las instalaciones de fuentes, minimizando la complejidad de implementación.

A continuación, agregue la configuración de su clave de licencia en Program.cs :

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

Para las implementaciones de Azure , puede almacenar la clave de licencia en Azure Key Vault o en variables de entorno. IronPDF también es compatible con AWS Lambda y otras plataformas en la nube con configuraciones de rendimiento optimizadas.

Esa es toda la configuración que necesita para que IronPDF se integre completamente en sus aplicaciones .NET . Consulta la documentación de IronPDF para obtener opciones de configuración adicionales para escenarios avanzados como implementación de Azure o contenedores Docker . Puede comenzar con una prueba gratuita para explorar todas las funciones antes de comprometerse.

¿Cómo generar y mostrar documentos PDF a partir de HTML?

La forma más sencilla de crear un visor de PDF en su aplicación web ASP.NET Core es convertir cadenas HTML directamente. A continuación se muestra un ejemplo de controlador completo con un punto final de verificación de estado para la orquestación de contenedores:

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

¿Cómo se ve el PDF generado en el navegador?

Navegador que muestra un documento PDF con el título "Documento PDF de muestra" y el texto "Este PDF se generó con IronPDF en ASP.NET Core", visto en localhost:7254/Pdf/DisplayFromHtml

La clase ChromePdfRenderer utiliza Chromium para una representación precisa, lo que garantiza que su CSS , JavaScript e imágenes se muestren exactamente como se pretende. Si Content-Disposition está en línea, el navegador mostrará el PDF en lugar de descargarlo.

Esto crea una experiencia de visualización fluida que permite a los usuarios acceder al documento directamente dentro de su interfaz de usuario web. Para documentos con diseños complejos, puede especificar configuraciones de renderizado como ancho y alto dentro del HTML o usando RenderingOptions . Las opciones WaitFor garantizan una representación adecuada en entornos de contenedores donde la latencia de la red puede afectar la carga de activos.

Para conocer más opciones de conversión de HTML, consulte la guía de cadena HTML a PDF y los consejos de optimización del rendimiento .

¿Cómo renderizar archivos PDF a partir de URL y Razor Views?

IronPDF también puede convertir páginas web en vivo en documentos PDF. Esto es perfecto para generar informes o archivar contenido web en sistemas distribuidos:

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

¿Cómo se muestra la representación de PDF basada en URL?

Captura de pantalla de un visor de PDF que muestra la página de inicio de Wikipedia renderizada en una aplicación web ASP.NET con IronPDF, mostrando el contenido de la página principal y los elementos de navegación con el estilo CSS completo.

Para convertir vistas de Razor a PDF , necesitará un método auxiliar que primero renderice la vista como HTML. Este enfoque le permite reutilizar sus plantillas existentes tanto para la visualización web como para la generación de PDF , lo cual es esencial para mantener la coherencia entre los microservicios.

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

¿Qué resultados se obtienen al generar un PDF con Razor View?

Factura en PDF mostrada en un navegador web que muestra la factura n.° 1001 de Acme Corp. con dos partidas por un total de $250.00, lo que demuestra una conversión exitosa de Razor View a PDF.

Este método auxiliar garantiza que tenga una ruta limpia para representar el contenido de su vista Razor en una cadena HTML, que IronPDF luego puede convertir. El tutorial de Razor a PDF cubre este flujo de trabajo en detalle. Para las aplicaciones Blazor , se utilizan enfoques similares con la representación de componentes.

¿Cómo manejar archivos PDF de gran tamaño con streaming?

Al procesar documentos PDF grandes en entornos de contenedores, la transmisión mejora el rendimiento y reduce el uso de memoria. El uso de MemoryStream le permite servir archivos de manera eficiente y al mismo tiempo mantener un bajo consumo de memoria:

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

Para proyectos de formularios web ASP.NET heredados, puede implementar una funcionalidad similar utilizando controladores de eventos con una limpieza de recursos adecuada:

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

Para escenarios de alto rendimiento , considere utilizar métodos asincrónicos y procesamiento paralelo al generar múltiples PDF. La guía de rendimiento de IronPDF proporciona estrategias de optimización detalladas.

¿Qué funciones admite este control de visor de PDF?

Al aprovechar el visor de PDF nativo del navegador, sus usuarios obtienen automáticamente un amplio conjunto de funciones: selección de texto para copiar contenido, funcionalidad de búsqueda para encontrar datos específicos, opciones de impresión para copias físicas y capacidades de descarga para acceso sin conexión.

Este enfoque también maneja escenarios en los que los usuarios necesitan cargar un documento existente para verlo, editarlo o fusionarlo . El procesamiento del lado del servidor de IronPDF maneja la ejecución de JavaScript , la representación de CSS y los formularios , incluidos los elementos interactivos que los usuarios pueden completar.

El marco admite la integración de asistentes de etiquetas, tamaños de página personalizados , encabezados y pies de página , marcas de agua e incluso capacidades de edición . Para funciones de seguridad , IronPDF ofrece encriptación , firmas digitales y compatibilidad con PDF/A para archivado a largo plazo.

Para implementaciones en contenedores, IronPDF proporciona:

Para obtener una descripción completa de las funciones, explore la página de funciones de IronPDF .

¿Cuáles son los próximos pasos para la implementación?

Crear un visor de PDF en una aplicación web ASP.NET es notablemente sencillo con IronPDF. Al combinar su potente motor de renderizado con el visor de PDF integrado del navegador, obtiene una solución profesional para mostrar, procesar y manejar archivos PDF en sus aplicaciones web. Ya sea que esté convirtiendo HTML , URL o vistas Razor , la implementación requiere un código mínimo y al mismo tiempo ofrece la máxima funcionalidad.

Para implementaciones de producción, considere:

¿Está listo para implementar la visualización de PDF en su proyecto? Comience con una prueba gratuita de IronPDF y transforme la forma en que su aplicación web .NET Core gestiona los documentos. Para implementaciones de producción, consulte las opciones de licencia que se ajusten a las necesidades de su equipo. ¿Quieres ver más ejemplos de conversión? Explore cómo IronPDF maneja la conversión de DOCX a PDF , de imágenes a PDF y más en las útiles guías prácticas .

Empiece con IronPDF ahora.
green arrow pointer

Preguntas Frecuentes

¿Cómo puedo crear un visor de PDF en una aplicación web ASP.NET?

Puede crear un visor de PDF en una aplicación web ASP.NET utilizando IronPDF. Le permite mostrar documentos PDF directamente dentro de su aplicación, ofreciendo una experiencia de visualización perfecta sin necesidad de herramientas externas como Adobe Acrobat Reader.

¿Cuáles son las ventajas de utilizar IronPDF para la visualización de PDF en ASP.NET?

IronPDF proporciona una experiencia de visualización de PDF fluida e integrada en aplicaciones ASP.NET. Permite mostrar documentos en línea, admite varios tipos de archivos y elimina la necesidad de visores de PDF de terceros, lo que mejora la experiencia del usuario.

¿Puedo mostrar formularios PDF interactivos en mi aplicación web ASP.NET?

Sí, con IronPDF puede mostrar formularios PDF interactivos en su aplicación web ASP.NET. Admite la representación de campos de formulario y elementos interactivos, lo que permite a los usuarios interactuar con los documentos directamente en el navegador.

¿Es posible mostrar facturas e informes utilizando IronPDF en ASP.NET?

Por supuesto, IronPDF es idóneo para mostrar facturas, informes y otros tipos de documentos en aplicaciones ASP.NET. Garantiza que sus documentos se muestren con precisión y eficacia en la aplicación web.

¿Necesito Adobe Acrobat Reader para ver archivos PDF en aplicaciones ASP.NET utilizando IronPDF?

No, no necesita Adobe Acrobat Reader para ver archivos PDF en aplicaciones ASP.NET cuando utiliza IronPDF. Le permite renderizar y ver archivos PDF directamente en el navegador sin dependencias de terceros.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más