Загрузка RTF-файла с изображениями в FlowDocument в консольном приложении - PullRequest
1 голос
/ 04 ноября 2011

Я создаю простое консольное приложение, в котором мне нужно загрузить RTF-файл в FlowDocument для дальнейшей работы.

Я использую этот код для загрузки файла в FlowDocument:

        // Create OpenFileDialog 
        Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

        // Set filter for file extension and default file extension 
        dlg.DefaultExt = ".rtf";
        dlg.Filter = "RichText Files (*.rtf)|*.rtf";

        // Display OpenFileDialog by calling ShowDialog method 
        Nullable<bool> result = dlg.ShowDialog();

        if (result == true)
        {
            // Open document 
            string filename = dlg.FileName;
            FlowDocument flowDocument = new FlowDocument();
            TextRange textRange = new TextRange(flowDocument.ContentStart, flowDocument.ContentEnd);

            using (FileStream fileStream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                textRange.Load(fileStream, DataFormats.Rtf);
            }

        }

Если я сделаю это в приложении WPF и покажу документ в flowDocumentPageViewer, все в порядке. Но если я пытаюсь загрузить файл в консольное приложение, я получаю исключение: нераспознанная структура в формате данных Rich Text Box, поток имен параметров.

И по какой-то причине это исключение появляется только в том случае, если в документе есть изображение.

Есть идеи, что не так или лучше, как это решить?

1 Ответ

2 голосов
/ 07 ноября 2011

Проблема заключалась в использовании System.Windows namesapce для форматов данных.С System.Windows.Forms его функционал.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Windows.Documents;

namespace RtfTest
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            DoRead();
        }

        private static void DoRead()
        {
            // Create OpenFileDialog 
            OpenFileDialog dlg = new OpenFileDialog();

            // Set filter for file extension and default file extension 
            dlg.DefaultExt = ".rtf";
            dlg.Filter = "RichText Files (*.rtf)|*.rtf";

            // Display OpenFileDialog by calling ShowDialog method 
            var result = dlg.ShowDialog();
            try
            {
                if (result == DialogResult.OK)
                {
                    // Open document 
                    string filename = dlg.FileName;
                    FlowDocument flowDocument = new FlowDocument();
                    TextRange textRange = new TextRange(flowDocument.ContentStart, flowDocument.ContentEnd);

                    using (FileStream fileStream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
                    {
                        textRange.Load(fileStream, DataFormats.Rtf);
                    }

                }
            }
            catch (Exception)
            {

                throw;
            }


        }
    }
}
...