在控制台应用程序中加载带有图像的RTF文件到FlowDocument

本文关键字:RTF 文件 FlowDocument 图像 应用程序 控制台 加载 | 更新日期: 2023-09-27 18:13:28

我正在创建一个简单的控制台应用程序,我需要将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中显示文档,一切都没问题。但是如果我尝试在控制台应用程序中加载文件,我得到异常:数据格式中的不可识别结构富文本框,参数名称流。

由于某些原因,这个异常只出现在文档中有图像的情况下。

有什么问题或更好的解决方法吗?

在控制台应用程序中加载带有图像的RTF文件到FlowDocument

使用系统时出现问题。用于数据格式的Windows命名空间。与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;
            }

        }
    }
}