如何在C#中使用Data URIs嵌入圖片

使用 C# 和 VB 的 PDF 換熱處理中嵌入資料 URI 圖片

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

在 C# 和 VB.NET 中使用 IronPDF 的 DataURIs 將圖片直接嵌入到 PDF 文件中,透過將圖像位元組轉換為 base64 字串並內嵌到 HTML 標記中,消除外部文件相依性來無縫呈現 PDF。

當處理 HTML 字串和文件時,避免依賴資產目錄通常是必須的。 資料 URI 方案提供了一個有效的解決方案。

資料 URI 方案將資料直接嵌入到 HTML 或 CSS 程式碼中,無需分開的文件。 DataURIs 允許圖像、文件和字體直接作為字串注入到 HTML 文件中。

快速入門:使用 DataURI 在 PDF 中嵌入圖像

藉由使用 IronPDF 的 DataURIs 將 HTML 內容轉換為含嵌入圖片的 PDF 文件。 本指南演示如何使用簡單、高效的程式碼來呈現嵌有圖片的 PDF。 IronPDF 在保持圖像完整性的同時將 HTML 轉換為 PDF。 這是一個簡單的範例,顯示如何使用 DataURI 將圖像直接嵌入到您的 PDF 文件中,程式碼最少。

  1. 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronPdf

    PM > Install-Package IronPdf
  2. 複製並運行這段程式碼片段。

    new IronPdf.ChromePdfRenderer.StaticRenderHtmlAsPdf("<img src='data:image/png;base64,...' />").SaveAs("output.pdf");
  3. 部署以在您的實時環境中測試

    今天就開始在您的專案中使用IronPDF,透過免費試用

    arrow pointer


我如何在 PDF 中使用 DataURIs 嵌入圖像?

using DataURIs 嵌入圖片直接在 HTML 標記中,而不引用外部文件。 此方法在雲端環境、分佈式系統中產生 PDF 或確保所有資源自行包含時作用良好。 IronPDF 的 HTML 到 PDF 轉換完全支持 DataURIs,可建立專業的含嵌入圖像的 PDF。

這個過程涉及三個步驟:讀取圖像資料,將其轉換為 base64 格式,並內嵌於 HTML img 標籤中。 此方法與 PNG、JPEG、GIF 和 SVG 格式的圖像一起使用,為 PDF 生成工作流程提供靈活性。 無論處理 Azure Blob Storage 圖像 還是本地文件,該技術始終如一。

基本圖片嵌入範例

這個完整範例演示如何使用 DataURIs 將圖片嵌入到 PDF 中:

:path=/static-assets/pdf/content-code-examples/how-to/datauris-image.cs
using IronPdf;
using System;

// Read byte from image file
var pngBinaryData = System.IO.File.ReadAllBytes("My_image.png");

// Convert bytes to base64
var ImgDataURI = @"data:image/png;base64," + Convert.ToBase64String(pngBinaryData);

// Import base64 to img tag
var ImgHtml = $"<img src='{ImgDataURI}'>";

ChromePdfRenderer Renderer = new ChromePdfRenderer();

// Render the HTML string
var pdf = Renderer.RenderHtmlAsPdf(ImgHtml);

pdf.SaveAs("datauri_example.pdf");
Imports IronPdf
Imports System

' Read byte from image file
Private pngBinaryData = System.IO.File.ReadAllBytes("My_image.png")

' Convert bytes to base64
Private ImgDataURI = "data:image/png;base64," & Convert.ToBase64String(pngBinaryData)

' Import base64 to img tag
Private ImgHtml = $"<img src='{ImgDataURI}'>"

Private Renderer As New ChromePdfRenderer()

' Render the HTML string
Private pdf = Renderer.RenderHtmlAsPdf(ImgHtml)

pdf.SaveAs("datauri_example.pdf")
$vbLabelText   $csharpLabel

VB.NET 開發人員可以使用 IronPDF 的 VB.NET PDF 庫來實現相同的功能:

