PDF-to-Image Renderer for .NET C# wrapper for poppler tool (XPDF)


features

  • C# component for rendering PDF pages to high-quality images (jpg, png, tiff): can be used for PDF thumbnails, PDF viewer in both ASP.NET and desktop apps.
  • .NET wrapper for FREE poppler tools pdftoppm, pdftotext, pdfimages, pdfinfo: XPDF successor, works WITHOUT Ghostscript or Adobe Reader.
  • get info about PDF file: number of pages, page size.
  • extract PDF images or get list of images with metadata.
  • scale to fit specified image size.
  • render pages range (or all pages) in one pass.
  • extract PDF text content (possibly with layout metadata).
  • No external dependencies: all you need is one assembly. Poppler binaries (windows build) are embedded as archive and extracted automatically on first use. For non-windows environments poppler utilities should be installed separately.
  • Usage examples (C#):
    • CreatePdfThumbnails: generates PDF thumbnails by PDF 1-st page, illustrates how to resize/scale rendering result to fit image size constraints (2 ways)
    • PdfViewerMvc: ASP.NET PDF viewer - renders each page to image on the server side (user has no access to original PDF file)
    • PdfImages: how to get list of images in PDF and extract them as image files
    • PdfToText: how to extract text with metadata from PDF

download and pricing

quick purchase process

  • 1 Choose a package
  • 2 Pay online 2Checkout.com is a worldwide leader in online payment services
  • 3 Download the package
Need to render PDF to images or text from C# code?
NReco.PdfRenderer is a right choice!

how to use

  1. Install latest version of NReco.PdfRenderer nuget package. Also you can download nupkg file from nuget.org, extract the DLL and reference it directly if you like.
  2. Convert PDF to JPG with one line of C# code:
    var pdfFile = "Sample1.pdf";
    var pdfToImg = new NReco.PdfRenderer.PdfToImageConverter();
    pdfToImg.ScaleTo = 200; // fit 200x200 box
    pdfToImg.GenerateImage( pdfFile, 1, 
      ImageFormat.Jpeg, "Sample1.jpg" );
  3. That's all! See API Reference for more details.
Feel free to contact us in case of any questions.

convert PDF to image online


Get PDF page thumbnail
Note: thumbnail is scaled to 800px (you can get better resolution).

frequently asked questions

PdfRenderer is licensed per-company (or individual) and can be used in company's products without any limitations (unlimited number of developers/deployments). Trial version can be used only for evaluation/testing purposes.

Internally PdfRenderer executes poppler tools as a separate programs (with System.Diagnostics.Process); poppler is licensed under GPL and it may be used/redistributed for free. According to GPL conditions, "aggregate" (usage and distribution of GPL-program when it is executed from another non-GPL program) is allowed. Note that if you're redistribute PdfRenderer as part of your product, you need to declare that it depends on poppler tools as separate program and include all notices required by GPL redistribution terms.
NReco.PdfRenderer provides PdfToTextConverter (API for 'pdftotext') that can be used for this purpose:
var pdfToText = new PdfToTextConverter();
pdfToText.CustomArgs = " -bbox-layout -eol dos "; 
var textWithLayoutMetadata = pdfToText.GenerateText("test.pdf");
NReco.PdfRenderer nuget package includes netstandard20 build which is fully compatible with .NET Core 2.x and 3.x.
Important notice: .NET Core is a cross-platform, and in case of non-Windows hosting environment you can use NReco.PdfRenderer wrapper; however poppler utilities (pdftoppm, pdfinfo, pdfimages, pdftotext) should be installed/deployed separately:
Starting from PdfRenderer version 1.2.0 you can use GenerateImage and GenerateImages overloads that accept Stream as input to render PDF content without using temporary local file (C#):
void ProcessFileFromUrl(string url, Action<Stream> handler) {
  using (var httpClient = new System.Net.Http.HttpClient()) {
    using (var responseStream = httpClient.GetStreamAsync(url).GetAwaiter().GetResult()) {
      handler(responseStream);
    }
  }
}
var pdfToImage = new PdfToImageConverter();

var pdfUrl = "https://www.adobe.com/support/products/enterprise/knowledgecenter/media/c4611_sample_explain.pdf";
ProcessFileFromUrl(pdfUrl, (pdfInputStream) => {
  pdfToImage.GenerateImage(pdfInputStream, 1, ImageFormat.Jpeg, "c:\\temp\\test.jpg");
});
Starting from v.1.1.0 it is possible to use PdfInfo class for this purpose (C#):
var pdfInfo = new PdfInfo();
var testPdfInfo = pdfInfo.GetPdfInfo(@"test.pdf");
Console.WriteLine($"Pages: {testPdfInfo.Pages}");
Console.WriteLine($"Page size: {testPdfInfo.PageSize.PageFormat}");
This is possible with GenerateImages method (available in v.1.1.0 or newer):
var fileNames = pdfToImage.GenerateImages(@"test.pdf", 
	3, 7,  // render from pages 3-7
	ImageFormat.Png, "outputFolder");
As result 4 images are produced and saved into specified folder.

If PDF text is not rendered most likely you need to use poppler encoding data (it is not included into distribution by default). You can verify that by handling "LogReceived" event; typical errors are smth like Missing language pack for 'Adobe-Korea1' mapping, Missing language pack for 'Adobe-Japan1' mapping, Missing language pack for 'Adobe-CNS1' mapping.

In case of .NET Core on Linux it is enough to install "poppler-data" package. For Windows environment:

  1. download an archive with "poppler-data": https://poppler.freedesktop.org/poppler-data-0.4.9.tar.gz and extract poppler-data-0.4.9 folder
  2. prepare special folder for poppler binaries and poppler-data files. For example this may be <your_asp_net_app_folder>\App_Data\poppler\bin
  3. copy everything from poppler-data-0.4.9 folder to <your_asp_net_app_folder>\App_Data\poppler\share\poppler
  4. in C# code, change default path for poppler binaries to use your special folder:
    var pdfToImage = new PdfToImageConverter();
    pdfToImage.ToolPath = "<your_asp_net_app_folder>\App_Data\poppler\bin";
    
  5. now PdfRenderer should render PDF with non-Unicode characters correctly

It is possible to use NReco.PdfRenderer in Azure Function under the following conditions:

  • because of Azure Functions hosting environment System.Drawing API is not supported. This means that you should avoid usage of API methods that return System.Drawing.Image object.
  • in trial mode component applies a watermark and this causes an exception for the same reason (System.Drawing API cannot be used). You can request a demo key for testing purposes if you want to ensure that everything works fine.
  • by default wrapper extracts poppler tools binaries into the folder with .NET Core app. It is read-only in case of Azure Functions, so you need to specify another location:
    var pdfToImg = new NReco.PdfRenderer.PdfToImageConverter();
    pdfToImg.ToolPath = Path.Combine(Path.GetTempPath(), "NRecoPdfRenderer");

what's new

2021 Jul 25 v.1.4.0 changes:
  • poppler x64 binaries for windows updated to 21.03 (2021-Mar-01), a lot of issues are fixed in comparing to previous 0.8.7 build.
  • now 'pdftoppm' TIFF output works fine on windows (emulation is not needed anymore).
2020 Aug 24 v.1.3.1 changes:
  • patched poppler 0.8.7 x64 binaries for windows to make possible to use poppler-data for non-standard encodings
2020 May 22 v.1.3.0 changes:
  • poppler x64 binaries for windows updated to 0.87 (2020-Mar-28)
  • BEAKING: Win-x86 is no longer supported
  • new poppler build is faster, more stable, offers more features in comparing to previously used poppler binaries. See poppler's changes log for more details.
  • fixed issue when poppler shows alert-box "JPEG Library Error" and stucks
  • now filled PDF forms are rendered correctly, without need to 'flatten' to show values in the inputs
2018 Aug 25 v.1.2.2 changes:
  • fixed parse issue with PdfImages.GetPdfImagesList ('pdfimages -list')
2018 Aug 25 v.1.2.2 changes:
  • fixed parse issue with PdfImages.GetPdfImagesList ('pdfimages -list')
2018 Aug 23 v.1.2.1 changes:
  • added PdfInfo.GetPdfInfo overload that can read from Stream
  • added workaround for known 'pdftoppm' issue with TIFF output on windows
  • added PdfImages wrapper API for 'pdfimages' (extract images from PDF or get list of images in PDF)
  • added PdfToTextConverter wrapper API for 'pdftotext' (extract text from PDF, possibly with layout metadata)
2018 Aug 16 v.1.2.0 changes:
  • poppler for windows updated to latest 0.67
  • added GenerateImage and GenerateImages overloads that accept Stream as input
2018 Apr 11 v.1.1.2 changes:
  • use System.Drawing.Common instead of CoreCompat.System.Drawing.v2 in netstandard2.0 build
2017 Nov 28 v.1.1.1 changes:
  • added netstandard20 build to nuget package (solves System.Drawing.Color compile-time conflict in .NET Core 2 apps)
2017 Nov 11 v.1.1.0 changes:
  • added PdfInfo class (wrapper for pdfinfo.exe) that allows to get some information about PDF file (like number of pages).
  • added PdfToImageConverter.GenerateImages method that renders specified page range (or all pages) in one pass.
2017 Jun 18 v.1.0.2 changes:
  • poppler win32 binaries updated to v.0.51
  • added netstandard1.5 build (can be used from .NET Core apps). Only win32 binaries of poppler tool are shipped with PdfRenderer and for non-Windows platforms it should be installed separately.
2017 Jan 06 v.1.0.1 changes:
  • poppler binaries updated to v.0.50 (released on December 15, 2016)
2016 Nov 22 v.1.0.0 features:
  • render PDF pages to png, jpg, tiff formats
  • scale image to fit specified box (N*N) automatically
  • change rendering resolution (DPI=150 by default)

more components

  • HTML-to-PDF Generator

    .NET wrapper for WkHtmlToPdf utility that generates PDF reports by HTML template.

  • Image Generator

    .NET wrapper WkHtmlToImage utility that generate pretty-looking images by HTML layout.