Jak osadzać obrazy za pomocą adresów URI danych w języku C# | IronPDF

Wstawianie obrazów za pomocą DataURI w C# & VB w renderowaniu PDF

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

Wstaw obrazy bezpośrednio do dokumentów PDF, używając DataURIs w C# i VB.NET z IronPDF, eliminując zewnętrzne zależności plików przez konwersję bajtów obrazów na ciągi base64 i włączając je bezpośrednio w znacznikach HTML dla 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 pozwalają na wstawienie obrazów, plików i krojów pisma bezpośrednio do dokumentu HTML jako łańcuch.

Szybki start: Wstawianie obrazów w PDF za pomocą DataURI

Przekształć zawartość HTML na dokumenty PDF, wstawiając obrazy za pomocą DataURIs z 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 wstawić obraz bezpośrednio do dokumentu PDF, używając DataURI przy minimalnym kodzie.

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf
  2. Skopiuj i uruchom ten fragment kodu.

    new IronPdf.ChromePdfRenderer.StaticRenderHtmlAsPdf("<img src='data:image/png;base64,...' />").SaveAs("output.pdf");
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer


Jak wstawić obrazy za pomocą DataURI w PDF?

Wstawianie obrazów za pomocą DataURIs obejmuje obrazy bezpośrednio w znacznikach HTML bez odwoływania się do zewnętrznych plików. 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 wspiera DataURIs, umożliwiając tworzenie profesjonalnych PDF z osadzonymi obrazami.

Proces obejmuje trzy kroki: odczytanie danych obrazu, konwersję na format base64 i wstawienie go do znacznika img HTML. 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")
$vbLabelText   $csharpLabel

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")

Dlaczego powinienem używać DataURI zamiast odwołań do plików?

DataURIs oferują kilka zalet w porównaniu do tradycyjnych odwołań do plików podczas generowania 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 zapewniają, że PDF są całkowicie samodzielne. Podczas udostępniania lub dystrybucji wygenerowanych PDF, brakujące linki do obrazów lub zasoby nie są problemem. To sprawia, że DataURIs są idealne do generowania raportów, faktur lub dokumentów wymagających archiwizacji lub dystrybucji e-mail.

Po trzecie, DataURIs mogą 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 przepływie pracy generowania 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
$vbLabelText   $csharpLabel

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.

Optymalizować rozmiary plików przy użyciu DataURIs, stosując się do tych praktyk:

  1. Kompresuj obrazy przed kodowaniem: Używaj narzędzi lub bibliotek do optymalizacji plików obrazów przed konwersją na base64
  2. Wybieraj odpowiednie formaty: Używaj JPEG dla zdjęć, PNG dla grafik z przezroczystością
  3. Odpowiednio zmniejszaj obrazy: Nie wstawiaj obrazów większych niż jest to konieczne dla wyjściowego PDF
  4. 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
$vbLabelText   $csharpLabel

Zaawansowane techniki i najlepsze praktyki

Pracując z DataURIs w środowiskach produkcyjnych, wdrażaj 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 async IronPDF dla lepszej wydajności podczas przetwarzania wielu obrazów.

Dla złożonych dokumentów z wieloma obrazami, użyj podejścia hybrydowego, gdzie krytyczne obrazy są wstawiane jako DataURIs, podczas gdy większe, opcjonalne obrazy są odwoływane 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.

Często Zadawane Pytania

What are DataURIs and why use them for PDF generation?

DataURIs are a scheme that embeds data directly into HTML or CSS code as base64-encoded strings, eliminating the need for separate image files. IronPDF fully supports DataURIs, making them ideal for cloud environments, distributed systems, or when you need self-contained PDFs without external file dependencies.

How do I convert an image to a DataURI format for PDF embedding?

With IronPDF, converting an image to DataURI involves three steps: First, read the image bytes using System.IO.File.ReadAllBytes(). Second, convert the bytes to base64 using Convert.ToBase64String(). Finally, embed the base64 string in an HTML img tag with the format 'data:image/png;base64,[base64string]'.

What image formats are supported when embedding images as DataURIs?

IronPDF supports embedding various image formats as DataURIs including PNG, JPEG, GIF, and SVG. This flexibility allows you to work with different image types while maintaining full control over the PDF generation workflow.

Can I embed multiple images using DataURIs in a single PDF?

Yes, IronPDF allows you to embed multiple images using DataURIs in a single PDF document. Simply convert each image to its base64 representation and include them in your HTML markup before rendering with IronPDF's ChromePdfRenderer.

Is there a performance impact when using DataURIs instead of file references?

While DataURIs increase the HTML string size due to base64 encoding, IronPDF handles the conversion efficiently. The trade-off is worthwhile when you need self-contained PDFs without external dependencies, especially in cloud or distributed environments.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 18,135,201 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronPdf
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.