Imports IronPdf
Imports System

' Read byte from image file
Dim pngBinaryData As Byte() = System.IO.File.ReadAllBytes("My_image.png")

' Convert bytes to base64
Dim ImgDataURI As String = "data:image/png;base64," & Convert.ToBase64String(pngBinaryData)

' Import base64 to img tag
Dim ImgHtml As String = $"<img src='{ImgDataURI}'>"

Dim Renderer As New ChromePdfRenderer()

' Render the HTML string
Dim pdf = Renderer.RenderHtmlAsPdf(ImgHtml)

pdf.SaveAs("datauri_example.pdf")
Imports IronPdf
Imports System

' Read byte from image file
Dim pngBinaryData As Byte() = System.IO.File.ReadAllBytes("My_image.png")

' Convert bytes to base64
Dim ImgDataURI As String = "data:image/png;base64," & Convert.ToBase64String(pngBinaryData)

' Import base64 to img tag
Dim ImgHtml As String = $"<img src='{ImgDataURI}'>"

Dim Renderer As New ChromePdfRenderer()

' Render the HTML string
Dim pdf = Renderer.RenderHtmlAsPdf(ImgHtml)

pdf.SaveAs("datauri_example.pdf")
VB .NET

我為什麼應該使用 DataURIs 而不是文件引用?

DataURIs 在生成 PDF 時相較傳統文件引用有多項優勢。 首先,它們消除了外部文件的依賴性,使 PDF 生成更可靠且可攜。 這在像 AzureAWS Lambda 這樣的雲端環境中至關重要,因為這些地方的檔案系統存取可能有限或性能上更敏感。

其次,DataURIs 確保 PDF 完全自包含。 在共享或分發生成的 PDF 時,不用擔心斷掉的圖像連結或遺漏的資源。 這使 DataURIs 成為生成報告、發票或需要存檔或電子郵件分發的文件的理想選擇。

第三,DataURIs 可以在特定情況下提高性能。 由於圖像資料直接嵌入到 HTML 中,在呈現過程中不會出現額外的 HTTP 請求或文件系統操作。 這導致 PDF 生成更快,特別是在處理多個小型圖片時。

支持哪些圖像格式?

IronPDF 通過 DataURIs 支持所有主要的圖像格式,為 PDF 生成工作流程提供靈活性:

  • PNG:對於具有透明度或邊緣尖銳的圖像非常理想。 使用 data:image/png;base64,
  • JPEG:對於多色的照片和複雜的圖像最佳。 使用 data:image/jpeg;base64,
  • GIF:適用於簡單動畫或顏色有限的圖像。 使用 data:image/gif;base64,
  • SVG:完美的可縮放矢量圖形。 使用 data:image/svg+xml;base64,
  • WebP:現代格式,具有出色的壓縮能力。 使用 data:image/webp;base64,

以下範例展示了如何處理不同的圖像格式:

using IronPdf;
using System;
using System.IO;

public class MultiFormatImageEmbedding
{
    public static void EmbedVariousImageFormats()
    {
        var renderer = new ChromePdfRenderer();

        // Function to create DataURI from image file
        string CreateDataUri(string filePath, string mimeType)
        {
            var imageBytes = File.ReadAllBytes(filePath);
            return $"data:{mimeType};base64,{Convert.ToBase64String(imageBytes)}";
        }

        // Create HTML with multiple image formats
        var html = $@"
        <html>
        <body>
            <h1>Multi-Format Image Test</h1>
            <img src='{CreateDataUri("logo.png", "image/png")}' alt='PNG Logo' />
            <img src='{CreateDataUri("photo.jpg", "image/jpeg")}' alt='JPEG Photo' />
            <img src='{CreateDataUri("icon.svg", "image/svg+xml")}' alt='SVG Icon' />
        </body>
        </html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("multi_format_images.pdf");
    }
}
using IronPdf;
using System;
using System.IO;

