Как читать файл .RTF, используя .NET 4.0 - PullRequest
10 голосов
/ 19 февраля 2010

Я видел образцы с использованием библиотеки объектов Word 9.0. Но у меня есть Office 2010 Beta и .NET 4.0 в VS2010. Любые советы о том, как идти с новым Word Dlls?

Так что я просто хотел получить функциональность RTF для TEXT с .NET3.5 или новее.

Ответы [ 4 ]

10 голосов
/ 19 февраля 2010

Я получил лучшее решение с WPF, используя TextRange.

FlowDocument document = new FlowDocument();

//Read the file stream to a Byte array 'data'
TextRange txtRange = null;

using (MemoryStream stream = new MemoryStream(data))
{
    // create a TextRange around the entire document
    txtRange = new TextRange(document.ContentStart, document.ContentEnd);
    txtRange.Load(stream, DataFormats.Rtf);
}

Теперь вы можете увидеть извлеченный текст внутри documentTextRange.Text

5 голосов
/ 19 февраля 2010

Вы действительно новичок, чтобы загрузить .RTF в Word? .net имеет элемент управления RichTextBox, который может обрабатывать файлы .RTF. См. Здесь: http://msdn.microsoft.com/en-us/library/1z7hy77a.aspx (Как загрузить файлы в элемент управления RichTextBox Windows Forms)

1 голос
/ 14 августа 2013
public enum eFileType
{
    Invalid = -1,
    TextDocument = 0,
    RichTextDocument,
    WordDocument
}

public interface IRead
{
    string Read(string file);
}

public static class FileManager
{
    public static eFileType GetFileType(string extension)
    {
        var type = eFileType.Invalid;
        switch (extension)
        {
            case ".txt": type = eFileType.TextDocument;
                break;
            case ".rtf": type = eFileType.RichTextDocument;
                break;
            case ".docx": type = eFileType.WordDocument;
                break;
        }
        return type;
    }
}


public class TextDocument : IRead
{
    public string Read(string file)
    {
        try
        {
            var reader = new StreamReader(file);
            var content = reader.ReadToEnd();
            reader.Close();
            return content;
        }
        catch
        {
            return null;
        }
    }
}

public class RichTextDocument : IRead
{
    public string Read(string file)
    {
        try
        {
            var wordApp = new Application();
            object path = file;
            object nullobj = System.Reflection.Missing.Value;
            var doc = wordApp.Documents.Open(ref path,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj);
            var result = wordApp.ActiveDocument.Content.Text;
            var doc_close = (_Document)doc;
            doc_close.Close();
            return result;
        }
        catch
        {
            return null;
        }
    }
}

public class WordDocument : IRead
{
    public string Read(string file)
    {
        try
        {
            var wordApp = new Application();
            object path = file;
            object nullobj = System.Reflection.Missing.Value;
            var doc = wordApp.Documents.Open(ref path,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj,
                                                  ref nullobj);
            var result = wordApp.ActiveDocument.Content.Text;
            var doc_close = (_Document)doc;
            doc_close.Close();
            return result;
        }
        catch
        {
            return null;
        }
    }
}

public class Factory
{
    public IRead Get(eFileType type)
    {
        IRead read = null;
        switch (type)
        {
            case eFileType.RichTextDocument: read = new RichTextDocument();
                break;
            case eFileType.WordDocument: read = new WordDocument();
                break;
            case eFileType.TextDocument: read = new TextDocument();
                break;
        }
        return read;
    }
}

public class ResumeReader
{
    IRead _read;
    public ResumeReader(IRead read)
    {
        if (read == null) throw new InvalidDataException("read cannot be null");

        _read = read;
    }
    public string Read(string file)
    {
        return _read.Read(file);
    }
}    

отредактировано для исправления подсветки синтаксиса

0 голосов
/ 27 мая 2019

Если кому-то нужно решение для ASP.NET, я нашел это идеальное решение:

Добавьте ссылку на System.Windows.Forms или , загрузите саму DLL и ссылку на нее.

Далее вы можете извлечь текст, создав временную RichTextBox:

RichTextBox box = new RichTextBox();
box.Rtf = File.ReadAllText(Path);
string text = box.Text;
...