Cómo renderizar imágenes almacenadas en Azure Blob Storage en C# | IronPDF

Renderización de PDF con imágenes Azure Blob Storage en C#

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

Para renderizar PDF con imágenes de Azure Blob Storage en C#, recupere los datos blob como binarios, conviértalos en una cadena base64, incrústelos en una etiqueta HTML img y utilice IronPDF's ChromePdfRenderer para convertir el HTML en PDF.

Azure Blob Storage es un servicio de almacenamiento basado en la nube proporcionado por Microsoft Azure. Almacena grandes cantidades de datos no estructurados, como texto o datos binarios, accesibles a través de HTTP o HTTPS. Cuando se trabaja con archivos PDF en C#, IronPDF proporciona potentes capacidades para manejar varios formatos y fuentes de imagen, incluidos los almacenados en servicios en la nube como Azure Blob Storage.

Para utilizar imágenes almacenadas en Azure Blob Storage, debe manejar el formato de datos binarios en lugar de referencias directas a archivos. La solución consiste en convertir las imágenes en cadenas base64 e incrustarlas en etiquetas img. Este enfoque funciona a la perfección con las funciones de conversión de HTML a PDF de IronPDF, manteniendo la calidad y el formato de la imagen.

como-encabezado:2(Quickstart: Render PDFs with Azure Blob Storage Images)

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.

    var blobBase64 = Convert.ToBase64String(new BlobContainerClient("conn","cont").GetBlobClient("img.jpg").DownloadContent().Value.Content.ToArray());
    new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf($"<img src=\"data:image/jpeg;base64,{blobBase64}\" />").SaveAs("blobImage.pdf");
  3. Despliegue para probar en su entorno real

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


¿Cómo convierto imágenes Azure Blob a HTML?

Configure una cuenta de Azure Storage con un contenedor que contenga blobs y, a continuación, gestione la autenticación y la conexión en su proyecto de C#. Utilice el paquete Azure.Storage.Blobs NuGet junto con IronPDF. Para situaciones de autenticación complejas, explore las funciones de encabezado de solicitud HTTP de IronPDF para el acceso seguro a blobs.

Utilice el método DownloadToStreamAsync para descargar imágenes como secuencias. Convierte los datos de flujo a Base64 e incrústalos en etiquetas HTML img. Incorpore la variable imageTag a su documento HTML. Esta técnica funciona bien para crear informes o documentos con imágenes de almacenamiento en la nube cargadas dinámicamente.

using Azure.Storage.Blobs;
using System;
using System.IO;
using System.Threading.Tasks;

public async Task ConvertBlobToHtmlAsync()
{
    // Define your connection string and container name
    string connectionString = "your_connection_string";
    string containerName = "your_container_name";

    // Initialize BlobServiceClient with the connection string
    BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);

    // Get the BlobContainerClient for the specified container
    BlobContainerClient blobContainer = blobServiceClient.GetBlobContainerClient(containerName);

    // Get the reference to the blob and initialize a stream
    BlobClient blobClient = blobContainer.GetBlobClient("867.jpg");
    using var stream = new MemoryStream();

    // Download the blob data to the stream
    await blobClient.DownloadToAsync(stream);
    stream.Position = 0; // Reset stream position

    // Convert the stream to a byte array
    byte[] array = stream.ToArray();

    // Convert bytes to base64
    var base64 = Convert.ToBase64String(array);

    // Create an img tag with the base64-encoded string
    var imageTag = $"<img src=\"data:image/jpeg;base64,{base64}\"/><br/>";

    // Use the imageTag in your HTML document as needed
}
using Azure.Storage.Blobs;
using System;
using System.IO;
using System.Threading.Tasks;

public async Task ConvertBlobToHtmlAsync()
{
    // Define your connection string and container name
    string connectionString = "your_connection_string";
    string containerName = "your_container_name";

    // Initialize BlobServiceClient with the connection string
    BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);

    // Get the BlobContainerClient for the specified container
    BlobContainerClient blobContainer = blobServiceClient.GetBlobContainerClient(containerName);

    // Get the reference to the blob and initialize a stream
    BlobClient blobClient = blobContainer.GetBlobClient("867.jpg");
    using var stream = new MemoryStream();

    // Download the blob data to the stream
    await blobClient.DownloadToAsync(stream);
    stream.Position = 0; // Reset stream position

    // Convert the stream to a byte array
    byte[] array = stream.ToArray();

    // Convert bytes to base64
    var base64 = Convert.ToBase64String(array);

    // Create an img tag with the base64-encoded string
    var imageTag = $"<img src=\"data:image/jpeg;base64,{base64}\"/><br/>";

    // Use the imageTag in your HTML document as needed
}
Imports Azure.Storage.Blobs
Imports System
Imports System.IO
Imports System.Threading.Tasks