public class MultiFormatImageEmbedding
{
    public static void EmbedVariousImageFormats()
    {
        var renderer = new ChromePdfRenderer();

        // Function to create DataURI from image file
        string CreateDataUri(string filePath, string mimeType)
        {
            var imageBytes = File.ReadAllBytes(filePath);
            return $"data:{mimeType};base64,{Convert.ToBase64String(imageBytes)}";
        }

        // Create HTML with multiple image formats
        var html = $@"
        <html>
        <body>
            <h1>Multi-Format Image Test</h1>
            <img src='{CreateDataUri("logo.png", "image/png")}' alt='PNG Logo' />
            <img src='{CreateDataUri("photo.jpg", "image/jpeg")}' alt='JPEG Photo' />
            <img src='{CreateDataUri("icon.svg", "image/svg+xml")}' alt='SVG Icon' />
        </body>
        </html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("multi_format_images.pdf");
    }
}
Imports IronPdf
Imports System
Imports System.IO

Public Class MultiFormatImageEmbedding
    Public Shared Sub EmbedVariousImageFormats()
        Dim renderer As New ChromePdfRenderer()

        ' Function to create DataURI from image file
        Function CreateDataUri(filePath As String, mimeType As String) As String
            Dim imageBytes = File.ReadAllBytes(filePath)
            Return $"data:{mimeType};base64,{Convert.ToBase64String(imageBytes)}"
        End Function

        ' Create HTML with multiple image formats
        Dim html = $"
        <html>
        <body>
            <h1>Multi-Format Image Test</h1>
            <img src='{CreateDataUri("logo.png", "image/png")}' alt='PNG Logo' />
            <img src='{CreateDataUri("photo.jpg", "image/jpeg")}' alt='JPEG Photo' />
            <img src='{CreateDataUri("icon.svg", "image/svg+xml")}' alt='SVG Icon' />
        </body>
        </html>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("multi_format_images.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

對於高級圖像處理,包括 將圖像新增到現有 PDF,IronPDF 提供綜合支持。

Base64 編碼如何影響文件大小?

Base64 編碼可使資料大小增加約 33%。 Base64 使用僅 64 個 ASCII 字元來表示二進位資料,需要用 4 個字元來表示原始資料的每 3 個字節。 雖然這會增加總大小,但相較於資料自包含文件的優點,對 PDF 生成的影響通常是微不足道的。

在使用 DataURIs 時通過以下做法來最佳化文件大小:

  1. 在編碼前壓縮圖像:使用工具或庫來優化圖像文件,然後再轉換為 base64
  2. 選擇合適的格式:照片使用 JPEG,具透明度的圖形使用 PNG
  3. 適當調整圖像大小:不要嵌入超過 PDF 輸出所需大小的圖片
  4. 考慮 PDF 壓縮:在生成後使用 IronPDF 的壓縮功能

此範例展示了嵌入前的圖像優化:

using IronPdf;
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

public class OptimizedImageEmbedding
{
    public static void EmbedOptimizedImage(string imagePath, int maxWidth = 800)
    {
        // Load and resize image if necessary
        using (var originalImage = Image.FromFile(imagePath))
        {
            var resizedImage = originalImage;

            if (originalImage.Width > maxWidth)
            {
                var ratio = (double)maxWidth / originalImage.Width;
                var newHeight = (int)(originalImage.Height * ratio);
                resizedImage = new Bitmap(originalImage, maxWidth, newHeight);
            }

            // Convert to optimized JPEG
            using (var ms = new MemoryStream())
            {
                var encoder = ImageCodecInfo.GetImageEncoders()
                    .First(c => c.FormatID == ImageFormat.Jpeg.Guid);
                var encoderParams = new EncoderParameters(1);
                encoderParams.Param[0] = new EncoderParameter(
                    System.Drawing.Imaging.Encoder.Quality, 85L);

                resizedImage.Save(ms, encoder, encoderParams);
                var imageBytes = ms.ToArray();

                // Create DataURI
                var dataUri = $"data:image/jpeg;base64,{Convert.ToBase64String(imageBytes)}";

                // Generate PDF
                var html = $@"
                <html>
                <body>
                    <h1>Optimized Image Example</h1>
                    <img src='{dataUri}' style='max-width: 100%;' />
                </body>
                </html>";

                var renderer = new ChromePdfRenderer();
                var pdf = renderer.RenderHtmlAsPdf(html);
                pdf.SaveAs("optimized_image.pdf");
            }

            if (resizedImage != originalImage)
                resizedImage.Dispose();
        }
    }
}
using IronPdf;
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

public class OptimizedImageEmbedding
{
    public static void EmbedOptimizedImage(string imagePath, int maxWidth = 800)
    {
        // Load and resize image if necessary
        using (var originalImage = Image.FromFile(imagePath))
        {
            var resizedImage = originalImage;

            if (originalImage.Width > maxWidth)
            {
                var ratio = (double)maxWidth / originalImage.Width;
                var newHeight = (int)(originalImage.Height * ratio);
                resizedImage = new Bitmap(originalImage, maxWidth, newHeight);
            }

            // Convert to optimized JPEG
            using (var ms = new MemoryStream())
            {
                var encoder = ImageCodecInfo.GetImageEncoders()
                    .First(c => c.FormatID == ImageFormat.Jpeg.Guid);
                var encoderParams = new EncoderParameters(1);
                encoderParams.Param[0] = new EncoderParameter(
                    System.Drawing.Imaging.Encoder.Quality, 85L);

                resizedImage.Save(ms, encoder, encoderParams);
                var imageBytes = ms.ToArray();

                // Create DataURI
                var dataUri = $"data:image/jpeg;base64,{Convert.ToBase64String(imageBytes)}";

                // Generate PDF
                var html = $@"
                <html>
                <body>
                    <h1>Optimized Image Example</h1>
                    <img src='{dataUri}' style='max-width: 100%;' />
                </body>
                </html>";

                var renderer = new ChromePdfRenderer();
                var pdf = renderer.RenderHtmlAsPdf(html);
                pdf.SaveAs("optimized_image.pdf");
            }

            if (resizedImage != originalImage)
                resizedImage.Dispose();
        }
    }
}
Imports IronPdf
Imports System
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.IO

Public Class OptimizedImageEmbedding
    Public Shared Sub EmbedOptimizedImage(imagePath As String, Optional maxWidth As Integer = 800)
        ' Load and resize image if necessary
        Using originalImage As Image = Image.FromFile(imagePath)
            Dim resizedImage As Image = originalImage

            If originalImage.Width > maxWidth Then
                Dim ratio As Double = CDbl(maxWidth) / originalImage.Width
                Dim newHeight As Integer = CInt(originalImage.Height * ratio)
                resizedImage = New Bitmap(originalImage, maxWidth, newHeight)
            End If

            ' Convert to optimized JPEG
            Using ms As New MemoryStream()
                Dim encoder As ImageCodecInfo = ImageCodecInfo.GetImageEncoders().First(Function(c) c.FormatID = ImageFormat.Jpeg.Guid)
                Dim encoderParams As New EncoderParameters(1)
                encoderParams.Param(0) = New EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L)

                resizedImage.Save(ms, encoder, encoderParams)
                Dim imageBytes As Byte() = ms.ToArray()

                ' Create DataURI
                Dim dataUri As String = $"data:image/jpeg;base64,{Convert.ToBase64String(imageBytes)}"

                ' Generate PDF
                Dim html As String = $"
                <html>
                <body>
                    <h1>Optimized Image Example</h1>
                    <img src='{dataUri}' style='max-width: 100%;' />
                </body>
                </html>"

                Dim renderer As New ChromePdfRenderer()
                Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
                pdf.SaveAs("optimized_image.pdf")
            End Using

            If resizedImage IsNot originalImage Then
                resizedImage.Dispose()
            End If
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel
Icon Quote related to Base64 編碼如何影響文件大小?

