PDFs often need images—logos in headers, signatures in contracts, charts in reports. Adding images programmatically means embedding them directly into the document so they display reliably everywhere, without external dependencies.
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
var html = "<img src='logo.png' /><h1>Company Report</h1>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report-with-image.pdf");
IronPDF embeds images directly from HTML, making PDF generation feel like web development.
How Do I Add Images Using HTML?
The simplest approach: use standard HTML image tags.
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
var html = @"
<html>
<body>
<img src='https://example.com/logo.png' style='width:200px;' />
<h1>Annual Report 2024</h1>
<p>Content goes here...</p>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
IronPDF fetches the image from the URL during rendering. The image becomes embedded in the PDF—no external reference remains.
How Do I Embed Images with Base64?
Base64 encoding embeds the image data directly in the HTML. No network requests needed during rendering.
using IronPdf;
// Install via NuGet: Install-Package IronPdf
// Convert image to Base64
byte[] imageBytes = File.ReadAllBytes("logo.png");
string base64 = Convert.ToBase64String(imageBytes);
string dataUri = $"data:image/png;base64,{base64}";
var html = $@"
<html>
<body>
<img src='{dataUri}' style='width:150px;' />
<h1>Self-Contained Document</h1>
</body>
</html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("self-contained.pdf");
Base64 is ideal for:
- Offline PDF generation
- Consistent rendering without network dependencies
- Embedding small logos and icons
How Do I Add Images to Existing PDFs?
Use the ImageStamper to place images on existing PDF pages:
using IronPdf;
using IronPdf.Stamps;
// Install via NuGet: Install-Package IronPdf
var pdf = PdfDocument.FromFile("document.pdf");
var stamp = new ImageStamper("signature.png")
{
HorizontalAlignment = HorizontalAlignment.Right,
VerticalAlignment = VerticalAlignment.Bottom,
HorizontalOffset = new Length(20, MeasurementUnit.Pixels),
VerticalOffset = new Length(20, MeasurementUnit.Pixels)
};
pdf.ApplyStamp(stamp);
pdf.SaveAs("signed-document.pdf");
The stamper overlays images without modifying the original content.
How Do I Position Images Precisely?
Control exact placement with CSS or stamper properties:
using IronPdf;
using IronPdf.Stamps;
// Install via NuGet: Install-Package IronPdf
var pdf = PdfDocument.FromFile("report.pdf");
// Top-left logo
var logo = new ImageStamper("logo.png")
{
HorizontalAlignment = HorizontalAlignment.Left,
VerticalAlignment = VerticalAlignment.Top,
HorizontalOffset = new Length(50),
VerticalOffset = new Length(30)
};
// Bottom-right signature
var signature = new ImageStamper("signature.png")
{
HorizontalAlignment = HorizontalAlignment.Right,
VerticalAlignment = VerticalAlignment.Bottom,
HorizontalOffset = new Length(-50),
VerticalOffset = new Length(-50)
};
pdf.ApplyStamp(logo);
pdf.ApplyStamp(signature);
pdf.SaveAs("branded.pdf");
For HTML-based positioning, use standard CSS:
var html = @"
<div style='position: absolute; top: 20px; right: 20px;'>
<img src='watermark.png' style='opacity: 0.3; width: 100px;' />
</div>
<h1>Document Title</h1>";
How Do I Resize Images?
Control dimensions with CSS or stamper scaling:
using IronPdf;
using IronPdf.Stamps;
// Install via NuGet: Install-Package IronPdf
var pdf = PdfDocument.FromFile("document.pdf");
var stamp = new ImageStamper("large-logo.png")
{
// Scale to 50% of original size
Scale = 50,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Top
};
pdf.ApplyStamp(stamp);
pdf.SaveAs("scaled-logo.pdf");
In HTML, use width/height attributes or CSS:
// Fixed dimensions
var html1 = "<img src='photo.jpg' width='300' height='200' />";
// Percentage of container
var html2 = "<img src='photo.jpg' style='width: 50%;' />";
// Max dimensions (preserves aspect ratio)
var html3 = "<img src='photo.jpg' style='max-width: 400px; height: auto;' />";
Which Image Formats Are Supported?
IronPDF supports common web image formats:
| Format | Best For |
|---|---|
| PNG | Logos, graphics with transparency |
| JPEG | Photos, complex images |
| GIF | Simple animations, icons |
| SVG | Scalable vector graphics |
| WebP | Modern web images |
| BMP | Uncompressed bitmaps |
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
var html = @"
<img src='logo.svg' /> <!-- Scales perfectly -->
<img src='photo.jpg' /> <!-- Best for photos -->
<img src='icon.png' /> <!-- Supports transparency -->
";
var pdf = renderer.RenderHtmlAsPdf(html);
SVG is ideal for logos—it scales without pixelation at any PDF zoom level.
How Do I Add Background Images?
CSS background images work just like on the web:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
var html = @"
<html>
<head>
<style>
body {
background-image: url('watermark.png');
background-repeat: no-repeat;
background-position: center;
background-size: 50%;
background-attachment: fixed;
}
.content {
padding: 50px;
}
</style>
</head>
<body>
<div class='content'>
<h1>Confidential Report</h1>
<p>Document content here...</p>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("watermarked.pdf");
For watermarks across all pages, the background-attachment: fixed property helps.
How Do I Handle Local Image Files?
When working with local files, set the base URL:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
// Set base path for relative image URLs
renderer.RenderingOptions.BaseUrl = new Uri("C:/Projects/Assets/");
var html = @"
<img src='images/logo.png' />
<img src='images/banner.jpg' />
";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("local-images.pdf");
Alternatively, use absolute paths:
var html = @"<img src='file:///C:/Projects/Assets/logo.png' />";
How Do I Add Images to Headers and Footers?
Place logos in page headers or footers:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new ChromePdfRenderer();
// Header with logo
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='display: flex; justify-content: space-between; align-items: center; padding: 10px;'>
<img src='logo.png' style='height: 30px;' />
<span>Company Name</span>
</div>",
DrawDividerLine = true
};
// Footer with page numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align: center;'>Page {page} of {total-pages}</div>"
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1><p>Content...</p>");
pdf.SaveAs("branded-report.pdf");
Header images appear on every page automatically.
How Do I Stamp Images on Specific Pages?
Apply images to selected pages only:
using IronPdf;
using IronPdf.Stamps;
// Install via NuGet: Install-Package IronPdf
var pdf = PdfDocument.FromFile("multipage.pdf");
var stamp = new ImageStamper("approved.png")
{
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Opacity = 50 // Semi-transparent
};
// Apply only to first page
pdf.ApplyStamp(stamp, 0);
// Or apply to specific pages
pdf.ApplyStamp(stamp, new[] { 0, 2, 4 });
pdf.SaveAs("stamped.pdf");
Page indices are zero-based.
How Do I Create Image-Based PDFs?
Convert images directly to PDF pages:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
// Single image to PDF
var pdf = ImageToPdfConverter.ImageToPdf("scan.jpg");
pdf.SaveAs("scanned-document.pdf");
// Multiple images to multi-page PDF
var images = new[] { "page1.png", "page2.png", "page3.png" };
var multiPagePdf = ImageToPdfConverter.ImageToPdf(images);
multiPagePdf.SaveAs("multi-page-scan.pdf");
Each image becomes a full page in the PDF.
Quick Reference
| Task | Approach |
|---|---|
| HTML image | <img src='path.png' /> |
| Base64 embed | <img src='data:image/png;base64,...' /> |
| Stamp existing PDF | pdf.ApplyStamp(new ImageStamper("img.png")) |
| Header logo | HtmlHeader.HtmlFragment |
| Image to PDF | ImageToPdfConverter.ImageToPdf() |
| Position |
HorizontalAlignment, VerticalAlignment
|
| Scale |
Scale property or CSS width/height |
Images in PDFs should be embedded, not linked. IronPDF handles this automatically—whether from URLs, local files, or Base64 data.
For more image handling options, see the IronPDF image documentation.
Written by Jacob Mellor, CTO at Iron Software. Jacob created IronPDF and leads a team of 50+ engineers building .NET document processing libraries.
Top comments (0)