Преобразование байта [] исходного источника файла PDF в MemoryStream для загрузки в программу просмотра PDF?(компонент один) - PullRequest
1 голос
/ 02 августа 2011

Я работаю с элементом управления просмотра PDF-файлов ComponentOne (C1) silverlight.У него есть метод «LoadDocument», который принимает «Поток».

Я делаю HTTP-вызов из моего клиентского приложения, чтобы получить PDF-документ.Этот документ на стороне сервера был передан через File.ReadAllBytes (), а затем преобразован в строку base64 с помощью Convert.ToBase64String ().Эта строка отправляется по проводу обратно в мое приложение silverlight, где она затем обратно конвертируется обратно в байтовый массив с Convert.FromBase64String (val).Затем я создаю MemoryStream с этим байтовым массивом и передаю «LoadDocument ()» этот поток памяти.

Зритель ничего не рендерит.На ней отображаются панель инструментов и полосы прокрутки, но содержимое пустое, а кнопка сохранения недоступна, что указывает на то, что документ не загружен.Я точно знаю, что файл прошел через это, потому что размер байтового массива на клиенте соответствует предварительному преобразованию байтового массива на стороне сервера.

Вот мой код: (в интересах времени / пространства, я 'VE усеченный, удаление проверки и т. д.)

SERVERSIDE

string sendingToClient = Convert.ToBase64String(File.ReadAllBytes(filePath))

CLIENTSIDE

byte[] image = null;
image = Convert.FromBase64String(stringFromServerCall);
MemoryStream stream = new MemoryStream(image);
docViewer.LoadDocument(stream);

edit В качестве возможного обходного пути я попытался сохранить файл в изолированном хранилище с расширением «.pdf».Затем я использую IsolatedStorageFileStream для отправки в LoadDocument ().Я столкнулся с фактической ошибкой, теперь она говорит: «Исключение PdfParserException было обработано кодом пользователя: неверный формат файла (отсутствует заголовок pdf)» *

Может кто-нибудь пролить свет на этот заголовок PDF?

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Вот эксперимент, который я бы провел.

Добавьте кнопку в свой Xaml и нажмите OpenFileDialog, чтобы получить FileInfo.Из этого FileInfo используйте метод Open, чтобы получить поток и передать его в docViewer.LoadDocument.

. Теперь запустите его, нажмите кнопку и выберите тот же PDF-документ, который вы пытаетесь отправить с сервера..

Если это удастся, вам нужно продолжить изучение стратегии потоковой передачи вашего сервера.С другой стороны, если у вас все еще есть та же самая проблема, хорошо, это не становится более сырым чем это.Попробуйте другие файлы PDF и начните исследовать компонент PDF.Вы когда-нибудь использовали его успешно, если да, то чем отличается это текущее использование?

0 голосов
/ 02 августа 2011

вы должны вернуть указатель потока на 0, так что это должно сработать

byte[] image = null;
image = Convert.FromBase64String(stringFromServerCall);
MemoryStream stream = new MemoryStream(image);
stream.Position = 0;
docViewer.LoadDocument(stream);
...