Azure Blob Storageに保存された画像をC#でレンダリングする方法 | IronPDF

Azure Blob Storageの画像を使ってC#でPDFをレンダリング・変換する方法

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

C#でAzure Blob Storageの画像を使ってPDFをレンダリングするには、BLOBデータをバイナリとして取得し、base64文字列に変換してHTMLのimgタグに埋め込み、IronPdfのChromePdfRendererを使ってHTMLをPDFに変換します。

Azure Blob Storage は、Microsoft Azure が提供するクラウドベースのストレージサービスです。 HTTP または HTTPS 経由でアクセス可能な、テキストまたはバイナリデータなどの大量の非構造化データを保存します。 C#でPDFを扱う場合、IronPdfは、Azure Blob Storageのようなクラウドサービスに保存されたものを含め、様々な画像形式やソースを扱うための強力な機能を提供します。

Azure Blob Storageに保存された画像を使用するには、直接のファイル参照ではなく、バイナリデータ形式を扱う必要があります。 解決策は、画像をbase64文字列に変換し、imgタグに埋め込むことです。 このアプローチは、IronPDFのHTMLからPDFへの変換機能とシームレスに連携し、画質とフォーマットを維持します。

クイックスタート: Azure Blob Storage イメージを使用して PDF をレンダリングする

  1. IronPDF をNuGetパッケージマネージャでインストール

    PM > Install-Package IronPdf
  2. このコード スニペットをコピーして実行します。

    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. 実際の環境でテストするためにデプロイする

    今日プロジェクトで IronPDF を使い始めましょう無料トライアル

    arrow pointer


Azureブロブ画像をHTMLに変換するにはどうすればよいですか?

Blob を含むコンテナで Azure Storage アカウントを設定し、C# プロジェクトで認証と接続を処理します。 IronPDFと一緒にAzure.Storage.Blobs NuGetパッケージを使用してください。 複雑な認証シナリオについては、安全なブロブアクセスのためのIronPDFのHTTPリクエストヘッダ機能をご覧ください。

画像をストリームとしてダウンロードするには、DownloadToStreamAsync メソッドを使用します。 ストリームデータをBase64に変換し、HTMLのimgタグに埋め込む。 imageTag 変数を HTML ドキュメントにマージします。 このテクニックは、動的に読み込まれるクラウドストレージの画像を使用してレポートや文書を作成する場合に効果的です。

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

複数の画像や異なるフォーマットを扱う場合は、JPG、PNG、SVG、GIFを含むさまざまな画像タイプに対するIronPDFのサポートを活用してください。 base64エンコーディング方式は、これらすべてのフォーマットで汎用的に機能します。

さまざまな画像フォーマットで作業する

Azure Blob Storageは様々な画像フォーマットに対応しており、IronPDFは適切にエンコードされた画像フォーマットに対応しています。 以下は、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
$vbLabelText   $csharpLabel

HTMLをPDFに変換するにはどうすればよいですか?

ChromePdfRendererRenderHtmlAsPdf メソッドを使用して、 imageTag を PDF に変換します。 IronPdfのChromeレンダリングエンジンは変換中も画質と位置を維持します。 最適な結果を得るためには、レンダリングオプションを設定して、PDF出力の品質をコントロールしてください。

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

"htmlContent" 変数を調整して、imageTag で実際の HTML コンテンツを含めます。

完全な作業例

ここでは、エラー処理と最適化を含む、Azure Blob Storageの取得とIronPdfレンダリングを組み合わせた包括的な例を示します:

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
$vbLabelText   $csharpLabel

パフォーマンスの考慮事項

大きな画像や複数のblobを扱う場合は、asyncとマルチスレッド技術を実装して、パフォーマンスを向上させてください。 同じブロブを繰り返しダウンロードしないように、キャッシュ機構を追加してください。

本番環境、特にAzureデプロイメントについては、IronPdfのAzureデプロイメントガイドでベストプラクティスと推奨設定を確認してください。 メモリを大量に消費する操作には、IronPdfのメモリストリーム機能を使用して、リソースの使用量を最適化してください。

セキュリティと認証

Azure Blob Storageにアクセスする際に、適切な認証を確保すること。 セキュリティを強化するために、保護されたリソースにアクセスするときは、カスタムHTTPヘッダーを実装してください。 Azure blob イメージを含む機密文書には、PDF パスワード保護の実装を検討してください。

よくある問題のトラブルシューティング

BLOBストレージの統合に関する問題が発生した場合は、IronPdfのAzureトラブルシューティングガイドを参照して、一般的な問題の解決策を確認してください。 画像固有の問題については、画像レンダリング・ドキュメントが、さまざまなシナリオの処理に関する詳細なガイダンスを提供しています。

よくある質問

Azure Blob Storageに保存された画像でPDFを生成するには?

Azure Blob Storageの画像を使ってPDFを生成するには、BLOBデータをバイナリとして取得し、それをbase64文字列に変換してHTMLのimgタグに埋め込み、IronPDFのChromePdfRendererを使ってHTMLをPDFに変換します。この方法はIronPDFのHTMLからPDFへの変換機能とシームレスに動作し、画質を維持します。

Azure BlobイメージをPDFにレンダリングする最も速い方法は?

BlobContainerClientでblobを取得し、Convert.ToBase64String()でbase64に変換し、imgタグに埋め込み、IronPDFのChromePdfRenderer().RenderHtmlAsPdf()メソッドでレンダリングする。

PDFでAzure Blob Storageイメージのファイル参照を直接使用できないのはなぜですか?

Azure Blob Storageでは、直接ファイルを参照するのではなく、バイナリデータ形式を扱う必要があります。解決策は画像をbase64文字列に変換してimgタグに埋め込み、それをIronPDFのHTMLからPDFへの変換機能で処理することです。

PDFでAzure Blobイメージを扱うには、どのNuGetパッケージが必要ですか?

PDFレンダリング用のIronPDFと一緒にブロブストレージ操作用のAzure.Storage.Blobs NuGetパッケージが必要です。IronPDFはBase64画像を埋め込んだHTMLをPDFドキュメントに変換するChromePdfRendererを提供します。

PDFを生成する際、セキュアなAzure Blobアクセスの認証をどのように処理すればよいですか?

C# プロジェクトで、適切な認証と接続を使用して Azure Storage アカウントを設定します。複雑な認証シナリオについては、IronPDFのHTTPリクエストヘッダ機能を使用して、PDFレンダリング時のセキュアなブロブアクセスを処理することができます。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
Nuget ダウンロード 18,332,619 | バージョン: 2026.4 リリース
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか? PM > Install-Package IronPdf
サンプルを実行するHTML が PDF に変換されるのを確認します。