EMF to PDF as raster image

Images
7/13/2016

EMF is the Windows Meta file format for images. More information on this file format can be found here. One of the advantages of the Windows Meta File is, that it is vector based and therefor the images are scalable. With the PDFkit tool it is possible to convert these EMF images to PDF or to include them in a PDF while preserving the scalability. See our blogpost on EMF to PDF as a vector image. In rare and unforseeable occasions, these images may not be converted correctly. In that case it is possible to include the images in PDF as raster images. This article explains how to do that.

First we create a bitmap from an EMF file using GDI+ library functions.

C# code sample: Create a Bitmap from an EMF file

static Bitmap EMF2Bitmap(string file_name)
{
    using (Metafile emf = new Metafile(file_name))
    {
        Bitmap bmp = new Bitmap(emf.Width, emf.Height);

        using (Graphics g = Graphics.FromImage(bmp))
        {
            g.DrawImage(emf, 0, 0);
            return bmp;
        }
    }
}

Secondly we convert the Bitmap to a pdf file

C# code sample: Convert a Bitmap to PDF

static void Bitmap2Pdf(System.Drawing.Bitmap bmp, string file_name)
{
    ImageShape img = new ImageShape(bmp);
    Document document = new Document();
    Page page = new Page(img.Width, img.Height);

    page.VisualOverlay.Add(img);
    document.Pages.Add(page);
    using (FileStream fs = new FileStream(file_name, FileMode.Create, FileAccess.Write))
    {
        document.Write(fs);
    }
}

Having these functions makes it easy to write the Main method.

Putting things together: EMF to PDF

static void Main(string[] args)
{
    // http://stackoverflow.com/questions/10147293/how-to-display-windows-metafile
    string input = @"D:\github\EMFToBitmap\sample.emf";
    string output = @"D:\github\EMFToBitmap\sample.pdf";

    Bitmap bmp = EMF2Bitmap(input);
    Bitmap2Pdf(bmp, output);
}