我最喜歡的程式庫是IronPDF。它允許快速高效地操作PDF文件。它還有許多有價值的功能,例如導出到PDF/A格式和數位簽署PDF文件。

Milan Jovanovic related to Base64 編碼如何影響文件大小?

Milan Jovanovic

Microsoft MVP

查看案例研究
Icon Quote related to Base64 編碼如何影響文件大小?

IronOCR意味著我們每年可以從手動處理中節省$40,000,同時提高生產力,釋放資源以進行高影響的任務。我會強烈推薦它。

Brent Matzelle related to Base64 編碼如何影響文件大小?

Brent Matzelle

首席技術官,OPYN

查看案例研究
Icon Quote related to Base64 編碼如何影響文件大小?

IronSuite在我們的運營中扮演著至關重要的角色。這些工具增加了包括建立平面圖和改善庫存管理在內的業務效率。

David Jones related to Base64 編碼如何影響文件大小?

David Jones

首席軟體工程師,Agorus Build

查看案例研究

高級技術和最佳實踐

在生產環境中使用 DataURIs 時,實施快取機制以避免重複編碼相同的圖像。 這在生成共享資源的多個 PDF 時尤為重要。 利用 IronPDF 的 async 能力,以便在處理多個圖像時提高性能。

對於包含許多圖像的複雜文件,使用混合方法,將關鍵圖片嵌入為 DataURIs,而將較大的可選圖像以外部引用的方式。 這平衡了自包含文件與合理的文件大小。

