Renderowanie PDF z obrazami w Azure Blob Storage w C
Aby renderować pliki PDF z obrazami z usługi Azure Blob Storage w języku C#, należy pobrać dane blobu jako dane binarne, przekonwertować je na ciąg znaków base64, osadzić w tagu HTML img i użyć funkcji ChromePdfRenderer biblioteki IronPDF do konwersji HTML na PDF.
Azure Blob Storage to usługa przechowywania danych w chmurze oferowana przez Microsoft Azure. Przechowuje duże ilości nieustrukturyzowanych danych, takich jak tekst lub dane binarne, dostępne za pośrednictwem HTTP lub HTTPS. Pracując z PDF w C#, IronPDF oferuje potężne możliwości obsługi różnych formatów obrazów i źródeł, w tym tych przechowywanych w usługach chmurowych, takich jak Azure Blob Storage.
Aby używać obrazów przechowywanych w Azure Blob Storage, trzeba obsłużyć format danych binarnych zamiast bezpośrednich odniesień do plików. Rozwiązaniem jest konwersja obrazów na ciągi znaków base64 i osadzenie ich w tagach img. To podejście działa bezproblemowo z funkcjonalnością konwersji HTML na PDF IronPDF, zachowując jakość i formatowanie obrazów.
Quickstart: Renderowanie PDF z obrazami w Azure Blob Storage
-
Install IronPDF with NuGet Package Manager
PM > Install-Package IronPdf -
Skopiuj i uruchom ten fragment kodu.
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"); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną
Minimalny proces (5 kroków)
- Pobierz IronPDF do renderowania obrazów przechowywanych w Azure Blob
- Obsługuj proces pobierania blob
- Użyj metody
ToBase64String, aby przekonwertować bajty na base64 - Zawierać informacje base64 w tagu
img - Renderować HTML do PDF
Jak przekonwertować obrazy z Azure Blob na HTML?
Skonfiguruj konto Azure Storage z kontenerem zawierającym blob, a następnie obsłuż uwierzytelnianie i połączenie w swoim projekcie C#. Użyj pakietu NuGet Azure.Storage.Blobs razem z IronPDF. Dla złożonych scenariuszy uwierzytelniania, eksploruj możliwości nagłówka żądania HTTP IronPDF dla zabezpieczonego dostępu do bloba.
Użyj metody DownloadAsync, aby pobrać obrazy jako strumienie. Przekonwertuj dane strumieniowe do formatu Base64 i osadź je w tagach HTML img. Wstaw zmienną htmlContent do dokumentu HTML. Ta technika działa dobrze do tworzenia raportów lub dokumentów z dynamicznie ładowanymi obrazami z magazynu w chmurze.
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
Pracując z wieloma obrazami lub różnymi formatami, korzystaj z wsparcia IronPDF dla różnych typów obrazów w tym JPG, PNG, SVG i GIF. Metoda kodowania base64 działa uniwersalnie dla wszystkich tych formatów.
Praca z różnymi formatami obrazów
Azure Blob Storage obsługuje różne formaty obrazów, a IronPDF radzi sobie z nimi wszystkimi, gdy są odpowiednio zakodowane. Oto ulepszony przykład, który dynamicznie określa typ 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)}\"/>";
}
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
Jak przekonwertować HTML na PDF?
Konwertuj htmlContent do formatu PDF przy użyciu metody RenderHtmlAsPdf() z ChromePdfRenderer. Silnik renderowania Chrome firmy IronPDF zachowuje jakość i pozycjonowanie obrazów podczas konwersji. Dla optymalnych wyników, skonfiguruj opcje renderowania do kontrolowania jakości wyjściowej PDF.
Oto jak wywołać SaveAs():
: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")
Dostosuj zmienną pdfOptions, aby uwzględnić rzeczywistą treść HTML za pomocą bodyHtml.
Kompletny działający przykład
Oto kompleksowy przykład łączący pobieranie z Azure Blob Storage z renderowaniem IronPDF, w tym obsługa błędów i optymalizacja:
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
Rozważania dotyczące wydajności
Pracując z dużymi obrazami lub wieloma blobami, zastosuj techniki asynchroniczne i wielowątkowe, aby poprawić wydajność. Dodaj mechanizmy pamięci podręcznej, aby uniknąć wielokrotnego pobierania tych samych blobów.
Dla środowisk produkcyjnych, zwłaszcza wdrożeń Azure, przejrzyj przewodnik wdrażania Azure firmy IronPDF dla najlepszych praktyk i zaleceń dotyczących konfiguracji. Dla operacji intensywnie wykorzystujących pamięć, używaj możliwości strumienia pamięci IronPDF do optymalizacji wykorzystania zasobów.
Bezpieczeństwo i uwierzytelnianie
Zapewnij właściwe uwierzytelnianie podczas uzyskiwania dostępu do Azure Blob Storage. Dla podwyższonego bezpieczeństwa, implementuj niestandardowe nagłówki HTTP podczas uzyskiwania dostępu do zasobów chronionych. Rozważ wdrożenie ochrony hasłem PDF dla poufnych dokumentów zawierających obrazy z Azure blob.
Rozwiązywanie typowych problemów
Jeśli napotkasz problemy z integracją magazynu blob, zapoznaj się z przewodnikiem rozwiązywania problemów Azure IronPDF w celu uzyskania rozwiązań typowych problemów. Dla problemów związanych z obrazami, dokumentacja renderowania obrazów zapewnia szczegółowe wskazówki dotyczące obsługi różnych scenariuszy.
DownloadToStreamAsync
imageTag
imageTag
RenderHtmlAsPdf
RenderHtmlAsPdf
"htmlContent"
imageTag
Często Zadawane Pytania
Jak wygenerowac PDF z obrazami przechowywanymi w Azure Blob Storage?
Aby wygenerowac PDF z obrazami w Azure Blob Storage, pobierz dane blob jako binarne, skonwertuj je na ciag base64, osadz w znaczniku img w HTML i uzyj ChromePdfRenderer z IronPDF do konwersji HTML na PDF. To podejscie dziala bezproblemowo z funkcjami konwersji HTML na PDF IronPDF, zachowujac jakosc obrazów.
Jaki jest najszybszy sposób na renderowanie obrazu Azure Blob do PDF?
Najszybsza metoda to uzycie IronPDF z podejsciem w jednym wierszu: pobierz blob uzywajac BlobContainerClient, skonwertuj na base64 przy pomocy Convert.ToBase64String(), osadz w znaczniku img i renderuj z metodą ChromePdfRenderer().RenderHtmlAsPdf() od IronPDF.
Dlaczego nie moge uzyc bezposrednich odniesien do plików dla obrazów z Azure Blob Storage w PDF?
Azure Blob Storage wymaga obslugi formatu danych binarnych zamiast bezposrednich odniesien do plików. Rozwiazaniem jest konwersja obrazów na ciagi base64 i osadzanie ich w znacznikach img, które IronPDF moze przetworzyc poprzez funkcje konwersji HTML na PDF.
Jakich paczek NuGet potrzebuje do pracy z obrazami blob w Azure w PDF?
Potrzebujesz paczki NuGet Azure.Storage.Blobs do operacji na przechowalniach blob oraz IronPDF do renderowania PDF. IronPDF dostarcza ChromePdfRenderer do konwersji HTML z osadzonymi obrazami base64 na dokumenty PDF.
Jak obsługiwać uwierzytelnianie w przypadku zabezpieczonego dostepu do Azure Blob podczas generowania PDF?
Skonfiguruj konto Azure Storage z odpowiednim uwierzytelnianiem i polaczeniem w twoim projekcie C#. W przypadkach zlozonych scenariuszy uwierzytelniania mozesz wykorzystac mozliwosci IronPDF dotyczace naglowków zadania HTTP do obslugi zabezpieczonego dostepu do blob podczas renderowania PDF.

