Может ли WPF RichTextBox отображать двоичное содержимое изображения? - PullRequest
0 голосов
/ 30 ноября 2011

Я пытаюсь отобразить файл RTF (созданный в устаревшей системе) в новом приложении WPF и столкнулся с некоторыми трудностями. Старый RTF-файл содержит изображение, отформатированное в виде двоичного файла jpegblip, которое при чтении в RichTextBox вызывает следующее исключение:

Unrecognized structure in data format 'Rich Text Format'. Parameter name: stream

Я сократил файл до минимума, чтобы изолировать проблему, и в итоге получил следующую начальную строку (двоичные данные были удалены для этого поста):

{\rtf1{\pict\picw2700\pich2700\picwgoal2700\pichgoal2700\jpegblip\bin9889

Это по-прежнему вызывало исключение, поэтому я преобразовал двоичные данные в шестнадцатеричные и создал новый файл со строкой открытия:

{\rtf1{\pict\picw2700\pich2700\picwgoal2700\pichgoal2700\jpegblip

Файл с шестнадцатеричными данными в нем правильно отображался элементом управления.

Кто-нибудь смог загрузить файл, содержащий двоичные данные изображения, в элемент управления RichTexBox или, если это не удалось, есть ли однозначное утверждение относительно того, что RichTextBox поддерживает из спецификации RTF?

Ответы [ 2 ]

0 голосов
/ 19 октября 2012

Для меня этот код работает нормально.Я даже могу вытащить его из таблицы базы данных.

<RichTextBox Height="100" HorizontalAlignment="Left" Margin="306,30,0,0" Name="rtfMain" VerticalAlignment="Top" Width="200" />


rtfMain.Selection.Load(new FileStream(@"C:\temp\document.rtf", FileMode.Open), DataFormats.Rtf);
0 голосов
/ 30 ноября 2011

Я даже не уверен, что Microsoft знает, что реализует RichTextBox. Их идея RTF плавает вокруг в космосе. См. MS Word, Wordpad, многочисленные устаревшие элементы управления Rich Edit и т. Д.

Здесь есть некоторые комментарии, которые говорят об использовании COM-объектов в вашем .NET-коде, которые несколько предсказуемы, но опять же Microsoft не указывает, какие части спецификации они следуют. Разбитые таблицы в элементе управления RichTextBox (перенос слов) - вы можете использовать их в WPF, если правильно их переносите.

Если вам просто нужно отобразить документ, вы можете спросить, будет ли у всех ваших пользователей Word. Тогда вы сможете встроить средство просмотра документов Word, и до этого, проблема решена. Легко добавить зависимость, если ваше программное обеспечение используется в офисе.

Я бы, наверное, перечитал этот формат, пока не узнал, как он работает. Затем в моей программе я считывал RTF-файл в буфер, собирал необработанные данные объекта, как-то переводил их, заменял эти объекты на обновленные, а затем передавал их элементу управления.

...