Re: WPF XBAP FlowDocumentReader RTF
От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
Дата: 08.02.10 03:04
Оценка: +1
Здравствуйте, samun, Вы писали:

Не уверен, что подскажу решение, но, может и поможет...

Я правильно понимаю, что ваша исходная задача — показывать Word-документы в вашем приложении? И вы решаете ее следующим способом:
— переводите документы в rtf
— показываете rtf через FlowDocument

Если это так, то возможно, стоит посмотреть на Fixed-форматы. А именно, на XPS или PDF. Для первого в WPF есть встроенный reader/viewer, и вполне возможно, он не требует full trast, а для второго, думаю, можно найти готовые компоненты (либо просмотра напрямую, либо, на худой конец — для рендеринга в изображение).
WPF XBAP FlowDocumentReader RTF
От: samun  
Дата: 05.02.10 00:10
Оценка:
как реализовать просмотр RTF файлов (документов) для приложений XBAP распологаемых на виртуальном хостинге?
Если в основу вопроса то задача "имеются документы в формате doc вывести для росмотра"

<FlowDocumentReader Grid.Column="1" Margin="5,6,6,56.25" Name="flowdocumentreader1" BorderBrush="Black" BorderThickness="2">
<FlowDocument>
</FlowDocument>
</FlowDocumentReader>

по событию (для теста нажатие кнопки)загрузка в flowdocumentreader1
TextRange range = new TextRange(flowdocumentreader1.Document.ContentStart, flowdocumentreader1.Document.ContentEnd);
FileStream fs = File.Open(@"c:\1.rtf", FileMode.Open);
range.Load(fs, DataFormats.Rtf);

Работаюший пример из книжки.

как реализовать подобное для XBAP? т.к.
1) для FileStream нужен более высокий уровень доверия нежили интернет
2) и при разворачивании на виртуальном хостинге как решить проблему с размещение файлов RTF для просмотра
Заранее спасибо
wpf xbap flowdocumentreader rtf
Re: WPF XBAP FlowDocumentReader RTF
От: anton_t Россия  
Дата: 05.02.10 09:52
Оценка:
Здравствуйте, samun, Вы писали:

S>как реализовать просмотр RTF файлов (документов) для приложений XBAP распологаемых на виртуальном хостинге?

S>Если в основу вопроса то задача "имеются документы в формате doc вывести для росмотра"

S><FlowDocumentReader Grid.Column="1" Margin="5,6,6,56.25" Name="flowdocumentreader1" BorderBrush="Black" BorderThickness="2">

S> <FlowDocument>
S> </FlowDocument>
S> </FlowDocumentReader>

S>по событию (для теста нажатие кнопки)загрузка в flowdocumentreader1

S>TextRange range = new TextRange(flowdocumentreader1.Document.ContentStart, flowdocumentreader1.Document.ContentEnd);
S>FileStream fs = File.Open(@"c:\1.rtf", FileMode.Open);
S>range.Load(fs, DataFormats.Rtf);

S>Работаюший пример из книжки.


S>как реализовать подобное для XBAP? т.к.

S>1) для FileStream нужен более высокий уровень доверия нежили интернет

Если мне не изменяет память, для просмотра rtf механизмами wpf тоже нужен full trust.

S>2) и при разворачивании на виртуальном хостинге как решить проблему с размещение файлов RTF для просмотра


если решишь проблемы с full trust — сделать эти документы доступными по http c твоего хостинга и грузить их через WebRequest.

S>Заранее спасибо
Re[2]: WPF XBAP FlowDocumentReader RTF
От: samun  
Дата: 05.02.10 21:36
Оценка:
Здравствуйте, anton_t, Вы писали:

_>Если мне не изменяет память, для просмотра rtf механизмами wpf тоже нужен full trust.

_>если решишь проблемы с full trust — сделать эти документы доступными по http c твоего хостинга и грузить их через WebRequest.

