【问题标题】:How could I make WebBrowser.Navigate analog for bytes array, instead of URL?如何使 WebBrowser.Navigate 模拟字节数组,而不是 URL?
【发布时间】:2013-09-21 13:13:36
【问题描述】:

我打算将 PDF 文件加载到其中,但我无法将它们保存到磁盘。 PDF 在我的程序中仅作为字节数组存在。

对于文本数据,我可以使用如下内容:

webBrowser1.DocumentText = "<html>page content</html>";

但是PDF不是文本,所以我需要一些其他的方法,但找不到。

我试过这个:

byte[] file_content = File.ReadAllBytes("C:\\Users\\Metafalica\\Documents\\DatabaseSQLLanguageRzheutskaya.pdf");
MemoryStream ms = new MemoryStream(file_content);
ms.Flush();
ms.Position = 0;
webBrowser1.DocumentStream = ms;

但是得到这个:

【问题讨论】:

  • 你试过webBrowser1.DocumentStream属性吗?
  • 由于未知原因,它不会以这种方式加载 PDF。它通过 Adob​​e / Foxit 插件将它们作为文本加载,但不作为 PDF 加载

标签: c# load browser bytearray document


【解决方案1】:

无法通过webBrowser.DocumentStream 加载和呈现 PDF。幕后发生的事情是MSHTML Document Object 的实例被创建并使用提供的流进行初始化。您可以加载图像(MSHTML 可以识别 MIME 类型),但不能加载 PDF。另一方面,当使用webBrowser.Navigate 时,会创建一个 Adob​​e Acrobat Reader PDF 文档实例,而不是 MSHTML。

【讨论】:

  • 是否可以重写 Navigate 方法以从字节数组加载?我不知道导航后会发生什么,但这应该很简单......只需在某处替换文件读取代码,但在哪里? :(
  • 据我所知,唯一的方法是实现一个custom pluggable protocol handler,这非常重要,仍然需要一个自定义 URL,比如mypdf://&lt;unique-stream-id&gt;。您最好直接托管 Acrobat Reader ActiveX 控件 (AcroPDF.dll) 而不是 WebBrowser。 IIRC,它支持IPersistStream,所以你应该能够在没有 URL 的情况下加载它。
  • 也许我会这样做。谢谢。
  • 根据您的目标,也许您可​​以将您的 PDF 字节保存到一个临时文件并导航到 WebBrowser 到它?
  • 很遗憾,不,整个目的都是为了防止文件被复制。它以加密字节内置程序的形式存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 2012-02-12
  • 2012-05-20
  • 1970-01-01
相关资源
最近更新 更多