Как получить элемент управления C # Winforms Webbrowser для отображения содержимого PDF, встроенного в html-файл, в виде двоичного содержимого? - PullRequest
2 голосов
/ 13 апреля 2010

Я использую веб-браузер Winforms для отображения содержимого HTML, хранящегося в моей таблице БД SQL. Тем не менее, некоторые из моих материалов представляют собой PDF-файлы, которые я намереваюсь хранить в виде двоичных данных в базе данных SQL и передавать в элемент управления Webbrowser. Я хочу избежать хлопот хранения двоичного содержимого во временном файле на клиентском компьютере, а затем создать HTML-код контейнера для ссылки на этот временный PDF-файл. Есть ли способ, с помощью которого я могу встраивать двоичный контент PDF непосредственно в html и показывать этот html непосредственно в элементе управления webbrowser?

Я обнаружил, что эти предыдущие темы ссылались на взлом COM. Есть ли более простой способ? Спасибо! Как получить элемент управления C # WebBrowser для отображения файлов JPEG (raw)?

Спасибо, Uniball

1 Ответ

2 голосов
/ 13 апреля 2010

Я бы не сказал, что реализация подключаемого асинхронного протокола - это взлом. Это стандартный подход в Windows для реализации нового протокола, который IE сможет использовать. Регистрация обработчика протокола требует тщательной настройки.

Но самый простой / легкий способ - это фактически использовать временный файл и просто ссылаться на него из вашего html. Это не проблема, если вы позаботитесь о том, чтобы использовать соответствующие функции .NET, чтобы гарантировать, что ваш код не делает предположений о путях к папкам / файлам и т. Д.

  1. Используйте GetTempPath () , чтобы получить временную папку.
  2. Создайте файл pdf во временной папке с уникальным именем, используя Guid.NewGuid ()
  3. Запишите двоичные данные PDF в файл.
  4. Обновите атрибут hreml elements href или src, указав полный путь к временному файлу.
  5. Загрузите HTML-код в элемент управления WebBrowser.
  6. Удалить временный файл PDF, когда он больше не нужен.

Другой возможный подход заключается в том, чтобы Base64 кодировал ваши двоичные данные и сохранял их внутри элемента DIV / Input. Затем добавьте элемент управления ActiveX или какой-либо другой компонент на стороне клиента на страницу html, который знает, как искать данные Base64 и может преобразовать их обратно в двоичный поток (и отобразить в виде PDF). Однако я не знаю о контроле сторонней организации, который делает это.

...