none
RichTextBox中打开work文档内容为何显示乱码? RRS feed

  • 问题

  • 大家好,我通过OpenFiledialog对话框选中文件,将文件的内容显示在RichTextbox控件中,.txt,.cs,.xaml格式的文件都能显示,为何.doc或者.docx格式的显示为乱码?如图,

    打开txt

    打开docx


    2011年9月29日 6:17

答案

全部回复

  • 代码如下:

    xaml========================

    <Window x:Class="RichTextBoxOpenDocx.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <TextBox Height="37" HorizontalAlignment="Left" Margin="14,12,0,0" Name="textBox1" VerticalAlignment="Top" Width="373" />
            <Button Content="OpenFileDialog" Height="35" HorizontalAlignment="Left" Margin="402,11,0,0" Name="button1" VerticalAlignment="Top" Width="92" Click="button1_Click" />
            <RichTextBox Height="237" HorizontalAlignment="Left" Margin="14,64,0,0" Name="richTextBox1" VerticalAlignment="Top" Width="480" />
        </Grid>
    </Window>

    cs==============================

    public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, RoutedEventArgs e)
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = "Word Documents (*.docx)|*.docx|Web Pages (*.htm,*.html)|*.htm;*.html|Rich Text Format (*.rtf)|*.rtf|Text Files (*.txt)|*.txt|XAML Files (*.xaml)|*.xaml|ALL Files (*.*)|*.*";

                if (ofd.ShowDialog() == true)
                {
                    string str = string.Empty;
                    this.textBox1 .Text  = ofd.FileName;
                    str = ofd.FileName;
                    FileStream fs;

                    fs = new FileStream(str, FileMode.Open);
                    using (fs)
                    {
                        TextRange text = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd);
                        text.Load(fs, DataFormats.Text);
                        fs.Close();
                    }
                }
            }

        }

    2011年9月29日 6:19
  • 当让是乱码啦,你直接打开一个exe是乱码,是同样的道理。 .doc .docx都是二进制流文件,不是文本格式的,特别是.docx 属于OpenXML规范的,他本身是一些xml文件集合,然后通过xip压缩算法压缩后,成.docx扩展名。所以我们可以很自然先修改.docx到.zip,然后用解压缩软件解压缩他。

    还有,这里你有个基础问题。WPF RichTextBox默认承载的是FlwoDocument内容,因为你能够显示.txt .xml等,是因为他们都是纯文本文件格式。而即使你尝试打开.rtf 这些看似Winform RichTextBox能够显示的格式的文件,在WPF中也是不能直接显示的。WPF需要的是FlowDocument.

     


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年9月29日 17:52
    版主
  • 谢谢你的回答,这里的机制我大概清楚了;可是要怎么样修改?才能正常显示doc等格式文件呢?
    2011年9月30日 1:22
  • WPF RichTextBox 默认仅支持 FlowDocument ,扩展还支持纯文本和 TRF 内容。对于.doc .docx 还有 PDF 都是不支持的。我们要在WPF显示这些,主要有两个思路:

    For .doc .dox ,由于.doc不是OpenXML文档规范的,所以显示会很麻烦,主要是载入Word进程来显示。对于.docx,我们可以用OpenXML的API来读取显示。  还有一种比较好的方式是先将doc docx转换成XPS然后在WPF DocumentViewer中显示(WPF对XPS支持很好)。请参考:http://www.c-sharpcorner.com/UploadFile/mahesh/WordToXps09242009101005AM/WordToXps.aspx

    For pdf, 由于这个格式属于Adobe公司定义,目前解决方案只有通过第三方组件来读取,或者通过Adobe Reader的ActiveX 来显示。这里有篇文章给了例子:http://hugeonion.com/2009/04/06/displaying-a-pdf-file-within-a-wpf-application/

     

    还有,你不妨可以考虑直接使用第三方的控件,比如这个就实现你的这些要求:http://www.textcontrol.com/en_US/products/dotnetwpf/overview/?gclid=CPXb1cDxw6sCFcd56wodmhh_zw


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 xxyxxb2080 2011年9月30日 3:20
    2011年9月30日 2:12
    版主
  • 谢谢你的回答,这里的机制我大概清楚了;可是要怎么样修改?才能正常显示doc等格式文件呢?
    很遗憾,修改你是改不出来的,考虑用其他方案吧。
    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年9月30日 2:12
    版主