Public Async Function ConvertBlobToHtmlAsync() As Task
	' Define your connection string and container name
	Dim connectionString As String = "your_connection_string"
	Dim containerName As String = "your_container_name"

	' Initialize BlobServiceClient with the connection string
	Dim blobServiceClient As New BlobServiceClient(connectionString)

	' Get the BlobContainerClient for the specified container
	Dim blobContainer As BlobContainerClient = blobServiceClient.GetBlobContainerClient(containerName)

	' Get the reference to the blob and initialize a stream
	Dim blobClient As BlobClient = blobContainer.GetBlobClient("867.jpg")
	Dim stream = New MemoryStream()

	' Download the blob data to the stream
	Await blobClient.DownloadToAsync(stream)
	stream.Position = 0 ' Reset stream position

	' Convert the stream to a byte array
	Dim array() As Byte = stream.ToArray()

	' Convert bytes to base64
	Dim base64 = Convert.ToBase64String(array)

	' Create an img tag with the base64-encoded string
	Dim imageTag = $"<img src=""data:image/jpeg;base64,{base64}""/><br/>"

	' Use the imageTag in your HTML document as needed
End Function
$vbLabelText   $csharpLabel

Cuando trabaje con varias imágenes o diferentes formatos, aproveche la compatibilidad de IronPDF con varios tipos de imágenes, incluidos JPG, PNG, SVG y GIF. El método de codificación base64 funciona universalmente en todos estos formatos.

Trabajar con diferentes formatos de imagen

Azure Blob Storage admite varios formatos de imagen, y IronPDF los gestiona todos cuando se codifican correctamente. He aquí un ejemplo mejorado que determina dinámicamente el tipo MIME:

public string GetImageMimeType(string blobName)
{
    var extension = Path.GetExtension(blobName).ToLower();
    return extension switch
    {
        ".jpg" or ".jpeg" => "image/jpeg",
        ".png" => "image/png",
        ".gif" => "image/gif",
        ".svg" => "image/svg+xml",
        ".webp" => "image/webp",
        _ => "image/jpeg" // default fallback
    };
}

public async Task<string> CreateImageTagFromBlob(BlobClient blobClient)
{
    using var stream = new MemoryStream();
    await blobClient.DownloadToAsync(stream);
    stream.Position = 0;

    var base64 = Convert.ToBase64String(stream.ToArray());
    var mimeType = GetImageMimeType(blobClient.Name);

    return $"<img src=\"data:{mimeType};base64,{base64}\" alt=\"{Path.GetFileNameWithoutExtension(blobClient.Name)}\"/>";
}
public string GetImageMimeType(string blobName)
{
    var extension = Path.GetExtension(blobName).ToLower();
    return extension switch
    {
        ".jpg" or ".jpeg" => "image/jpeg",
        ".png" => "image/png",
        ".gif" => "image/gif",
        ".svg" => "image/svg+xml",
        ".webp" => "image/webp",
        _ => "image/jpeg" // default fallback
    };
}

