Cómo exportar un PDF en C# | IronPDF

C# Tutorial de ejemplo de código de exportación a PDF

This article was translated from English: Does it need improvement?
Translated
View the article in English

Utilice IronPDF para exportar contenido HTML a PDF en C# con métodos sencillos como SaveAs(), Stream y BinaryData. Esta biblioteca PDF de C# permite a los desarrolladores convertir mediante programación documentos HTML a PDF y servirlos a navegadores web o guardarlos en disco.

IronPDF es una biblioteca PDF para C# que te permite usar C# para guardar tu HTML como un PDF. También permite a los desarrolladores de C# / VB editar documentos PDF mediante programación. Ya se trate de generar informes, crear facturas o convertir páginas web, IronPDF ofrece una solución sólida para generación de PDF en aplicaciones C#.

como-título:2(Inicio rápido: Exportar HTML a PDF en C# con IronPDF)

Exporte su contenido HTML a PDF en C# utilizando IronPDF. Esta guía muestra cómo convertir HTML en un documento PDF y guardarlo con unas pocas líneas de código. IronPDF simplifica la generación de PDF, permitiendo a los desarrolladores integrar la funcionalidad de exportación de PDF en sus aplicaciones.

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronPDF con el gestor de paquetes NuGet

    PM > Install-Package IronPdf

  2. Copie y ejecute este fragmento de código.

    new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>HelloPDF</h1>").SaveAs("myExportedFile.pdf");
  3. Despliegue para probar en su entorno real

    Empieza a utilizar IronPDF en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer


¿Cuáles son las diferentes opciones para guardar archivos PDF?

Al trabajar con documentos PDF en C#, IronPDF ofrece múltiples opciones para guardar y exportar los PDF generados. Cada método sirve para diferentes casos de uso, desde el simple almacenamiento de archivos hasta el servicio de archivos PDF en aplicaciones web. Las siguientes secciones cubren las opciones disponibles para exportar y guardar archivos PDF en C#.

Cómo guardar PDF en disco

Usa el método PdfDocument.SaveAs para guardar tu PDF en disco. Este es el enfoque más sencillo para las aplicaciones de escritorio o cuando se necesita almacenar archivos PDF de forma permanente en el servidor.

// Complete example for saving PDF to disk
using IronPdf;

// Initialize the Chrome PDF renderer
var renderer = new ChromePdfRenderer();

// Create HTML content with styling
string htmlContent = @"
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        h1 { color: #333; }
        .content { line-height: 1.6; }
    </style>
</head>
<body>
    <h1>Invoice #12345</h1>
    <div class='content'>
        <p>Date: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p>
        <p>Thank you for your business!</p>
    </div>
</body>
</html>";

// Render HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

// Save to disk with standard method
pdf.SaveAs("invoice_12345.pdf");

// Save with password protection for sensitive documents
pdf.Password = "secure123";
pdf.SaveAs("protected_invoice_12345.pdf");
// Complete example for saving PDF to disk
using IronPdf;

// Initialize the Chrome PDF renderer
var renderer = new ChromePdfRenderer();

// Create HTML content with styling
string htmlContent = @"
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        h1 { color: #333; }
        .content { line-height: 1.6; }
    </style>
</head>
<body>
    <h1>Invoice #12345</h1>
    <div class='content'>
        <p>Date: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p>
        <p>Thank you for your business!</p>
    </div>
</body>
</html>";

// Render HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

// Save to disk with standard method
pdf.SaveAs("invoice_12345.pdf");

// Save with password protection for sensitive documents
pdf.Password = "secure123";
pdf.SaveAs("protected_invoice_12345.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Este método permite añadir protección por contraseña. Consulta el siguiente artículo para obtener más información sobre la firma digital de PDF exportados: Firmar digitalmente un documento PDF.' Para conocer otras opciones de seguridad, explore nuestra guía sobre Permisos y contraseñas de PDF.

Cómo guardar un archivo PDF en MemoryStream en C# (System.IO.MemoryStream)

La propiedad IronPdf.PdfDocument.Stream guarda el PDF en memoria usando un System.IO.MemoryStream. Este enfoque es ideal cuando se necesita manipular los datos PDF en memoria o pasarlos a otros métodos sin crear archivos temporales. Más información sobre trabajar con flujos de memoria PDF.

// Example: Save PDF to MemoryStream
using IronPdf;
using System.IO;

var renderer = new ChromePdfRenderer();

// Render HTML content
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Monthly Report</h1><p>Sales figures...</p>");

// Get the PDF as a MemoryStream
MemoryStream stream = pdf.Stream;

// Example: Upload to cloud storage or database
// UploadToCloudStorage(stream);

// Example: Email as attachment without saving to disk
// EmailService.SendWithAttachment(stream, "report.pdf");

// Remember to dispose of the stream when done
stream.Dispose();
// Example: Save PDF to MemoryStream
using IronPdf;
using System.IO;

var renderer = new ChromePdfRenderer();

// Render HTML content
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Monthly Report</h1><p>Sales figures...</p>");

// Get the PDF as a MemoryStream
MemoryStream stream = pdf.Stream;

// Example: Upload to cloud storage or database
// UploadToCloudStorage(stream);

// Example: Email as attachment without saving to disk
// EmailService.SendWithAttachment(stream, "report.pdf");

// Remember to dispose of the stream when done
stream.Dispose();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Cómo guardar en datos binarios

La propiedad IronPdf.PdfDocument.BinaryData exporta el documento PDF como datos binarios en memoria. Esto resulta especialmente útil para el almacenamiento en bases de datos o cuando se integra con API que requieren matrices de bytes.

Esto genera el PDF como un ByteArray, que se expresa en C# como byte [].

// Example: Convert PDF to binary data
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure rendering options for better quality
renderer.RenderingOptions = new ChromePdfRenderOptions()
{
    MarginTop = 20,
    MarginBottom = 20,
    MarginLeft = 10,
    MarginRight = 10,
    PaperSize = IronPdf.Rendering.PdfPaperSize.A4
};

// Render content to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Contract Document</h1>");

// Get binary data
byte[] binaryData = pdf.BinaryData;

// Example: Store in database
// database.StorePdfDocument(documentId, binaryData);

// Example: Send via API
// apiClient.UploadDocument(binaryData);
// Example: Convert PDF to binary data
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure rendering options for better quality
renderer.RenderingOptions = new ChromePdfRenderOptions()
{
    MarginTop = 20,
    MarginBottom = 20,
    MarginLeft = 10,
    MarginRight = 10,
    PaperSize = IronPdf.Rendering.PdfPaperSize.A4
};

// Render content to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Contract Document</h1>");

// Get binary data
byte[] binaryData = pdf.BinaryData;

// Example: Store in database
// database.StorePdfDocument(documentId, binaryData);

// Example: Send via API
// apiClient.UploadDocument(binaryData);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Para situaciones más avanzadas que impliquen la manipulación de datos binarios, consulte nuestra guía sobre conversión de PDF a MemoryStream.

Cómo servir desde un servidor web al navegador

<Descripción: Diagrama o captura de pantalla que ilustre el concepto de código -->

Para servir un PDF a la web, necesitamos enviarlo como datos binarios en lugar de HTML. Esto es esencial para las aplicaciones web en las que los usuarios necesitan descargar o ver archivos PDF directamente en sus navegadores. IronPDF se integra con aplicaciones MVC y ASP.NET tradicionales.

Exportación de PDF de MVC

En las aplicaciones MVC modernas, servir archivos PDF es sencillo utilizando el FileStreamResult. Este enfoque funciona bien con aplicaciones ASP.NET Core MVC:

// MVC Controller method for PDF export
public IActionResult DownloadInvoice(int invoiceId)
{
    // Generate your HTML content
    string htmlContent = GenerateInvoiceHtml(invoiceId);

    // Create PDF using IronPDF
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

    // Get the PDF stream
    MemoryStream stream = pdf.Stream;

    // Reset stream position
    stream.Position = 0;

    // Return file to browser - will prompt download
    return new FileStreamResult(stream, "application/pdf")
    {
        FileDownloadName = $"invoice_{invoiceId}.pdf"
    };
}

// Alternative: Display PDF in browser instead of downloading
public IActionResult ViewInvoice(int invoiceId)
{
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(GenerateInvoiceHtml(invoiceId));

    // Return PDF for browser viewing
    return File(pdf.BinaryData, "application/pdf");
}
// MVC Controller method for PDF export
public IActionResult DownloadInvoice(int invoiceId)
{
    // Generate your HTML content
    string htmlContent = GenerateInvoiceHtml(invoiceId);

    // Create PDF using IronPDF
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

    // Get the PDF stream
    MemoryStream stream = pdf.Stream;

    // Reset stream position
    stream.Position = 0;

    // Return file to browser - will prompt download
    return new FileStreamResult(stream, "application/pdf")
    {
        FileDownloadName = $"invoice_{invoiceId}.pdf"
    };
}

// Alternative: Display PDF in browser instead of downloading
public IActionResult ViewInvoice(int invoiceId)
{
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(GenerateInvoiceHtml(invoiceId));

    // Return PDF for browser viewing
    return File(pdf.BinaryData, "application/pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Exportación de PDF de ASP.NET

Para aplicaciones ASP.NET WebForms tradicionales, puede servir PDF directamente a través del objeto Response:

// ASP.NET WebForms PDF export
protected void ExportButton_Click(object sender, EventArgs e)
{
    // Create your PDF document
    var renderer = new ChromePdfRenderer();

    // Configure rendering options
    renderer.RenderingOptions = new ChromePdfRenderOptions()
    {
        PaperSize = IronPdf.Rendering.PdfPaperSize.Letter,
        PrintHtmlBackgrounds = true,
        CreatePdfFormsFromHtml = true
    };

    // Generate PDF from current page or custom HTML
    PdfDocument MyPdfDocument = renderer.RenderHtmlAsPdf(GetReportHtml());

    // Retrieves the PDF binary data
    byte[] Binary = MyPdfDocument.BinaryData;

    // Clears the existing response content
    Response.Clear();

    // Sets the response content type to 'application/octet-stream', suitable for PDF files
    Response.ContentType = "application/octet-stream";

    // Add content disposition header for download
    Response.AddHeader("Content-Disposition", 
        "attachment; filename=report_" + DateTime.Now.ToString("yyyyMMdd") + ".pdf");

    // Writes the binary data to the response output stream
    Context.Response.OutputStream.Write(Binary, 0, Binary.Length);

    // Flushes the response to send the data to the client
    Response.Flush();

    // End the response
    Response.End();
}
// ASP.NET WebForms PDF export
protected void ExportButton_Click(object sender, EventArgs e)
{
    // Create your PDF document
    var renderer = new ChromePdfRenderer();

    // Configure rendering options
    renderer.RenderingOptions = new ChromePdfRenderOptions()
    {
        PaperSize = IronPdf.Rendering.PdfPaperSize.Letter,
        PrintHtmlBackgrounds = true,
        CreatePdfFormsFromHtml = true
    };

    // Generate PDF from current page or custom HTML
    PdfDocument MyPdfDocument = renderer.RenderHtmlAsPdf(GetReportHtml());

    // Retrieves the PDF binary data
    byte[] Binary = MyPdfDocument.BinaryData;

    // Clears the existing response content
    Response.Clear();

    // Sets the response content type to 'application/octet-stream', suitable for PDF files
    Response.ContentType = "application/octet-stream";

    // Add content disposition header for download
    Response.AddHeader("Content-Disposition", 
        "attachment; filename=report_" + DateTime.Now.ToString("yyyyMMdd") + ".pdf");

    // Writes the binary data to the response output stream
    Context.Response.OutputStream.Write(Binary, 0, Binary.Length);

    // Flushes the response to send the data to the client
    Response.Flush();

    // End the response
    Response.End();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Escenarios de exportación avanzados

Exportación de PDF por lotes

Cuando se trata de varios PDF, se puede optimizar el proceso de exportación:

// Batch export multiple PDFs to a zip file
public void ExportMultiplePdfsAsZip(List<string> htmlDocuments, string zipFilePath)
{
    using (var zipArchive = ZipFile.Open(zipFilePath, ZipArchiveMode.Create))
    {
        var renderer = new ChromePdfRenderer();

        for (int i = 0; i < htmlDocuments.Count; i++)
        {
            // Render each HTML document
            PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlDocuments[i]);

            // Add to zip archive
            var entry = zipArchive.CreateEntry($"document_{i + 1}.pdf");
            using (var entryStream = entry.Open())
            {
                pdf.Stream.CopyTo(entryStream);
            }
        }
    }
}
// Batch export multiple PDFs to a zip file
public void ExportMultiplePdfsAsZip(List<string> htmlDocuments, string zipFilePath)
{
    using (var zipArchive = ZipFile.Open(zipFilePath, ZipArchiveMode.Create))
    {
        var renderer = new ChromePdfRenderer();

        for (int i = 0; i < htmlDocuments.Count; i++)
        {
            // Render each HTML document
            PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlDocuments[i]);

            // Add to zip archive
            var entry = zipArchive.CreateEntry($"document_{i + 1}.pdf");
            using (var entryStream = entry.Open())
            {
                pdf.Stream.CopyTo(entryStream);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Exportación condicional basada en permisos de usuario

// Export with different options based on user role
public byte[] ExportPdfWithPermissions(string htmlContent, UserRole userRole)
{
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

    // Apply security based on user role
    if (userRole == UserRole.Guest)
    {
        // Restrict printing and copying for guests
        pdf.SecuritySettings.AllowUserPrinting = false;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;
    }
    else if (userRole == UserRole.Standard)
    {
        // Allow printing but not editing
        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserEditing = false;
    }

    return pdf.BinaryData;
}
// Export with different options based on user role
public byte[] ExportPdfWithPermissions(string htmlContent, UserRole userRole)
{
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

    // Apply security based on user role
    if (userRole == UserRole.Guest)
    {
        // Restrict printing and copying for guests
        pdf.SecuritySettings.AllowUserPrinting = false;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;
    }
    else if (userRole == UserRole.Standard)
    {
        // Allow printing but not editing
        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserEditing = false;
    }

    return pdf.BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Prácticas recomendadas para la exportación de PDF

Al exportar archivos PDF en aplicaciones de producción, tenga en cuenta estas prácticas recomendadas:

  1. Gestión de memoria: Para PDF de gran tamaño o aplicaciones con mucho tráfico, disponga adecuadamente de los objetos y flujos PDF para evitar fugas de memoria. Considera el uso de métodos async para un mejor rendimiento.
  2. Manejo de errores: Aplique siempre una gestión de errores adecuada al exportar archivos PDF, especialmente en aplicaciones web en las que pueden producirse problemas de red.
  3. Compresión: Para PDF de gran tamaño, utilice la compresión de PDF para reducir el tamaño del archivo antes de servirlo a los usuarios.
  4. Metadatos: establezca los metadatos PDF adecuados, incluidos el título, el autor y la fecha de creación, para una mejor gestión de los documentos.
  5. Compatibilidad multiplataforma: Asegúrese de que la funcionalidad de exportación funciona en diferentes plataformas. IronPDF es compatible con Windows, Linux y macOS.

Conclusión

IronPDF ofrece opciones completas para exportar archivos PDF en aplicaciones C#, desde simples archivos guardados hasta complejos escenarios de servidor web. Utilizar el método de exportación adecuado para su caso de uso le permite generar y entregar documentos PDF a sus usuarios de forma eficaz, manteniendo al mismo tiempo los estándares de seguridad y rendimiento.

Preguntas Frecuentes

¿Cómo se exporta contenido HTML a PDF en C#?

Puede exportar HTML a PDF en C# utilizando la clase ChromePdfRenderer de IronPDF. Basta con crear una instancia del renderizador, utilizar el método RenderHtmlAsPdf() para convertir el contenido HTML y, a continuación, guardarlo mediante el método SaveAs(). IronPDF facilita la conversión de cadenas HTML, archivos o URL directamente en documentos PDF.

¿Cuáles son los diferentes métodos para guardar un PDF utilizando C#?

IronPDF ofrece varios métodos para guardar archivos PDF: SaveAs() para guardar en disco, Stream para servir PDFs en aplicaciones web sin crear archivos temporales, y BinaryData para obtener el PDF como una matriz de bytes. Cada método de IronPDF sirve para diferentes casos de uso, desde el simple almacenamiento de archivos hasta la entrega dinámica a través de la web.

¿Puedo guardar un PDF en la memoria en lugar de en el disco?

Sí, IronPDF le permite guardar archivos PDF en la memoria utilizando System.IO.MemoryStream. Esto es útil para aplicaciones web en las que desea servir archivos PDF directamente a los usuarios sin crear archivos temporales en el servidor. Puede utilizar la propiedad Stream o convertir el PDF en datos binarios.

¿Cómo puedo proteger un PDF con una contraseña?

IronPDF permite la protección mediante contraseña estableciendo la propiedad Password en el objeto PdfDocument antes de guardarlo. Simplemente asigne una cadena de contraseña a pdf.Password y luego utilice SaveAs() para crear un archivo PDF protegido que requiera la contraseña para abrirse.

¿Puedo servir un PDF directamente a navegadores web sin guardarlo en disco?

Sí, IronPDF le permite servir archivos PDF directamente a los navegadores web como datos binarios. Puede utilizar la propiedad BinaryData para obtener el PDF como una matriz de bytes y servirlo a través del flujo de respuesta de su aplicación web, eliminando la necesidad de almacenar archivos temporales.

¿Cuál es la forma más sencilla de convertir y guardar HTML como PDF en una sola línea?

IronPDF proporciona una solución de una sola línea: new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("Tu HTML").SaveAs("output.pdf"). Esto crea un renderizador, convierte HTML a PDF, y lo guarda en el disco en una sola sentencia.

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
Revisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente Principal de Programas - Equipo de la Comunidad .NET
Jeff también es Gerente Principal de Programas para los equipos de .NET y Visual Studio. Es el productor ejecutivo de la serie de conferencias virtuales .NET Conf y anfitrión de 'Fritz and Friends', una transmisión en vivo para desarrolladores que se emite dos veces a la semana donde habla sobre tecnología y escribe código junto con la audiencia. Jeff escribe talleres, presentaciones, y planifica contenido para los eventos de desarrolladores más importantes de Microsoft, incluyendo Microsoft Build, Microsoft Ignite, .NET Conf y la Cumbre de Microsoft MVP.
¿Listo para empezar?
Nuget Descargas 16,685,821 | Versión: 2025.12 recién lanzado