如何在 C# | IronPDF 中使用資料 URI 嵌入圖片

Embed Images with DataURIs in C# & VB PDF Rendering

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

使用 IronPDF 在 C# 和 VB.NET 中使用 DataURIs 將圖像直接嵌入 PDF 文件中,透過將圖像位元組轉換為 base64 字串,並將它們內嵌在 HTML 標記中以進行無縫 PDF 渲染,從而消除外部檔案依賴性。

在處理 HTML 字串和文件時,避免對資產目錄的依賴通常是必要的。 data URI 方案提供了有效的解決方案。

資料 URI 方案可將資料直接嵌入 HTML 或 CSS 程式碼中,無需使用獨立檔案。 DataURIs 允許將圖像、檔案和字型以字串的形式直接注入 HTML 文件中。

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

透過 IronPDF 使用 DataURIs 嵌入圖片,將 HTML 內容轉換成 PDF 文件。 本指南示範如何使用簡單、有效率的程式碼來渲染內嵌圖片的 PDF。 IronPDF 可將 HTML 轉換為 PDF,同時保持影像的完整性。 以下是一個直接的範例,說明如何使用 DataURI 以最少的程式碼將圖片直接嵌入 PDF 文件中。

Nuget Icon立即開始使用 NuGet 建立 PDF 檔案:

  1. 使用 NuGet 套件管理器安裝 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 嵌入圖片?

使用 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");
$vbLabelText   $csharpLabel

VB.NET 開發人員可以使用 IronPDF for .NET 的 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")

為什麼我應該使用 DataURIs 而不是檔案參考?

在生成 PDF 時,DataURIs 與傳統的檔案參考相比具有多項優勢。 首先,它們消除了對外部檔案的依賴,使 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");
    }
}
$vbLabelText   $csharpLabel

對於進階的圖片處理,包括 在現有的 PDF 中加入圖片,IronPDF 提供了全面的支援。

Base64 編碼如何影響檔案大小?

Base64 編碼會增加約 33% 的資料大小。 Base64 僅使用 64 個 ASCII 字元來表示二進位資料,每 3 位元組原始資料需要 4 個字元來表示。 雖然這樣會增加整體大小,但相較於獨立文件的優點,對 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();
        }
    }
}
$vbLabelText   $csharpLabel

進階技術與最佳實務

在生產環境中使用 DataURIs 時,請執行快取機制以避免重複編碼相同的影像。 這一點在使用共用資源產生多個 PDF 時尤為重要。 利用 IronPDF 的 async 功能,在處理多個影像時獲得更好的效能。

對於有許多圖片的複雜文件,請使用混合方法,其中關鍵圖片以 DataURIs 的形式嵌入,而較大的、可選的圖片則從外部引用。 這樣才能在自成一格的文件與合理的檔案大小之間取得平衡。

您也可以使用 IronPDF for .NET 的 ASP.NET MVC 整合功能,以 Byte Array 的形式提供整個 HTML String 或 PDF 文件。 在建立動態產生和提供 PDF 的網路應用程式時,此技術非常有效。

對於進階的 PDF 操作技術,包括水印、數位簽章和表單建立,IronPDF 提供全面的文件和範例,以建立強大的 PDF 解決方案。

常見問題解答

什麼是 DataURIs,為什麼要使用 DataURIs 來產生 PDF?

DataURIs 是一種將資料直接以 base64 編碼字串的形式嵌入 HTML 或 CSS 程式碼的方案,省去了單獨的影像檔案。IronPdf 完全支援 DataURIs,因此非常適合雲端環境、分散式系統,或需要獨立 PDF 而無需外部檔案依賴時使用。

如何將圖片轉換成 DataURI 格式以嵌入 PDF?

使用 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 表示形式,並在使用 IronPDF 的 ChromePdfRenderer 渲染之前將其包含在您的 HTML 標記中即可。

使用 DataURIs 取代檔案參照時會影響效能嗎?

雖然 DataURIs 會因為 base64 編碼而增加 HTML 字串的大小,但 IronPDF 能有效率地處理轉換。當您需要沒有外部依賴的獨立 PDF 時,尤其是在雲端或分散式環境中,這樣的取捨是值得的。

Curtis Chau
技術撰稿人

Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。

準備好開始了嗎?
Nuget 下載 17,527,568 | 版本: 2026.2 剛剛發布