Я бы не сказал, что реализация подключаемого асинхронного протокола - это взлом. Это стандартный подход в Windows для реализации нового протокола, который IE сможет использовать. Регистрация обработчика протокола требует тщательной настройки.
Но самый простой / легкий способ - это фактически использовать временный файл и просто ссылаться на него из вашего html. Это не проблема, если вы позаботитесь о том, чтобы использовать соответствующие функции .NET, чтобы гарантировать, что ваш код не делает предположений о путях к папкам / файлам и т. Д.
- Используйте GetTempPath () , чтобы получить временную папку.
- Создайте файл pdf во временной папке с уникальным именем, используя Guid.NewGuid ()
- Запишите двоичные данные PDF в файл.
- Обновите атрибут hreml elements href или src, указав полный путь к временному файлу.
- Загрузите HTML-код в элемент управления WebBrowser.
- Удалить временный файл PDF, когда он больше не нужен.
Другой возможный подход заключается в том, чтобы Base64 кодировал ваши двоичные данные и сохранял их внутри элемента DIV / Input. Затем добавьте элемент управления ActiveX или какой-либо другой компонент на стороне клиента на страницу html, который знает, как искать данные Base64 и может преобразовать их обратно в двоичный поток (и отобразить в виде PDF). Однако я не знаю о контроле сторонней организации, который делает это.