Convert PDF to PNG using WPF

In this code sample we take a look how you can create PNG images from a PDF using the Windows Presentation Foundation.

Code sample to convert PDF to PNG

        static void Main(string[] args)
        {
            //read input from file
            Document input;
            using (FileStream fs = new FileStream(@"..\..\input.pdf", FileMode.Open, FileAccess.Read))
            {
                input = new Document(fs);
            }

            //the font names in the pdf have a different name than in the windows system.
            //the resolveFont event is raised whenever a font needs to be resolved
            RenderSettings renderSettings = new RenderSettings();
            renderSettings.TextSettings.ResolveFont += new ResolveFontEventHandler(TextSettings_ResolveFont);

            int count = input.Pages.Count;
            double dpi = 300;
            for (int i = 0; i < count; i++)
            {
                Page page = input.Pages[i];
                System.Windows.Documents.FixedPage fixedPage = page.ConvertToWpf(renderSettings, new ConvertToWpfOptions(), new Summary());

                // Create a new bitmap render target.
                double width = page.Width * dpi / 72.0;
                double height = page.Height * dpi / 72.0;
                RenderTargetBitmap bmp = new RenderTargetBitmap((int)(width), (int)(height), dpi, dpi, System.Windows.Media.PixelFormats.Pbgra32);

                // Render the fixed page into the bitmap target.
                bmp.Render(fixedPage);

                // Write the bitmap to file.
                using (FileStream outStream = new FileStream(string.Format(@"..\..\output" + i + ".png"), FileMode.Create))
                {
                    PngBitmapEncoder enc = new PngBitmapEncoder();
                    enc.Frames.Add(BitmapFrame.Create(bmp));
                    enc.Save(outStream);
                }

                // For some PDF documents this samples has a memory usage pattern that appears to be affected by a garbage collection issue in the
                // Large Object Heap. See https://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/
                // Strangely but true: calling GC.GetTotalMemory appears to be able to avoid that issue, so we do that here.
                GC.GetTotalMemory(true);
            }
        }

        static void TextSettings_ResolveFont(TextRenderSettings sender, ResolveFontEventArgs args)
        {
            System.Diagnostics.Trace.WriteLine(String.Format("font ({0}, {1}, {2})", args.PdfFontName, args.SystemFontName, args.FontPath));

            if (args.FontLocation != FontLocation.System)
            {
                switch (args.PdfFontName)
                {
                    case "Times-Roman":
                        args.SystemFontName = "Times New Roman";
                        break;
                    case "Times-Bold":
                        args.SystemFontName = "Times New Roman";
                        args.Bold = true;
                        break;
                    case "Times-Italic":
                        args.SystemFontName = "Times New Roman";
                        args.Italic = true;
                        break;
                    case "Helvetica":
                        args.SystemFontName = "Arial Unicode MS";
                        break;
                    case "Helvetica-Bold":
                        args.SystemFontName = "Arial Unicode MS";
                        args.Bold = true;
                        break;
                    case "Helvetica-Italic":
                        args.SystemFontName = "Arial Unicode MS";
                        args.Italic = true;
                        break;
                }
            }
        }
Download PDFRasterizer.NET 3.0
We will send you a download link
Why do we ask your email address?
We send tips that speed up your evaluation
We let you know about bug fixes
You can always unsubscribe with one click
We never share your address with a 3rd party
Thank you for your download

We have sent an email with a download link.