Большое спасибо за ответ,
1. Правильно ли я понял что для решении проблемы с full trust предлагаете этот способ (если можно его так назвать)http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/05/wpf-xbap-as-full-trust-application.aspx, если есть другие механизмы я их изучу. (если дадите подсказку сильно облегчите мне работу)
2. Может порекомендуете другие способы отобразить на экране информацию из файла в формате rtf, (Word 2007 позволяет сохранять и в других форматах, при последующей поддержке сайта, наверно будет не сложно добавить документ выполнив предварительное сохранение в другом формате) так чтобы "приложенее" не требовало full trust.
Re[2]: WPF XBAP FlowDocumentReader RTF
От: samun  
Дата: 05.02.10 22:03
Оценка:
3. сделать эти документы доступными по http c твоего хостинга и грузить их через WebRequest.
Правильно ли я понял что реализовать вот так:
string url = "http://*****.ru/1.rtf"; // URL документа
// создаем запрос
WebRequest request = FileWebRequest.Create(url);
Stream fs = request.GetResponse().GetResponseStream();
range.Load(fs, DataFormats.Rtf);
Re[3]: WPF XBAP FlowDocumentReader RTF
От: anton_t Россия  
Дата: 07.02.10 09:30
Оценка:
Здравствуйте, samun, Вы писали:

S>Здравствуйте, anton_t, Вы писали:


_>>Если мне не изменяет память, для просмотра rtf механизмами wpf тоже нужен full trust.

_>>если решишь проблемы с full trust — сделать эти документы доступными по http c твоего хостинга и грузить их через WebRequest.

S>Большое спасибо за ответ,

S>1. Правильно ли я понял что для решении проблемы с full trust предлагаете этот способ (если можно его так назвать)http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/05/wpf-xbap-as-full-trust-application.aspx, если есть другие механизмы я их изучу. (если дадите подсказку сильно облегчите мне работу)

Да, этот способ, других я не знаю.

S>2. Может порекомендуете другие способы отобразить на экране информацию из файла в формате rtf, (Word 2007 позволяет сохранять и в других форматах, при последующей поддержке сайта, наверно будет не сложно добавить документ выполнив предварительное сохранение в другом формате) так чтобы "приложенее" не требовало full trust.
Re[3]: WPF XBAP FlowDocumentReader RTF
От: anton_t Россия  
Дата: 07.02.10 09:31
Оценка:
Здравствуйте, samun, Вы писали:

S>3. сделать эти документы доступными по http c твоего хостинга и грузить их через WebRequest.

S>Правильно ли я понял что реализовать вот так:
S> string url = "http://*****.ru/1.rtf"; // URL документа
S> // создаем запрос
S> WebRequest request = FileWebRequest.Create(url);
S> Stream fs = request.GetResponse().GetResponseStream();
S> range.Load(fs, DataFormats.Rtf);

Да.
Re[2]: WPF XBAP FlowDocumentReader RTF
От: samun  
Дата: 08.02.10 17:39
Оценка:
Здравствуйте, Романов Михаил, Вы писали:

РМ>Если это так, то возможно, стоит посмотреть на Fixed-форматы. А именно, на XPS или PDF. Для первого в WPF есть встроенный reader/viewer, и вполне возможно, он не требует full trast, а для второго, думаю, можно найти готовые компоненты (либо просмотра напрямую, либо, на худой конец — для рендеринга в изображение).


И Ваша подсказка помогла и вот что есть в MSDN "Пример использования DocumentViewer в Internet Explorer" "http://msdn.microsoft.com/ru-ru/library/aa972159.aspx"


string FileName; //-путь к файлу на жестком диске
XpsDocument _xpsDocument = new XpsDocument(FileName, System.IO.FileAccess.Read);
DocumentViewer docViewer.Document = _xpsDocument.GetFixedDocumentSequence();


недостаток данного метода в использовании XpsDocument(String, FileAccess) а мне нужна загрузка с http как в ниже следующем коде

string url = "http://*****.ru/1.rtf"; // URL документа
// создаем запрос
WebRequest request = FileWebRequest.Create(url);
Stream fs = request.GetResponse().GetResponseStream();


а перегрузки XpsDocument для использовании в качестве атрибута Stream нет
Уважаемые Гуру может дадите еще подсказку?
Re[3]: WPF XBAP FlowDocumentReader RTF
От: Дьяченко Александр Россия  
Дата: 09.02.10 17:29
Оценка:
Здравствуйте, samun, Вы писали:

S>недостаток данного метода в использовании XpsDocument(String, FileAccess) а мне нужна загрузка с http как в ниже следующем коде


