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

Posted

技术标签:

【中文标题】在控制台应用程序中将带有图像的 RTF 文件加载到 FlowDocument【英文标题】:Loading RTF file with images to FlowDocument in console application 【发布时间】:2011-12-21 23:54:14 【问题描述】:

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

并且由于某种原因,只有在文档中有图像时才会出现此异常。

有什么想法或者更好的解决方法吗?

【问题讨论】:

【参考方案1】:

问题在于将 System.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;
            


        
    

【讨论】:

System.Windows.Forms.DataFormats.Rtf 没有解决问题。 textRange 无法包含图像。还是得到了exception: Unrecognized structure in data format Rich Text Box, parameter name stream

以上是关于在控制台应用程序中将带有图像的 RTF 文件加载到 FlowDocument的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将图像插入 RTF 文档

如何在 C# 中将文本提取/插入到 RTF 字符串中

在 iOS7 中将多个图像加载到单个视图控制器中的方向/分辨率问题

在 xbap 中导入带有图像的 RTF

将rtf文件加载到Swift 2中的UITextView中

在使用VB的RichTextBox控件时加载文档(RTF)出现错误,应用程序出错,不能写入。