PDF-Rendering mit Azure Blob Storage Images in C
Um PDFs mit Azure Blob Storage-Bildern in C# zu rendern, rufen Sie die Blob-Daten als Binärdaten ab, konvertieren sie in einen base64-String, betten sie in ein HTML-img-Tag ein und verwenden den ChromePdfRenderer von IronPDF, um das HTML in PDF zu konvertieren.
Azure Blob Storage ist ein cloudbasierter Speicherdienst von Microsoft Azure. Er speichert große Mengen unstrukturierter Daten, wie Text- oder Binärdaten, die über HTTP oder HTTPS zugänglich sind. Bei der Arbeit mit PDFs in C# bietet IronPDF leistungsstarke Funktionen für den Umgang mit verschiedenen Bildformaten und Quellen, einschließlich solcher, die in Cloud-Diensten wie Azure Blob Storage gespeichert sind.
Um in Azure Blob Storage gespeicherte Bilder zu verwenden, müssen Sie mit dem binären Datenformat und nicht mit direkten Dateiverweisen arbeiten. Die Lösung besteht darin, Bilder in base64-Strings zu konvertieren und sie in img-Tags einzubetten. Dieser Ansatz funktioniert nahtlos mit IronPDFs HTML-zu-PDF-Konvertierungsfunktionen, wobei Bildqualität und Formatierung erhalten bleiben.
Schnellstart: PDFs mit Azure Blob Storage Images rendern
-
Installieren Sie IronPDF mit NuGet Package Manager
PM > Install-Package IronPdf -
Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.
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"); -
Bereitstellen zum Testen in Ihrer Live-Umgebung
Beginnen Sie noch heute, IronPDF in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion
Minimaler Arbeitsablauf (5 Schritte)
- Herunterladen von IronPDF zum Rendern von in Azure Blob gespeicherten Bildern
- Den Abrufprozess des Blobs verarbeiten
- Verwenden Sie die Methode `ToBase64String`, um Bytes in base64 zu konvertieren
- Fügen Sie die base64-Informationen in den `img`-Tag ein
- Rendering des HTML in PDF
Wie konvertiere ich Azure Blob-Bilder in HTML?
Richten Sie ein Azure-Storage-Konto mit einem Container ein, der Blobs enthält, und kümmern Sie sich dann um die Authentifizierung und Verbindung in Ihrem C#-Projekt. Verwenden Sie das NuGet-Paket Azure.Storage.Blobs zusammen mit IronPDF. Für komplexe Authentifizierungsszenarien sollten Sie IronPDFs HTTP-Request-Header-Funktionen für den gesicherten Blob-Zugriff erkunden.
Verwenden Sie die Methode DownloadToStreamAsync, um Bilder als Streams herunterzuladen. Konvertieren Sie die Stream-Daten in Base64 und betten Sie sie in HTML-img-Tags ein. Fügen Sie die Variable imageTag in Ihr HTML-Dokument ein. Diese Technik eignet sich gut für die Erstellung von Berichten oder Dokumenten mit dynamisch geladenen Cloud-Speicherbildern.
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
Wenn Sie mit mehreren Bildern oder unterschiedlichen Formaten arbeiten, nutzen Sie die Unterstützung von IronPDF für verschiedene Bildtypen, einschließlich JPG, PNG, SVG und GIF. Die base64-Kodierungsmethode funktioniert universell für alle diese Formate.
Arbeiten mit verschiedenen Bildformaten
Azure Blob Storage unterstützt verschiedene Bildformate, und IronPDF verarbeitet sie alle, wenn sie richtig kodiert sind. Hier ist ein erweitertes Beispiel, das den MIME-Typ dynamisch bestimmt:
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)}\"/>";
}
Imports System.IO
Imports System.Threading.Tasks
Public Function GetImageMimeType(blobName As String) As String
Dim extension = Path.GetExtension(blobName).ToLower()
Select Case extension
Case ".jpg", ".jpeg"
Return "image/jpeg"
Case ".png"
Return "image/png"
Case ".gif"
Return "image/gif"
Case ".svg"
Return "image/svg+xml"
Case ".webp"
Return "image/webp"
Case Else
Return "image/jpeg" ' default fallback
End Select
End Function
Public Async Function CreateImageTagFromBlob(blobClient As BlobClient) As Task(Of String)
Using stream As New MemoryStream()
Await blobClient.DownloadToAsync(stream)
stream.Position = 0
Dim base64 = Convert.ToBase64String(stream.ToArray())
Dim mimeType = GetImageMimeType(blobClient.Name)
Return $"<img src=""data:{mimeType};base64,{base64}"" alt=""{Path.GetFileNameWithoutExtension(blobClient.Name)}""/>"
End Using
End Function
Wie konvertiere ich das HTML in PDF?
Konvertieren Sie die Datei imageTag mithilfe der Methode RenderHtmlAsPdf von ChromePdfRenderer in eine PDF-Datei. Die Chrome-Rendering-Engine von IronPDF sorgt dafür, dass die Bildqualität und die Positionierung während der Konvertierung erhalten bleiben. Um optimale Ergebnisse zu erzielen, konfigurieren Sie Rendering Options, um die Qualität der PDF-Ausgabe zu steuern.
So rufen Sie RenderHtmlAsPdf an:
: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")
Passen Sie die Variable "htmlContent" an, um Ihren tatsächlichen HTML-Inhalt mit imageTag einzufügen.
Komplettes Arbeitsbeispiel
Hier ist ein umfassendes Beispiel, das den Abruf von Azure Blob Storage mit IronPDF-Rendering kombiniert, einschließlich Fehlerbehandlung und Optimierung:
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"
};
}
}
Imports Azure.Storage.Blobs
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Text
Imports System.Threading.Tasks
Public Class AzureBlobToPdfConverter
Private ReadOnly _connectionString As String
Private ReadOnly _renderer As ChromePdfRenderer
Public Sub New(connectionString As String)
_connectionString = connectionString
_renderer = New ChromePdfRenderer()
' Configure rendering options for better image quality
_renderer.RenderingOptions.ImageQuality = 100
_renderer.RenderingOptions.DpiResolution = 300
End Sub
Public Async Function ConvertBlobImagesToPdfAsync(containerName As String, blobNames As List(Of String)) As Task(Of PdfDocument)
Dim htmlBuilder As New StringBuilder()
htmlBuilder.Append("<html><body style='margin: 20px;'>")
Dim blobServiceClient As New BlobServiceClient(_connectionString)
Dim containerClient = blobServiceClient.GetBlobContainerClient(containerName)
For Each blobName In blobNames
Try
Dim blobClient = containerClient.GetBlobClient(blobName)
Dim imageTag = Await CreateImageTagFromBlob(blobClient)
htmlBuilder.Append(imageTag)
htmlBuilder.Append("<br/><br/>") ' Add spacing between images
Catch ex As Exception
' Log error and continue with other images
Console.WriteLine($"Error processing blob {blobName}: {ex.Message}")
End Try
Next
htmlBuilder.Append("</body></html>")
' Convert the complete HTML to PDF
Return _renderer.RenderHtmlAsPdf(htmlBuilder.ToString())
End Function
Private Async Function CreateImageTagFromBlob(blobClient As BlobClient) As Task(Of String)
Using stream As New MemoryStream()
Await blobClient.DownloadToAsync(stream)
stream.Position = 0
Dim base64 = Convert.ToBase64String(stream.ToArray())
Dim mimeType = GetImageMimeType(blobClient.Name)
Return $"<img src=""data:{mimeType};base64,{base64}"" " &
$"alt=""{Path.GetFileNameWithoutExtension(blobClient.Name)}"" " &
$"style=""max-width: 100%; height: auto;""/>"
End Using
End Function
Private Function GetImageMimeType(blobName As String) As String
Dim extension = Path.GetExtension(blobName).ToLower()
Return extension Select Case extension
Case ".jpg", ".jpeg"
Return "image/jpeg"
Case ".png"
Return "image/png"
Case ".gif"
Return "image/gif"
Case ".svg"
Return "image/svg+xml"
Case ".webp"
Return "image/webp"
Case Else
Return "image/jpeg"
End Select
End Function
End Class
Überlegungen zur Leistung
Bei der Arbeit mit großen Bildern oder mehreren Blobs sollten Sie async- und Multithreading-Techniken einsetzen, um die Leistung zu verbessern. Fügen Sie Caching-Mechanismen hinzu, um das wiederholte Herunterladen der gleichen Blobs zu vermeiden.
Für Produktionsumgebungen, insbesondere für Azure-Implementierungen, sollten Sie den IronPDF Leitfaden zur Azure-Implementierung lesen, der bewährte Verfahren und Konfigurationsempfehlungen enthält. Für speicherintensive Operationen sollten Sie IronPDF's memory stream capabilities verwenden, um die Ressourcennutzung zu optimieren.
Sicherheit und Authentifizierung
Stellen Sie die richtige Authentifizierung beim Zugriff auf Azure Blob Storage sicher. Um die Sicherheit zu erhöhen, sollten Sie angepasste HTTP-Header implementieren, wenn Sie auf geschützte Ressourcen zugreifen. Erwägen Sie die Implementierung eines PDF-Passwortschutzes für sensible Dokumente, die Azure Blob Images enthalten.
Fehlerbehebung bei allgemeinen Problemen
Wenn Sie Probleme mit der Integration von Blob-Storage haben, finden Sie im Leitfaden zur Fehlerbehebung in Azure von IronPDF Lösungen für häufig auftretende Probleme. Für bildspezifische Fragen bietet die Bildwiedergabedokumentation eine ausführliche Anleitung zur Handhabung verschiedener Szenarien.
Häufig gestellte Fragen
Wie generiere ich PDFs mit Bildern, die in Azure Blob Storage gespeichert sind?
Um PDFs mit Azure Blob Storage-Bildern zu generieren, rufen Sie die Blob-Daten als Binärdaten ab, konvertieren sie in einen base64-String, betten sie in ein HTML-img-Tag ein und verwenden den ChromePdfRenderer von IronPDF, um das HTML in PDF zu konvertieren. Dieser Ansatz arbeitet nahtlos mit IronPDFs HTML-zu-PDF-Konvertierungsfunktionen zusammen, wobei die Bildqualität erhalten bleibt.
Wie kann ich ein Azure Blob-Bild am schnellsten in eine PDF-Datei umwandeln?
Die schnellste Methode ist die Verwendung von IronPDF mit einem einzeiligen Ansatz: Abrufen des Blob mit BlobContainerClient, Konvertieren in base64 mit Convert.ToBase64String(), Einbetten in ein img-Tag und Rendern mit der Methode ChromePdfRenderer().RenderHtmlAsPdf() von IronPDF.
Warum kann ich keine direkten Dateiverweise für Azure Blob Storage-Bilder in PDFs verwenden?
Azure Blob Storage erfordert den Umgang mit binären Datenformaten anstelle von direkten Dateiverweisen. Die Lösung besteht darin, Bilder in base64-Strings zu konvertieren und sie in img-Tags einzubetten, die IronPDF dann mit seinen HTML-zu-PDF-Konvertierungsfunktionen verarbeiten kann.
Welche NuGet-Pakete benötige ich für die Arbeit mit Azure Blob-Images in PDFs?
Sie benötigen das NuGet-Paket Azure.Storage.Blobs für Blob-Speicheroperationen sowie IronPDF für das PDF-Rendering. IronPDF bietet den ChromePdfRenderer für die Konvertierung von HTML mit eingebetteten base64-Bildern in PDF-Dokumente.
Wie verwende ich die Authentifizierung für den gesicherten Azure Blob-Zugriff bei der Erstellung von PDFs?
Richten Sie ein Azure-Storage-Konto mit der richtigen Authentifizierung und Verbindung in Ihrem C#-Projekt ein. Für komplexe Authentifizierungsszenarien können Sie die HTTP-Request-Header-Funktionen von IronPDF nutzen, um den gesicherten Blob-Zugriff beim Rendern von PDFs zu behandeln.