S>
S>string url = "http://*****.ru/1.rtf"; // URL документа
S>// создаем запрос
S>WebRequest request = FileWebRequest.Create(url);
S>Stream fs = request.GetResponse().GetResponseStream();
S>


S>а перегрузки XpsDocument для использовании в качестве атрибута Stream нет

S>Уважаемые Гуру может дадите еще подсказку?

по пробуй что-то типа следующего:
Stream fs = ...; // из твоего примера

using(var package = Package.Open(fs, FileMode.Open, FileAccess.Read))
using(var doc = new XpsDocument(package ))
{
    // Ну и дальше испльзовть doc по назначению
}
... << RSDN@Home 1.2.0 alpha 4 rev. 1436>>
Re[4]: WPF XBAP FlowDocumentReader RTF
От: samun  
Дата: 10.02.10 19:49
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:
using(var package = Package.Open(fs, FileMode.Open, FileAccess.Read))
using(var doc = new XpsDocument(package ))
{
   // Ну и дальше испльзовть doc по назначению
}


ну как бы вот

 string url = "http://****/1.rtf"; // URL изображения
 WebRequest request = FileWebRequest.Create(url);
 Stream fs = request.GetResponse().GetResponseStream();
 using(var package = Package.Open(fs,FileMode.Open, FileAccess.Read));
 using (var doc = new XpsDocument(package))
 {
    documentViewer1.Document = doc.GetFixedDocumentSequence();
 }


так вот при работе на строке using(var package = Package.Open(fs,FileMode.Open, FileAccess.Read)); система генерирует исключение
{"Невозможно работать с потоком, который не поддерживает поиск."}
не знаю пока что не так ему с потоком ищу как устранить ошибку, может подскажите что не так?
Re[5]: WPF XBAP FlowDocumentReader RTF
От: Gremlin2 http://www.fb2library.net/
Дата: 10.02.10 20:32
Оценка:
Здравствуйте, samun, Вы писали:

S>ну как бы вот


S>
S> string url = "http://****/1.rtf"; // URL изображения
S> WebRequest request = FileWebRequest.Create(url);
S> Stream fs = request.GetResponse().GetResponseStream();
S> using(var package = Package.Open(fs,FileMode.Open, FileAccess.Read));
S> using (var doc = new XpsDocument(package))
S> {
S>    documentViewer1.Document = doc.GetFixedDocumentSequence();
S> }

S>


S>так вот при работе на строке using(var package = Package.Open(fs,FileMode.Open, FileAccess.Read)); система генерирует исключение

S>{"Невозможно работать с потоком, который не поддерживает поиск."}
S>не знаю пока что не так ему с потоком ищу как устранить ошибку, может подскажите что не так?

Ну он же пишет Seek этим потоком не поддерживается, а он по всей видимости нужен. Один из вариантов в этом случае грузить сначала в MemoryStream, а его уже передавать в Package.Open. Или использовать временные файлы. Кстати а вы мой вариант смотрели? Тот который в другой теме с преобразованием OpenXML -> FlowDocument.
Re[6]: WPF XBAP FlowDocumentReader RTF
От: samun  
Дата: 10.02.10 21:21
Оценка:
Здравствуйте, Gremlin2, Вы писали:

G>Ну он же пишет Seek этим потоком не поддерживается, а он по всей видимости нужен. Один из вариантов в этом случае грузить сначала в MemoryStream, а его уже передавать в Package.Open. Или использовать временные файлы. Кстати а вы мой вариант смотрели? Тот который в другой теме с преобразованием OpenXML -> FlowDocument.

1 Ваш вариант попробую обязательно когда разберусь в нем !
2. Вот другой вариант но он тоже требует высокого уровня доверия

  string url = @"http://innovation.studenthost.ru/data/1.xps";
  string FileName; //-путь к файлу на жестком диске
  FileName = @"1.xps";
  WebClient client = new WebClient();
  client.DownloadFile(url, FileName);
  XpsDocument _xpsDocument = new XpsDocument(FileName, System.IO.FileAccess.Read);
  documentViewer1.Document = _xpsDocument.GetFixedDocumentSequence();


