转换字节[]的PDF文件原始源内存流加载到PDF查看器?(组件)



我正在使用ComponentOne (C1) silverlight PDF查看器控件。它有一个"LoadDocument"方法来接受一个"Stream"。

我正在从我的客户端应用程序进行HTTP get调用以获取PDF文档。在服务器端,该文档通过File.ReadAllBytes()流式传输,然后使用Convert.ToBase64String()转换为base64字符串。这个字符串通过电线发送回我的silverlight应用程序,然后用Convert.FromBase64String(val)将其反向转换回字节数组。然后我用字节数组创建一个MemoryStream,并传递"LoadDocument()"内存流。

查看器没有显示任何内容。它显示了工具栏和滚动条,但内容是空白的,保存按钮是灰色的,这表明没有加载文档。我确信文件通过了,因为客户端上的字节数组大小与服务器端上的字节数组预转换匹配。

下面是我的代码:(考虑到时间/空间,我已经截断了,删除了验证等)

服务端

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标题?

我想做一个实验。

添加一个按钮到你的Xaml和点击使用OpenFileDialog获得FileInfo。从FileInfo使用它的Open方法得到一个流并传递给docViewer.LoadDocument

现在运行它,单击按钮并选择您试图从服务器发送的相同PDF文档。

如果成功,你需要继续调查你的服务器流策略。另一方面,如果你仍然有同样的问题,那么它就不会变得更生了。尝试其他PDF文件,并开始研究PDF组件。您是否曾经成功地使用过它,如果使用过,当前的用法有何不同?

你应该让流指针回到0,所以这应该能达到目的

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

最新更新