如何在 C# | IronPDF 中使用数据 URI 嵌入图片

在 C# & VB PDF 渲染中使用 DataURIs 嵌入图像

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

使用IronPDF在 C# 和 VB .NET中直接将图像嵌入 PDF 文档中,通过将图像字节转换为 base64 字符串并将其内联包含在 HTML 标记中,消除了对外部文件的依赖,从而实现无缝的 PDF 渲染。

在处理 HTML 字符串和文档时,避免依赖资产目录往往至关重要。 data URI 方案提供了一个有效的解决方案。

数据 URI 方案可将数据直接嵌入 HTML 或 CSS 代码,无需单独文件。 DataURIs 允许将图像、文件和字体作为字符串直接注入到 HTML 文档中。

快速入门:使用数据URI在PDF中嵌入图像

使用IronPDF通过嵌入图像将 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 嵌入图片?

使用 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 的 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")

为什么要使用 DataURI 而不是文件引用?

DataURIs 在生成 PDF 时相比传统的文件引用具有几个优势。 首先,它们消除了对外部文件的依赖,使 PDF 生成更加可靠和便携。 这在AzureAWS Lambda等文件系统访问可能受限或对性能敏感的云环境中至关重要。

其次,确保 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 集成将整个 HTML 字符串或 PDF 文档作为字节数组提供。 在构建动态生成和提供 PDF 的网络应用程序时,这种技术非常有效。

对于高级 PDF 操作技术,包括水印、数字签名和表单创建,IronPDF 提供全面的文档和示例,以构建强大的 PDF 解决方案。

常见问题解答

什么是 DataURIs,为什么要将其用于生成 PDF?

DataURIs 是一种将数据作为 base64 编码字符串直接嵌入 HTML 或 CSS 代码的方案,无需单独的图像文件。IronPDF 完全支持 DataURIs,因此非常适合云环境、分布式系统或需要独立 PDF 而不依赖外部文件的情况。

如何将图像转换为用于嵌入 PDF 的 DataURI 格式?

使用 IronPDF,将图像转换为 DataURI 涉及三个步骤:首先,使用 System.IO.File.ReadAllBytes() 读取图像字节。其次,使用 Convert.ToBase64String() 将字节转换为 base64。最后,将 base64 字符串嵌入 HTML img 标签,格式为 "data:image/png;base64,[base64string]"。

将图片嵌入 DataURI 时支持哪些图片格式?

IronPDF 支持嵌入各种图像格式作为 DataURI,包括 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 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 17,803,474 | 版本: 2026.3 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronPdf
运行示例看着你的HTML代码变成PDF文件。