您也可以使用 IronPDF 的 ASP.NET MVC 整合,將整個 HTML 字串或 PDF 文件作為 Byte Array 提供。 此技術在構建能夠動態生成和服務 PDF 的網路應用程式時運作良好。

對於高級 PDF 操作技術,包括浮水印、數位簽名和表單建立,IronPDF 提供全方位的文件和範例用於構建強健的 PDF 解決方案。


using using IronPdf 指令將 IronPdf 命名空間包括到您的 C# 或 VB.NET 專案中。

AddBookmarkAtEnd 方法用於將新的書籤附加到 PDF 大綱。

常見問題

什麼是DataURIs以及為什麼用於PDF生成?

DataURIs是一種將資料直接嵌入到HTML或CSS程式碼中的方案,作為base64編碼字串,從而消除單獨圖像文件的需求。IronPDF完全支持DataURIs,使其在雲環境、分散式系統或需要無外部文件依賴的自包含PDF時理想。

如何將圖像轉換為用於PDF嵌入的DataURI格式?

使用IronPDF,將圖像轉換為DataURI涉及三個步驟:首先,使用System.IO.File.ReadAllBytes()讀取圖像字節。其次,使用Convert.ToBase64String()將字節轉換為base64。最後,將base64字串嵌入HTML img標籤中,格式為'data:image/png;base64,[base64string]'。

嵌入圖片為DataURIs時支持哪些影像格式?

IronPDF支持將各種圖像格式嵌入為DataURIs,包括PNG、JPEG、GIF和SVG。這種靈活性允許您處理不同的圖像型別,同時保持對PDF生成工作流程的完全控制。

我可以在單個PDF中使用DataURIs嵌入多張圖片嗎?

是的,IronPDF允許您在單個PDF文件中使用DataURIs嵌入多張圖片。只需將每張圖片轉換為其base64表示,並在渲染時將其包含在HTML標記中,使用IronPDF的ChromePdfRenderer。

使用DataURIs而非文件引用是否會有性能影響?

雖然DataURIs因為base64編碼增大了HTML字串大小,但IronPDF能夠高效轉換。在需要無外部依賴的自包含PDF時,尤其是在雲或分散環境中,這種權衡是值得的。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

準備開始了嗎?
Nuget 下載 20,296,129 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在捲動嗎?

想快速獲得證明嗎? PM > Install-Package IronPdf
執行範例 看您的HTML變成PDF。