#c_sharp #winforms
Подскажите как в richTextBox отобразить содержимое файлов с расширением doc и docx ? С txt файлами всё нормально, а при открытии doc вылазят кракозябры, типо PK. Задача состоит в том, что есть задание написать программу для ведения своего дневника. Соответственно нужно сделать, чтобы была возможность открывать уже сохранённые записи со всем содержимым:форматированием текста, картинками и тд. Выводить всё это содержимое хочу, соответственно, в richTextBox. private void открытьToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog o = new OpenFileDialog(); o.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*|*.doc|"; if (o.ShowDialog() == DialogResult.OK) { richTextBox1.Text = File.ReadAllText(o.FileName, Encoding.Default); } }
Ответы
Ответ 1
С учетом уточнения решаемой задачи, могу посоветовать просто работать с родным для RichTextBox RTF-форматом. Примеров создания форматированного текста достаточно и в MSDN, и тут, и в сети в принципе. Word и LibreOffice умеют открывать и сохранять RTF, так что ваши файлы будут открываться не только в вашей программе. Когда сможете реализовать это, можно начать адаптировать под современные форматы документов, если будет время и желание.Ответ 2
Дайте себе труд хотя бы попробовать поискать на английском: load word file (.docx) in richtextbox Копирую оттуда код: if (openFile.ShowDialog() == true) { // Open document string originalfilename = System.IO.Path.GetFullPath(openFile.FileName); if (openFile.CheckFileExists && new[] { ".docx", ".doc", ".txt", ".rtf" }.Contains(Path.GetExtension(originalfilename).ToLower())) { Microsoft.Office.Interop.Word.Application wordObject = new Microsoft.Office.Interop.Word.Application(); object File = originalfilename; object nullobject = System.Reflection.Missing.Value; Microsoft.Office.Interop.Word.Application wordobject = new Microsoft.Office.Interop.Word.Application(); wordobject.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone; Microsoft.Office.Interop.Word._Document docs = wordObject.Documents.Open(ref File, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject); docs.ActiveWindow.Selection.WholeStory(); docs.ActiveWindow.Selection.Copy(); rtfMain.Document.Paste(); docs.Close(ref nullobject, ref nullobject, ref nullobject); wordobject.Quit(ref nullobject, ref nullobject, ref nullobject); MessageBox.Show("file loaded"); } } Может быть это и не будет идеальный результат, который вас полностью устроит, но с ним ваш вопрос не будет таким поверхностным.Ответ 3
Как уже выше писали, необходима конвертация в формат RTF. DOC - Бинарный формат, с весьма сложной структурой. Библиотеки, не требующие офиса для работы с ним, продают за большие деньги. Есть пара бесплатных. ОДна опенсорс - порт с джавовской либы POI. Вторая Spire DOC, имеет кучу ограничений на количество обрабатываемого текста. DOCX - Архив с набором XML-файлов. Есть библиотека от майкрософт OpenXML, которая отлично справляется с docx файлами. Но она немного сложновата для освоения и чаще всего используют оболочку над ней - ClosedXML. Обе библиотеки бесплатные и не требуют установленного офиса. Или можно использовать кучу других бесплатных библиотек для работы с docx. Все они легко ставятся через nuget. COM Interop, описанный выше, идеально подходит, если стоит офис. Он "из коробки" поддерживает все форматы и прекрасно конвертирует. Если же офис может отсутствовать, то я бы посоветовал использовать или POI или связку POI/OpenXML. И надо помнить, что RTF сильно отличается от DOC/DOCX, и результат может отличаться от того, что вы видите MS Word. Потому, если цель - просмотр документов, я бы посоветовал конвертацию в HTML.
Комментариев нет:
Отправить комментарий