Convert Html to Tiff

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media.Imaging;
class Program
    private static WebBrowser InitialiseBrowser(string source)
        // create a hidden web browser, which will navigate to the page
        WebBrowser browser = new WebBrowser();
        browser.ScrollBarsEnabled = false; // we don't want scrollbars on our image
        browser.ScriptErrorsSuppressed = true; // don't let any errors shine through

        LoadWebPage(browser, source);

        // set the size of our web browser to be the same size as the page
        browser.Width = browser.Document.Body.ScrollRectangle.Width;
        browser.Height = browser.Document.Body.ScrollRectangle.Height;

        return browser;

    private static void LoadWebPage(WebBrowser browser, string url)

        while (browser.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)

    private static TiffBitmapEncoder InitialiseTiffBitmapEncoder(WebBrowser browser)
        int width = browser.Width;
        int height = browser.Height;

        // a bitmap that we will draw to
        System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(width, height);
        // draw the web browser to the bitmap
        browser.DrawToBitmap(bmp, new System.Drawing.Rectangle(0, 0, width, height));

        BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
            bmp.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());

        TiffBitmapEncoder tiff = new TiffBitmapEncoder();
        tiff.Compression = TiffCompressOption.Ccitt4;

        return tiff;

    //this method doesn't work becuase there is no space in the metadata
    //to add the value for FillOrder
    private static void OldFixTiff(string fileName)
        using (var openFile = new FileStream(fileName, FileMode.Open))
            TiffBitmapDecoder output = new TiffBitmapDecoder(openFile, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
            InPlaceBitmapMetadataWriter metadata = output.Frames[0].CreateInPlaceBitmapMetadataWriter();

            var fillOrder = metadata.GetQuery("/ifd/{ushort=266}");
            Debug.Print("Read Fill Order Metadata tag as {0}", fillOrder);

            // If .Net added a bogus fill order, correct it
            if (fillOrder == null || (ushort)fillOrder == 0)
                Debug.Print("Correcting FILL ORDER in file {0}", fileName);
                metadata.SetQuery("/ifd/{ushort=266}", (ushort)1);

                // Try to save new metadata
                if (metadata.TrySave())
                    fillOrder = metadata.GetQuery("/ifd/{ushort=266}");
                    Debug.Print("Fill order correction successful!");
                    Debug.Print("Read New Fill Order Metadata tag as {0}", fillOrder);

    private static void SaveTiff(TiffBitmapEncoder tiff, string fileName)
        FileStream file = new FileStream(fileName, FileMode.Create);

    static void Main(string[] args)
        string source = args[0];
        string target = args[1];

        WebBrowser browser = InitialiseBrowser(source);
        TiffBitmapEncoder tiff = InitialiseTiffBitmapEncoder(browser);
        SaveTiff(tiff, target);