使用 C# 和 VB 的 PDF 換熱處理中嵌入資料 URI 圖片
在 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 文件中,程式碼最少。
最小工作流程 (5步)
- Download IronPDF from NuGet
- 使用
ReadAllBytes方法讀取圖片位元組 - 使用
ToBase64String方法將字節轉換為 base64 - 在
img標籤中包括 base64 資訊 - 將 HTML 呈現為 PDF
我如何在 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")
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")
我為什麼應該使用 DataURIs 而不是文件引用?
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 字元來表示二進位資料,需要用 4 個字元來表示原始資料的每 3 個字節。 雖然這會增加總大小,但相較於資料自包含文件的優點,對 PDF 生成的影響通常是微不足道的。
在使用 DataURIs 時通過以下做法來最佳化文件大小:
- 在編碼前壓縮圖像:使用工具或庫來優化圖像文件,然後再轉換為 base64
- 選擇合適的格式:照片使用 JPEG,具透明度的圖形使用 PNG
- 適當調整圖像大小:不要嵌入超過 PDF 輸出所需大小的圖片
- 考慮 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 的 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時,尤其是在雲或分散環境中,這種權衡是值得的。

