public void SetDocumentWriter(DocumentWriter docWriter)
        {
            // Get the last format, options and document file name selected by the user
            _docWriter = docWriter;

            Properties.Settings settings      = new Properties.Settings();
            DocumentFormat      initialFormat = DocumentFormat.Pdf;

            if (!string.IsNullOrEmpty(settings.Format))
            {
                try
                {
                    initialFormat = (DocumentFormat)Enum.Parse(typeof(DocumentFormat), settings.Format);
                }
                catch { }
            }

            if (!string.IsNullOrEmpty(settings.FormatOptionsXml))
            {
                // Set the document writer options from the last one we saved
                try
                {
                    byte[] buffer = Encoding.Unicode.GetBytes(settings.FormatOptionsXml);
                    using (MemoryStream ms = new MemoryStream(buffer))
                        _docWriter.LoadOptions(ms);
                }
                catch { }
            }

            // Get the formats
            // This is the order of importance, show these first then the rest as they come along
            DocumentFormat[] importantFormats =
            {
                DocumentFormat.Pdf,
                DocumentFormat.Docx,
                DocumentFormat.Rtf,
                DocumentFormat.Text,
                DocumentFormat.Doc,
                DocumentFormat.Xls,
                DocumentFormat.Html
            };

            List <DocumentFormat> formatsToAdd = new List <DocumentFormat>();

            Array temp = Enum.GetValues(typeof(DocumentFormat));
            List <DocumentFormat> allFormats = new List <DocumentFormat>();

            foreach (DocumentFormat format in temp)
            {
                allFormats.Add(format);
            }

            // Add important once first:
            foreach (DocumentFormat format in importantFormats)
            {
                formatsToAdd.Add(format);
                allFormats.Remove(format);
            }

            // Add rest
            formatsToAdd.AddRange(allFormats);

            MyFormat pdfFormat = null;

            foreach (DocumentFormat format in formatsToAdd)
            {
                if (format != DocumentFormat.User)
                {
                    string friendlyName = DocumentWriter.GetFormatFriendlyName(format);
                    string extension    = DocumentWriter.GetFormatFileExtension(format).ToUpper();

                    MyFormat mf = new MyFormat(format, friendlyName, extension);

                    _formatComboBox.Items.Add(mf);

                    if (mf.Format == initialFormat)
                    {
                        _formatComboBox.SelectedItem = mf;
                    }
                    else if (mf.Format == DocumentFormat.Pdf)
                    {
                        pdfFormat = mf;
                    }

                    switch (format)
                    {
                    case DocumentFormat.Pdf:
                        // Update the PDF options page
                    {
                        PdfDocumentOptions pdfOptions = _docWriter.GetOptions(DocumentFormat.Pdf) as PdfDocumentOptions;

                        // Clone it in case we change it in the Advance PDF options dialog
                        _pdfOptions = pdfOptions.Clone() as PdfDocumentOptions;

                        Array a = Enum.GetValues(typeof(PdfDocumentType));
                        foreach (PdfDocumentType i in a)
                        {
                            _pdfDocumentTypeComboBox.Items.Add(i);
                        }
                        _pdfDocumentTypeComboBox.SelectedItem = _pdfOptions.DocumentType;

                        _pdfImageOverTextCheckBox.Checked = _pdfOptions.ImageOverText;
                        _pdfLinearizedCheckBox.Checked    = _pdfOptions.Linearized;

                        if (string.IsNullOrEmpty(_pdfOptions.Creator))
                        {
                            _pdfOptions.Creator = "LEADTOOLS PDFWriter";
                        }
                        if (string.IsNullOrEmpty(_pdfOptions.Producer))
                        {
                            _pdfOptions.Producer = "LEAD Technologies, Inc.";
                        }
                    }
                    break;

                    case DocumentFormat.Doc:
                        // Update the DOC options page
                    {
                        DocDocumentOptions docOptions = _docWriter.GetOptions(DocumentFormat.Doc) as DocDocumentOptions;
                        _cbFramedDoc.Checked = (docOptions.TextMode == DocumentTextMode.Framed) ? true : false;
                    }
                    break;

                    case DocumentFormat.Docx:
                        // Update the DOCX options page
                    {
                        DocxDocumentOptions docxOptions = _docWriter.GetOptions(DocumentFormat.Docx) as DocxDocumentOptions;
                        _cbFramedDocX.Checked = (docxOptions.TextMode == DocumentTextMode.Framed) ? true : false;
                    }
                    break;

                    case DocumentFormat.Rtf:
                        // Update the RTF options page
                    {
                        RtfDocumentOptions rtfOptions = _docWriter.GetOptions(DocumentFormat.Rtf) as RtfDocumentOptions;
                        _cbFramedRtf.Checked = (rtfOptions.TextMode == DocumentTextMode.Framed) ? true : false;
                    }
                    break;

                    case DocumentFormat.Html:
                        // Update the HTML options page
                    {
                        HtmlDocumentOptions htmlOptions = _docWriter.GetOptions(DocumentFormat.Html) as HtmlDocumentOptions;

                        Array a = Enum.GetValues(typeof(DocumentFontEmbedMode));
                        foreach (DocumentFontEmbedMode i in a)
                        {
                            _htmlEmbedFontModeComboBox.Items.Add(i);
                        }
                        _htmlEmbedFontModeComboBox.SelectedItem = htmlOptions.FontEmbedMode;

                        _htmlUseBackgroundColorCheckBox.Checked = htmlOptions.UseBackgroundColor;

                        _htmlBackgroundColorValueLabel.BackColor = ConvertColor(htmlOptions.BackgroundColor);

                        _htmlBackgroundColorLabel.Enabled      = _htmlUseBackgroundColorCheckBox.Checked;
                        _htmlBackgroundColorValueLabel.Enabled = _htmlUseBackgroundColorCheckBox.Checked;
                        _htmlBackgroundColorButton.Enabled     = _htmlUseBackgroundColorCheckBox.Checked;
                    }
                    break;

                    case DocumentFormat.Text:
                        // Update the TEXT options page
                    {
                        TextDocumentOptions textOptions = _docWriter.GetOptions(DocumentFormat.Text) as TextDocumentOptions;

                        Array a = Enum.GetValues(typeof(TextDocumentType));
                        foreach (TextDocumentType i in a)
                        {
                            _textDocumentTypeComboBox.Items.Add(i);
                        }
                        _textDocumentTypeComboBox.SelectedItem = textOptions.DocumentType;

                        _textAddPageNumberCheckBox.Checked = textOptions.AddPageNumber;
                        _textAddPageBreakCheckBox.Checked  = textOptions.AddPageBreak;
                        _textFormattedCheckBox.Checked     = textOptions.Formatted;
                    }
                    break;

                    case DocumentFormat.AltoXml:
                        // Update the ALTOXML options page
                    {
                        AltoXmlDocumentOptions altoXmlOptions = _docWriter.GetOptions(DocumentFormat.AltoXml) as AltoXmlDocumentOptions;
                        _altoXmlFileNameTextBox.Text               = altoXmlOptions.FileName;
                        _altoXmlSoftwareCreatorTextBox.Text        = altoXmlOptions.SoftwareCreator;
                        _altoXmlSoftwareNameTextBox.Text           = altoXmlOptions.SoftwareName;
                        _altoXmlApplicationDescriptionTextBox.Text = altoXmlOptions.ApplicationDescription;
                        _altoXmlFormattedCheckBox.Checked          = altoXmlOptions.Formatted;
                        _altoXmlIndentationTextBox.Text            = altoXmlOptions.Indentation;
                        _altoXmlSort.Checked              = altoXmlOptions.Sort;
                        _altoXmlPlainText.Checked         = altoXmlOptions.PlainText;
                        _altoXmlShowGlyphInfo.Checked     = altoXmlOptions.ShowGlyphInfo;
                        _altoXmlShowGlyphVariants.Checked = altoXmlOptions.ShowGlyphVariants;

                        Array a = Enum.GetValues(typeof(AltoXmlMeasurementUnit));
                        foreach (AltoXmlMeasurementUnit i in a)
                        {
                            _altoXmlMeasurementUnit.Items.Add(i);
                        }
                        _altoXmlMeasurementUnit.SelectedItem = altoXmlOptions.MeasurementUnit;
                    }
                    break;

                    case DocumentFormat.Emf:
                    case DocumentFormat.Xls:
                    case DocumentFormat.Pub:
                    case DocumentFormat.Mob:
                    case DocumentFormat.Svg:
                    default:
                        // These formats have no options
                        break;
                    }
                }
            }

            // Remove all the tab pages
            _optionsTabControl.TabPages.Clear();

            // If no format is selected, default to PDF
            if (_formatComboBox.SelectedIndex == -1)
            {
                if (pdfFormat != null)
                {
                    _formatComboBox.SelectedItem = pdfFormat;
                }
                else
                {
                    _formatComboBox.SelectedIndex = -1;
                }
            }

            _formatComboBox_SelectedIndexChanged(this, EventArgs.Empty);

            UpdateUIState();
        }