Wstawianie obrazów za pomocą DataURI w C# & VB w renderowaniu PDF
Osadzaj obrazy bezpośrednio w dokumentach PDF za pomocą DataURIs w C# i VB.NET z IronPDF, eliminując zależności od plików zewnętrznych poprzez konwersję bajtów obrazu na ciągi znaków base64 i umieszczanie ich bezpośrednio w kodzie HTML w celu płynnego renderowania PDF.
Pracując z łańcuchami HTML i dokumentami, często niezbędne jest unikanie zależności od katalogów zasobów. Schemat URI danych zapewnia skuteczne rozwiązanie.
Schemat URI danych osadza dane bezpośrednio w kodzie HTML lub CSS, eliminując potrzebę oddzielnych plików. DataURIs umożliwia wstawianie obrazów, plików i czcionek bezpośrednio do dokumentu HTML jako ciągu znaków.
Szybki start: Wstawianie obrazów w PDF za pomocą DataURI
Przekształcaj treści HTML w dokumenty PDF, osadzając obrazy za pomocą DataURIs przy użyciu IronPDF. Ten przewodnik pokazuje, jak renderować PDF z osadzonymi obrazami, używając prostego, wydajnego kodu. IronPDF konwertuje HTML na PDF, utrzymując integralność obrazu. Oto prosty przykład pokazujący, jak osadzić obraz bezpośrednio w dokumencie PDF przy użyciu DataURI przy minimalnym nakładzie kodu.
-
Install IronPDF with NuGet Package Manager
PM > Install-Package IronPdf -
Skopiuj i uruchom ten fragment kodu.
new IronPdf.ChromePdfRenderer.StaticRenderHtmlAsPdf("<img src='data:image/png;base64,...' />").SaveAs("output.pdf"); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną
Minimalny proces (5 kroków)
- Pobierz IronPDF z NuGet
- Odczytaj bajty obrazu za pomocą metody
ReadAllBytes - Użyj metody
ToBase64String, aby przekonwertować bajty na base64 - Zawierać informacje base64 w tagu
img - Renderować HTML do PDF
Jak wstawić obrazy za pomocą DataURI w PDF?
Osadzanie obrazów za pomocą DataURIs polega na umieszczaniu obrazów bezpośrednio w kodzie HTML bez odwoływania się do plików zewnętrznych. To podejście dobrze sprawdza się podczas generowania PDF w środowiskach chmurowych, systemach rozproszonych lub podczas zapewniania, że wszystkie zasoby są samodzielne. Konwersja HTML na PDF w IronPDF w pełni obsługuje DataURIs, umożliwiając profesjonalne tworzenie plików PDF z osadzonymi obrazami.
Proces ten obejmuje trzy etapy: odczytanie danych obrazu, konwersję do formatu base64 oraz osadzenie w tagu HTML img. Ta metoda działa z różnymi formatami obrazów, w tym PNG, JPEG, GIF i SVG, zapewniając elastyczność w przepływie pracy generowania PDF. Technika pozostaje spójna zarówno przy pracy z obrazami z Azure Blob Storage, jak i lokalnymi plikami.
Podstawowy przykład wstawiania obrazów
Ten kompletny przykład pokazuje, jak wstawić obraz do PDF za pomocą DataURI:
: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")
Deweloperzy VB.NET mogą osiągnąć tę samą funkcjonalność, używając biblioteki PDF IronPDF dla VB.NET:
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")
Dłączego powinienem używać DataURI zamiast odwołań do plików?
DataURIs oferuje kilka zalet w porównaniu z tradycyjnymi odwołaniami do plików podczas generowania plików PDF. Po pierwsze, eliminują zależności od zewnętrznych plików, co czyni generowanie PDF bardziej niezawodnym i przenośnym. Jest to kluczowe w środowiskach chmurowych, takich jak Azure lub AWS Lambda, gdzie dostęp do systemu plików może być ograniczony lub wrażliwy na wydajność.
Po drugie, DataURIs zapewnia, że pliki PDF są całkowicie samowystarczalne. Podczas udostępniania lub dystrybucji wygenerowanych PDF, brakujące linki do obrazów lub zasoby nie są problemem. To sprawia, że DataURIs idealnie nadaje się do generowania raportów, faktur lub dokumentów wymagających archiwizacji lub dystrybucji pocztą elektroniczną.
Po trzecie, DataURIs może poprawić wydajność w niektórych scenariuszach. Ponieważ dane obrazu są osadzone bezpośrednio w HTML, podczas renderowania nie odbywają się dodatkowe żądania HTTP ani operacje na systemie plików. W rezultacie PDF generują się szybciej, zwłaszcza przy obsłudze wielu małych obrazów.
Jakie formaty obrazów są obsługiwane?
IronPDF obsługuje wszystkie główne formaty obrazów poprzez DataURIs, zapewniając elastyczność w procesach generowania plików PDF:
- PNG: Idealny dla obrazów z przezroczystością lub grafik z ostrymi krawędziami. Użyj
data:image/png;base64, - JPEG: Najlepszy dla fotografii i złożonych obrazów o wielu kolorach. Użyj
data:image/jpeg;base64, - GIF: Nadaje się do prostych animacji lub obrazów o ograniczonych kolorach. Użyj
data:image/gif;base64, - SVG: Perfekcyjny dla skalowalnych grafik wektorowych. Użyj
data:image/svg+xml;base64, - WebP: Nowoczesny format z doskonałą kompresją. Użyj
data:image/webp;base64,
Poniższy przykład pokazuje, jak obsługiwać różne formaty obrazów:
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
W przypadku zaawansowanego przetwarzania obrazów, w tym dodawania obrazów do istniejących PDF, IronPDF zapewnia kompleksowe wsparcie.
Jak kodowanie Base64 wpływa na rozmiar pliku?
Kodowanie Base64 zwiększa rozmiar danych o około 33%. Base64 reprezentuje dane binarne używając tylko 64 znaków ASCII, wymagając 4 znaków do przedstawienia każdych 3 bajtów oryginalnych danych. Chociaż to zwiększa ogólny rozmiar, wpływ na generowanie PDF jest często minimalny w porównaniu do zalet samodzielnych dokumentów.
Zoptymalizuj rozmiary plików podczas korzystania z DataURIs, stosując się do poniższych praktyk:
- Kompresuj obrazy przed kodowaniem: Używaj narzędzi lub bibliotek do optymalizacji plików obrazów przed konwersją na base64
- Wybierz odpowiednie formaty: Używaj JPEG do zdjęć, PNG do grafiki z przeźroczystością
- Zmieniaj rozmiar obrazów odpowiednio: Nie osadzaj obrazów większych niż to konieczne do wyjścia PDF
- Rozważ kompresję PDF: Używaj funkcji kompresji IronPDF po generacji
Ten przykład pokazuje optymalizację obrazów przed wstawieniem:
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
Zaawansowane techniki i najlepsze praktyki
Podczas pracy z DataURIs w środowiskach produkcyjnych należy wdrożyć mechanizmy buforowania, aby uniknąć wielokrotnego kodowania tych samych obrazów. Jest to szczególnie ważne przy generowaniu wielu PDF z współdzielonymi zasobami. Wykorzystaj możliwości IronPDF async, aby uzyskać lepszą wydajność podczas przetwarzania wielu obrazów.
W przypadku złożonych dokumentów zawierających wiele obrazów należy zastosować podejście hybrydowe, w którym kluczowe obrazy są osadzone jako DataURIs, a większe, opcjonalne obrazy są odwołane zewnętrznie. To wyważa samodzielne dokumenty z rozsądnymi rozmiarami plików.
Można również serwować cały ciąg HTML lub dokument PDF jako Byte Array, używając integracji ASP.NET MVC IronPDF. Ta technika działa dobrze przy budowie aplikacji webowych, które generują i serwują PDF dynamicznie.
Dla zaawansowanych technik manipulacji PDF, w tym znakowania wodnego, podpisów cyfrowych i tworzenia formularzy, IronPDF oferuje kompleksową dokumentację i przykłady do budowy solidnych rozwiązań PDF.
Użyj dyrektywy using IronPdf, aby dołączyć przestrzeń nazw IronPdf do swoich projektów w języku C# lub VB.NET.
AddBookmarkAtEnd służy do dodawania nowych zakładek do spisu treści pliku PDF.
Często Zadawane Pytania
Co to są DataURI i dlaczego warto ich używać do generowania plików PDF?
DataURI to schemat, który osadza dane bezpośrednio w kodzie HTML lub CSS jako ciągi zakodowane w base64, eliminując potrzebę oddzielnych plików obrazów. IronPDF w pełni obsługuje DataURI, co czyni je idealnym dla środowisk chmurowych, systemów rozproszonych lub gdy potrzebujesz samodzielnych plików PDF bez zewnętrznych zależności.
Jak przekonwertować obraz na format DataURI do osadzenia w PDF?
Z IronPDF, konwersja obrazu do DataURI obejmuje trzy kroki: Po pierwsze, odczytaj bajty obrazu przy użyciu System.IO.File.ReadAllBytes(). Po drugie, przekonwertuj bajty na base64 używając Convert.ToBase64String(). W końcu osadź ciąg base64 w tagu img HTML z formatem 'data:image/png;base64,[base64string]'.
Jakie formaty obrazów są obsługiwane podczas osadzania obrazów jako DataURI?
IronPDF obsługuje osadzanie różnych formatów obrazów jako DataURI, w tym PNG, JPEG, GIF i SVG. Ta elastyczność pozwala na pracę z różnymi typami obrazów przy utrzymaniu pełnej kontroli nad przepływem generowania plików PDF.
Czy mogę osadzić wiele obrazów przy użyciu DataURI w jednym pliku PDF?
Tak, IronPDF pozwala na osadzanie wielu obrazów przy użyciu DataURI w jednym dokumencie PDF. Wystarczy przekonwertować każdy obraz do jego reprezentacji base64 i dołączyć je do znacznika HTML przed renderowaniem za pomocą ChromePdfRenderer IronPDF.
Czy istnieje wpływ na wydajność przy używaniu DataURI zamiast odniesień do plików?
Chociaż DataURI zwiększają rozmiar ciągów HTML ze względu na kodowanie base64, IronPDF efektywnie przetwarza konwersję. Ten kompromis jest opłacalny, kiedy potrzebujesz samodzielnych plików PDF bez zewnętrznych zależności, zwłaszcza w środowiskach chmurowych lub rozproszonych.