тут есть еще один мой просчет: путь для сохранения файла 1.xps (как я понял пытается писать в "C:\WINDOWS\system32\1.xps" )
а я почемуто ожидал что папка по умолчанию будет друго (как для обычных приложений откуда было запущенно ) где нить в
"C:\Documents and Settings\я\Local Settings\Apps\2.0\ "
Re[6]: WPF XBAP FlowDocumentReader RTF
От: samun  
Дата: 10.02.10 21:24
Оценка:
Здравствуйте, Gremlin2, Вы писали:

Ну он же пишет Seek этим потоком не поддерживается, а он по всей видимости нужен. Один из вариантов в этом случае грузить сначала в MemoryStream, а его уже передавать в Package.Open. Или использовать временные файлы. Кстати а вы мой вариант смотрели? Тот который в другой теме с преобразованием OpenXML -> FlowDocument.

1 Ваш вариант попробую обязательно когда разберусь в нем !
2. Вот другой вариант, но он тоже требует высокого уровня доверия ))))

  string url = @"http://*****/data/1.xps";
  string FileName; //-путь к файлу на жестком диске
  FileName = @"1.xps";
  WebClient client = new WebClient();
  client.DownloadFile(url, FileName);
  XpsDocument _xpsDocument = new XpsDocument(FileName, System.IO.FileAccess.Read);
  documentViewer1.Document = _xpsDocument.GetFixedDocumentSequence();


тут есть еще один мой просчет: путь для сохранения файла 1.xps (как я понял пытается писать в "C:\WINDOWS\system32\1.xps" )
а я почемуто ожидал что папка по умолчанию будет друго (как для обычных приложений откуда было запущенно ) где нить в
"C:\Documents and Settings\я\Local Settings\Apps\2.0\ "
Re[2]: WPF XBAP FlowDocumentReader RTF
От: samun  
Дата: 12.02.10 13:15
Оценка:
Уважаемые Гуру может дадите еще подсказку?
Re[7]: WPF XBAP FlowDocumentReader RTF
От: Дьяченко Александр Россия  
Дата: 14.02.10 06:47
Оценка:
Здравствуйте, samun, Вы писали:

S>Здравствуйте, Gremlin2, Вы писали:


S>Ну он же пишет Seek этим потоком не поддерживается, а он по всей видимости нужен. Один из вариантов в этом случае грузить сначала в MemoryStream, а его уже передавать в Package.Open. Или использовать временные файлы. Кстати а вы мой вариант смотрели? Тот который в другой теме с преобразованием OpenXML -> FlowDocument.


Ну попробуй вот так:

  var url     = @"http://*****/data/1.xps";
  var client  = new WebClient();
  var data    = client.DownloadData(url);
  var stream  = new MemoryStream(data);
  var package = Package.Open(stream, FileMode.Open, FileAccess.Read);
  var doc     = new XpsDocument(package);

  documentViewer1.Document = doc.GetFixedDocumentSequence();
... << RSDN@Home 1.2.0 alpha 4 rev. 1436>>
Re[8]: WPF XBAP FlowDocumentReader RTF
От: samun  
Дата: 17.02.10 14:16
Оценка:
Здравствуйте, Дьяченко Александр, спасибо за ответ,
у меня вышел из строй ПК(ноутбук), как только его исправят (вышел из строя CMOS) обязательно попробую и отпишусь.
Re[8]: WPF XBAP FlowDocumentReader RTF
От: samun  
Дата: 28.02.10 17:58
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

ДА>
ДА>  var url     = @"http://*****/data/1.xps";
ДА>  var client  = new WebClient();
ДА>  var data    = client.DownloadData(url);
ДА>  var stream  = new MemoryStream(data);
ДА>  var package = Package.Open(stream, FileMode.Open, FileAccess.Read);
ДА>  var doc     = new XpsDocument(package);

ДА>  documentViewer1.Document = doc.GetFixedDocumentSequence();
ДА>


1. В разделе Свойства проекта -> Безопасность, запустил "Вычислить разрешение".
Ответ VS 2008: "Для правильной работы приложения требуется полное доверие".

2. И даже если установить для проекта "Это приложение с полным доверием" то для строки кода documentViewer1.Document = doc.GetFixedDocumentSequence(); компилятор ругается" {"Идентификатор XpsDocument URI не определен. Воспользуйтесь конструктором XpsDocument, который принимает параметр URI."}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.