public async Task<string> CreateImageTagFromBlob(BlobClient blobClient)
{
    using var stream = new MemoryStream();
    await blobClient.DownloadToAsync(stream);
    stream.Position = 0;

    var base64 = Convert.ToBase64String(stream.ToArray());
    var mimeType = GetImageMimeType(blobClient.Name);

    return $"<img src=\"data:{mimeType};base64,{base64}\" alt=\"{Path.GetFileNameWithoutExtension(blobClient.Name)}\"/>";
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

¿Cómo convierto el HTML a PDF?

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

Convierte el imageTag a PDF utilizando el método RenderHtmlAsPdf de ChromePdfRenderer. El motor de renderizado de Chrome de IronPDF mantiene la calidad y el posicionamiento de la imagen durante la conversión. Para obtener resultados óptimos, configure opciones de renderizado para controlar la calidad de salida del PDF.

He aquí cómo llamar a RenderHtmlAsPdf:

:path=/static-assets/pdf/content-code-examples/how-to/images-azure-blob-storage-html-to-pdf.cs
using IronPdf;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf(imageTag);

// Export to a file
pdf.SaveAs("imageToPdf.pdf");
Imports IronPdf

' Instantiate Renderer
Private renderer = New ChromePdfRenderer()

' Create a PDF from a HTML string using C#
Private pdf = renderer.RenderHtmlAsPdf(imageTag)

' Export to a file
pdf.SaveAs("imageToPdf.pdf")
$vbLabelText   $csharpLabel

Ajuste la variable "htmlContent" para incluir su contenido HTML real con la imageTag.

Ejemplo de trabajo completo

He aquí un ejemplo completo que combina la recuperación de Azure Blob Storage con la renderización de IronPDF, incluyendo la gestión de errores y la optimización:

using Azure.Storage.Blobs;
using IronPdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;

public class AzureBlobToPdfConverter
{
    private readonly string _connectionString;
    private readonly ChromePdfRenderer _renderer;

    public AzureBlobToPdfConverter(string connectionString)
    {
        _connectionString = connectionString;
        _renderer = new ChromePdfRenderer();

        // Configure rendering options for better image quality
        _renderer.RenderingOptions.ImageQuality = 100;
        _renderer.RenderingOptions.DpiResolution = 300;
    }

    public async Task<PdfDocument> ConvertBlobImagesToPdfAsync(string containerName, List<string> blobNames)
    {
        var htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<html><body style='margin: 20px;'>");

        var blobServiceClient = new BlobServiceClient(_connectionString);
        var containerClient = blobServiceClient.GetBlobContainerClient(containerName);

        foreach (var blobName in blobNames)
        {
            try
            {
                var blobClient = containerClient.GetBlobClient(blobName);
                var imageTag = await CreateImageTagFromBlob(blobClient);
                htmlBuilder.Append(imageTag);
                htmlBuilder.Append("<br/><br/>"); // Add spacing between images
            }
            catch (Exception ex)
            {
                // Log error and continue with other images
                Console.WriteLine($"Error processing blob {blobName}: {ex.Message}");
            }
        }

        htmlBuilder.Append("</body></html>");

        // Convert the complete HTML to PDF
        return _renderer.RenderHtmlAsPdf(htmlBuilder.ToString());
    }

    private async Task<string> CreateImageTagFromBlob(BlobClient blobClient)
    {
        using var stream = new MemoryStream();
        await blobClient.DownloadToAsync(stream);
        stream.Position = 0;

        var base64 = Convert.ToBase64String(stream.ToArray());
        var mimeType = GetImageMimeType(blobClient.Name);

        return $"<img src=\"data:{mimeType};base64,{base64}\" " +
               $"alt=\"{Path.GetFileNameWithoutExtension(blobClient.Name)}\" " +
               $"style=\"max-width: 100%; height: auto;\"/>";
    }

    private string GetImageMimeType(string blobName)
    {
        var extension = Path.GetExtension(blobName).ToLower();
        return extension switch
        {
            ".jpg" or ".jpeg" => "image/jpeg",
            ".png" => "image/png",
            ".gif" => "image/gif",
            ".svg" => "image/svg+xml",
            ".webp" => "image/webp",
            _ => "image/jpeg"
        };
    }
}
using Azure.Storage.Blobs;
using IronPdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;

public class AzureBlobToPdfConverter
{
    private readonly string _connectionString;
    private readonly ChromePdfRenderer _renderer;

    public AzureBlobToPdfConverter(string connectionString)
    {
        _connectionString = connectionString;
        _renderer = new ChromePdfRenderer();

        // Configure rendering options for better image quality
        _renderer.RenderingOptions.ImageQuality = 100;
        _renderer.RenderingOptions.DpiResolution = 300;
    }

    public async Task<PdfDocument> ConvertBlobImagesToPdfAsync(string containerName, List<string> blobNames)
    {
        var htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<html><body style='margin: 20px;'>");

        var blobServiceClient = new BlobServiceClient(_connectionString);
        var containerClient = blobServiceClient.GetBlobContainerClient(containerName);

        foreach (var blobName in blobNames)
        {
            try
            {
                var blobClient = containerClient.GetBlobClient(blobName);
                var imageTag = await CreateImageTagFromBlob(blobClient);
                htmlBuilder.Append(imageTag);
                htmlBuilder.Append("<br/><br/>"); // Add spacing between images
            }
            catch (Exception ex)
            {
                // Log error and continue with other images
                Console.WriteLine($"Error processing blob {blobName}: {ex.Message}");
            }
        }

        htmlBuilder.Append("</body></html>");

        // Convert the complete HTML to PDF
        return _renderer.RenderHtmlAsPdf(htmlBuilder.ToString());
    }

    private async Task<string> CreateImageTagFromBlob(BlobClient blobClient)
    {
        using var stream = new MemoryStream();
        await blobClient.DownloadToAsync(stream);
        stream.Position = 0;

        var base64 = Convert.ToBase64String(stream.ToArray());
        var mimeType = GetImageMimeType(blobClient.Name);

        return $"<img src=\"data:{mimeType};base64,{base64}\" " +
               $"alt=\"{Path.GetFileNameWithoutExtension(blobClient.Name)}\" " +
               $"style=\"max-width: 100%; height: auto;\"/>";
    }

    private string GetImageMimeType(string blobName)
    {
        var extension = Path.GetExtension(blobName).ToLower();
        return extension switch
        {
            ".jpg" or ".jpeg" => "image/jpeg",
            ".png" => "image/png",
            ".gif" => "image/gif",
            ".svg" => "image/svg+xml",
            ".webp" => "image/webp",
            _ => "image/jpeg"
        };
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Consideraciones sobre el rendimiento

Cuando trabaje con imágenes de gran tamaño o múltiples blobs, aplique técnicas de sincronización y multihilo para mejorar el rendimiento. Añade mecanismos de caché para evitar descargar los mismos blobs repetidamente.

Para los entornos de producción, especialmente las implementaciones de Azure, consulte Guía de implementación de Azure de IronPDF para conocer las mejores prácticas y recomendaciones de configuración. Para operaciones que requieren mucha memoria, utilice las funciones de flujo de memoria de IronPDF para optimizar el uso de recursos.

Seguridad y autenticación

Garantice una autenticación adecuada al acceder a Azure Blob Storage. Para mayor seguridad, utilice cabeceras HTTP personalizadas al acceder a recursos protegidos. Considere la posibilidad de implementar protección de contraseña de PDF para documentos confidenciales que contengan imágenes blob de Azure.

Solución de problemas comunes

Si se encuentra con problemas de integración de almacenamiento blob, consulte Guía de solución de problemas de Azure de IronPDF para obtener soluciones a problemas comunes. Para cuestiones específicas de las imágenes, la documentación sobre renderización de imágenes ofrece orientación detallada sobre el manejo de diversos escenarios.

Preguntas Frecuentes

¿Cómo puedo generar archivos PDF con imágenes almacenadas en Azure Blob Storage?

Para generar PDF con imágenes de Azure Blob Storage, recupere los datos blob como binarios, conviértalos en una cadena base64, incrústelos en una etiqueta HTML img y utilice ChromePdfRenderer de IronPDF para convertir el HTML en PDF. Este método funciona perfectamente con las funciones de conversión de HTML a PDF de IronPDF, manteniendo la calidad de la imagen.

¿Cuál es la forma más rápida de convertir una imagen Azure Blob en un PDF?

El método más rápido es utilizar IronPDF con un enfoque de una sola línea: recuperar el blob utilizando BlobContainerClient, convertirlo a base64 con Convert.ToBase64String(), incrustarlo en una etiqueta img y renderizarlo con el método ChromePdfRenderer().RenderHtmlAsPdf() de IronPDF.

¿Por qué no puedo utilizar referencias de archivo directas para las imágenes de Azure Blob Storage en los PDF?

Azure Blob Storage requiere el manejo de formato de datos binarios en lugar de referencias directas a archivos. La solución consiste en convertir las imágenes en cadenas base64 e incrustarlas en etiquetas img, que IronPDF puede procesar mediante sus funciones de conversión de HTML a PDF.

¿Qué paquetes NuGet necesito para trabajar con imágenes Azure Blob en PDF?

Necesitará el paquete Azure.Storage.Blobs NuGet para las operaciones de almacenamiento de blobs junto con IronPDF para la representación de PDF. IronPDF proporciona ChromePdfRenderer para convertir HTML con imágenes base64 incrustadas en documentos PDF.

¿Cómo se gestiona la autenticación para el acceso seguro a Azure Blob al generar archivos PDF?

Configure una cuenta de Azure Storage con autenticación y conexión adecuadas en su proyecto de C#. Para situaciones de autenticación complejas, puede explorar las capacidades de encabezado de solicitud HTTP de IronPDF para gestionar el acceso a blob seguro al renderizar archivos PDF.

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
¿Listo para empezar?
Nuget Descargas 16,685,821 | Versión: 2025.12 recién lanzado