在 C## & VB PDF 渲染中使用 DataURIs 嵌入图像
使用C#和VB.NET中的DataURIs将图像直接嵌入PDF文档中,使用IronPDF,通过将图像字节转换为base64字符串并将其内嵌在HTML标记中,以实现无缝PDF渲染,消除外部文件依赖。
在处理 HTML 字符串和文档时,避免依赖资产目录往往至关重要。 data URI 方案提供了一个有效的解决方案。
数据 URI 方案可将数据直接嵌入 HTML 或 CSS 代码,无需单独文件。 DataURIs允许将图像、文件和字形直接注入为HTML文档的字符串。
快速入门:使用数据URI在PDF中嵌入图像
通过使用IronPDF的DataURIs嵌入图像,将HTML内容转换为PDF文档。 本指南演示了如何使用简单、高效的代码呈现带有嵌入式图像的 PDF。 IronPDF 可将 HTML 转换为 PDF,同时保持图像的完整性。 这是一个简单的示例,展示如何使用最少的代码通过DataURI将图像直接嵌入您的PDF文档。
最小工作流程(5 个步骤)
- 从 NuGet 下载 IronPDF
- 使用
ReadAllBytes方法读取图像字节数 - 使用
ToBase64String方法将字节转换为 base64 - 在
img标记中包含 base64 信息 - 将 HTML 渲染成 PDF
如何在 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");
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")
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")
为什么要使用 DataURI 而不是文件引用?
DataURIs在生成PDF时比传统文件引用有几个优势。 首先,它们消除了对外部文件的依赖,使 PDF 生成更加可靠和便携。 这在Azure或AWS 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
对于高级图像处理,包括在现有 PDF 中添加图像,IronPDF 提供了全面的支持。
Base64 编码如何影响文件大小?
Base64 编码可将数据大小增加约 33%。 Base64 仅使用 64 个 ASCII 字符来表示二进制数据,每 3 个字节的原始数据需要 4 个字符来表示。 虽然这会增加整体大小,但与独立文档的优势相比,对 PDF 生成的影响往往微乎其微。
通过以下做法优化使用DataURIs时的文件大小:
- 在编码之前压缩图像:使用工具或库在转换为base64之前优化图像文件
- 选择合适的格式:照片使用JPEG,有透明度的图形使用PNG
- 适当调整图像大小:不要嵌入超过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
高级技术和最佳实践
在生产环境中使用DataURIs时,实现缓存机制以避免重复编码相同的图像。 在生成具有共享资源的多个 PDF 时,这一点尤为重要。 利用IronPDF的async功能,以获得处理多张图像时的更好性能。
对于包含许多图像的复杂文档,使用混合方法,其中关键图像作为DataURIs嵌入,而较大且可选的图像则外部引用。 这就需要在文件大小合理的情况下平衡文件的自足性。
您还可以使用 IronPDF for .NET 的 ASP.NET MVC 集成将整个 HTML 字符串或 PDF 文档作为字节数组提供。 在构建动态生成和提供 PDF 的网络应用程序时,这种技术非常有效。
对于高级 PDF 操作技术,包括水印、数字签名和表单创建,IronPDF 提供全面的文档和示例,以构建强大的 PDF 解决方案。
使用IronPdf命名空间包含在您的C#或VB.NET项目中。
AddBookmarkAtEnd方法用于将新书签追加到PDF大纲中。
常见问题解答
什么是 DataURIs,为什么要将其用于生成 PDF?
DataURIs 是一种将数据作为 base64 编码字符串直接嵌入 HTML 或 CSS 代码的方案,无需单独的图像文件。IronPDF 完全支持 DataURIs,因此非常适合云环境、分布式系统或需要独立 PDF 而不依赖外部文件的情况。
如何将图像转换为用于嵌入 PDF 的 DataURI 格式?
using 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 标记中即可。
using DataURIs 代替文件引用是否会影响性能?
虽然 DataURIs 会因 base64 编码而增加 HTML 字符串的大小,但 IronPDF 可以高效地处理转换。当您需要独立的 PDF 而不需要外部依赖性时,尤其是在云或分布式环境中,这种权衡是值得的。

