Extract Images from PDF Using C#
In .NET development, extracting images from PDFs is a common requirement—whether you need to pull charts from documents during data migration or extract key illustrations for content analysis, this scenario is hard to avoid. However, traditional solutions have drawbacks: paid PDF libraries are costly, and many rely on heavyweight tools like Adobe Acrobat, making them impractical for small and medium-sized projects.
This article will show you how to use the free library Free Spire.PDF for .NET to implement two key use cases: "batch extraction from the entire document" and "precise extraction from specific pages." The code is simple, and the operation is efficient—no complex setup required.
Add the Library in 3 Simple Steps
Before using Free Spire.PDF, you first need to reference the library. The easiest way is via NuGet (no manual file downloads or path configurations):
- Open Visual Studio, right-click your project, and select Manage NuGet Packages;
- Go to the Browse tab, search for "Free Spire.PDF," and click Install on the official package;
- Once installation finishes, the project will automatically add the library reference—you’re ready to code.
⚠️ Important Note: The free version of Free Spire.PDF has a page limit: it only supports PDFs with up to 10 pages.
Code Examples for PDF Image Extraction
The core logic of image extraction with Free Spire.PDF is straightforward:
- Use the
GetImagesInfo()method from thePdfImageHelperclass to get image metadata from PDF pages; - Call
PdfImageInfo.Image.Save()to save the extracted images to your local drive.
Below are reusable code examples for the two most common scenarios.
Scenario 1: Extract All Images from a PDF
Ideal for use cases like "archiving all illustrations in a document" or "batch collecting images from a multi-page report." The workflow is: Load the PDF → Loop through all pages → Extract and save images in order.
using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.Drawing;
namespace ExtractAllPdfImages
{
class Program
{
static void Main(string[] args)
{
// 1. Load the target PDF (replace with your file path: relative or absolute)
// Example: pdf.LoadFromFile(@"C:\Docs\Report.pdf"); (absolute path)
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("Input.pdf");
// 2. Initialize the image extraction tool
PdfImageHelper imageExtractor = new PdfImageHelper();
// 3. Loop through pages and extract images
int imageCounter = 0; // Avoid duplicate image filenames
for (int pageIndex = 0; pageIndex < pdf.Pages.Count; pageIndex++)
{
// Get the current page object
PdfPageBase currentPage = pdf.Pages[pageIndex];
// Get all images on the current page
PdfImageInfo[] pageImages = imageExtractor.GetImagesInfo(currentPage);
// Save each image to the "Output" folder
foreach (var imageInfo in pageImages)
{
Image extractedImage = imageInfo.Image;
// Customize save path/format (supports PNG, JPG, BMP, etc.)
extractedImage.Save($"Output\\all_images_{imageCounter}.png");
imageCounter++;
}
}
// 4. Release resources to avoid memory leaks
pdf.Dispose();
System.Console.WriteLine("All images extracted successfully!");
}
}
}
Scenario 2: Extract Images from Specific PDF Pages
Perfect for cases like "extracting the cover image from page 1" or "pulling a chart from page 5 of a thesis." The key is to locate the target page first, then extract its images.
using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.Drawing;
namespace ExtractImagesFromSpecificPages
{
class Program
{
static void Main(string[] args)
{
// 1. Load the target PDF
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("Input.pdf"); // Replace with your PDF path
// 2. Define the target page (e.g., extract from page 3 → index = 2)
int targetPageIndex = 2;
// Validate page index (avoid out-of-range errors)
if (targetPageIndex < 0 || targetPageIndex >= pdf.Pages.Count)
{
System.Console.WriteLine("Invalid page index!");
return;
}
PdfPageBase targetPage = pdf.Pages[targetPageIndex];
// 3. Extract images from the target page
PdfImageHelper imageExtractor = new PdfImageHelper();
PdfImageInfo[] targetPageImages = imageExtractor.GetImagesInfo(targetPage);
// 4. Save images (filename includes page number for clarity)
for (int i = 0; i < targetPageImages.Length; i++)
{
Image extractedImage = targetPageImages[i].Image;
// Filename format: page_[pageNumber]_image_[imageIndex].png
extractedImage.Save($"Output\\page_{targetPageIndex + 1}_image_{i}.png");
}
// 5. Release resources
pdf.Dispose();
System.Console.WriteLine($"Images from page {targetPageIndex + 1} extracted successfully!");
}
}
}
⚠️ Critical Tip: Free Spire.PDF uses 0-based page indexing—page 1 = index 0, page 2 = index 1, page N = index N-1.
Advantages of This Solution & Key Notes
1. Core Advantages
- High Flexibility: Customize save paths (e.g.,
Output\\2025_Reports\\), image formats (PNG/JPG/BMP), and filenames (e.g., include page numbers or timestamps); - Efficient Batch Processing: Loop through pages to handle multi-page PDFs in seconds—no manual page-by-page work;
- Lightweight & Independent: No need to install Adobe Acrobat or other third-party software; just reference one library to run.
2. Important Notes
- If the "Output" folder doesn’t exist, the code will throw an error—create the folder manually first, or add
System.IO.Directory.CreateDirectory("Output");before saving images;
Summary
With Free Spire.PDF for .NET, extracting PDF images requires no complex parsing algorithms or heavy tools—just a few lines of code to achieve precise extraction. Whether you need to batch process an entire document or target specific pages, this solution is fast, cost-effective, and easy to integrate into .NET projects. It’s ideal for developers looking to reduce development time and avoid expensive third-party libraries.