как реализовать просмотр RTF файлов (документов) для приложений XBAP распологаемых на виртуальном хостинге?
Если в основу вопроса то задача "имеются документы в формате doc вывести для росмотра"
по событию (для теста нажатие кнопки)загрузка в 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 для просмотра
Заранее спасибо
Здравствуйте, 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>Заранее спасибо
Здравствуйте, 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.
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);
Здравствуйте, 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.
Здравствуйте, 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);
Не уверен, что подскажу решение, но, может и поможет...
Я правильно понимаю, что ваша исходная задача — показывать Word-документы в вашем приложении? И вы решаете ее следующим способом:
— переводите документы в rtf
— показываете rtf через FlowDocument
Если это так, то возможно, стоит посмотреть на Fixed-форматы. А именно, на XPS или PDF. Для первого в WPF есть встроенный reader/viewer, и вполне возможно, он не требует full trast, а для второго, думаю, можно найти готовые компоненты (либо просмотра напрямую, либо, на худой конец — для рендеринга в изображение).
Здравствуйте, Романов Михаил, Вы писали:
РМ>Если это так, то возможно, стоит посмотреть на Fixed-форматы. А именно, на XPS или PDF. Для первого в WPF есть встроенный reader/viewer, и вполне возможно, он не требует full trast, а для второго, думаю, можно найти готовые компоненты (либо просмотра напрямую, либо, на худой конец — для рендеринга в изображение).
Здравствуйте, samun, Вы писали:
S>недостаток данного метода в использовании XpsDocument(String, FileAccess) а мне нужна загрузка с http как в ниже следующем коде
S>
так вот при работе на строке using(var package = Package.Open(fs,FileMode.Open, FileAccess.Read)); система генерирует исключение
{"Невозможно работать с потоком, который не поддерживает поиск."}
не знаю пока что не так ему с потоком ищу как устранить ошибку, может подскажите что не так?
S>так вот при работе на строке using(var package = Package.Open(fs,FileMode.Open, FileAccess.Read)); система генерирует исключение S>{"Невозможно работать с потоком, который не поддерживает поиск."} S>не знаю пока что не так ему с потоком ищу как устранить ошибку, может подскажите что не так?
Ну он же пишет Seek этим потоком не поддерживается, а он по всей видимости нужен. Один из вариантов в этом случае грузить сначала в MemoryStream, а его уже передавать в Package.Open. Или использовать временные файлы. Кстати а вы мой вариант смотрели? Тот который в другой теме с преобразованием OpenXML -> FlowDocument.
Здравствуйте, 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\ "
Ну он же пишет 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\ "
Здравствуйте, 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();
Здравствуйте, Дьяченко Александр, спасибо за ответ,
у меня вышел из строй ПК(ноутбук), как только его исправят (вышел из строя CMOS) обязательно попробую и отпишусь.
ДА> 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."}