首先,有两件事:
问题: 从Web服务接收字节数组,我需要在Internet Explorer 9中显示PDF。 以下代码在Chrome中运行,但在IE9中,我收到的只是一个深灰色面板,其中 PDF很有用。
Ext.define('Ext.ux.form.DocumentFrame', {
extend: 'Ext.container.Container',
alias: 'widget.documentframe',
layout: 'hbox',
initComponent: function () {
var me = this;
var binaryData = me.value.DocumentData;
var source = 'data:application/pdf;base64,' + (binaryData);
Ext.applyIf(me, {
items: [
{
xtype: 'box',
itemId: 'panel-document-frame',
width: 600,
height: 600,
autoEl: {
tag: 'object',
width: '100%',
height: '100%',
type: 'application/pdf',
data: source
}
}
]
});
me.callParent(arguments);
}
});
我只是不明白为什么这在其他浏览器中有效,但在IE9中却没有,特别是在提供存储的PDF文件的路径时没有任何问题(即使在IE9中)。 我这样做是通过设置autoEl的data-parameter,如下所示:
data: 'content/files/Designer.pdf'
注意:通过在IE9中执行此操作,将出现一个MessageBox:“此页面上的Active X Control可能不安全,无法与本页的其他部分交互”。在那一刻,我不在乎这个。
尝试从字节数组中显示PDF时,我是错误的吗?我真的坚持这个,任何帮助都会受到高度赞赏!
提前谢谢!
-edit -
binaryData可能是变量的错误或恼人的名称。据我所知,这是一个字节数组,看起来像:
JVBERi0xLjQNCiXi48 / TDQolDQold1BERjMgYnkgV1BDdWJlZCBHbWJIIFYzLjY1WzQwMjY1MzIxNl0gMzJiaXQgIHVuaWMgDQolDQolDQoxIDAgb2JqDTw8L1R5cGUvTWV0YWRhdGEvU3VidHlwZS9YTUwvTGVuZ3RoIDE0OTIgPj4NCnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu
... ... ...
GQ5N2VlYjczYmVkZjczZWM5Pl0NCi9JbmZvIDIgMCBSDQo + Pg0Kc3RhcnR4cmVmDQo1NTgyDQolJUVPRg0K
毕竟,这是变量source
的完整值:
http://pastie.org/private/upqwjrkfwgmz1hxrx9vha
-edit2 -
答案 0 :(得分:0)
正如Colombo和我之前提到的,IE中的数据uri限制不允许使用PDF。 我认为,我们的方法类似于解决方案,Colombo在他的第二条评论中描述。
在搜索高低之后,阅读大量资源并尝试我能想象的任何东西,解决我的问题的唯一解决方案是将整个逻辑放入ASP.NET控制器(归功于我的同事):
此代码正常运行,但处于“虚拟状态”!
字节数组位于“archiveDocument.Document.DocumentData”
public class PdfController : Controller
{
[HttpGet]
public ActionResult View(Guid id)
{
if (id == Guid.Empty || id == null)
throw new ArgumentException("id null or emtpy", "id");
using (var serviceClient = ServiceClient.GetAuthClient<ArchiveDocumentServiceClient, IArchiveDocumentService>())
{
var archiveDocument = serviceClient.GetById(id);
if (archiveDocument == null)
throw new ApplicationException("ArchiveDocument not found.");
Response.Headers.Remove("Content-Disposition");
Response.Headers.Add("Content-Disposition", "inline; filename=" + archiveDocument.Document.Name);
return File(archiveDocument.Document.DocumentData, "application/pdf");
}
}
}
要将pdf-Document加载到iframe中,只需调用该函数(仍然是伪代码 - &gt;硬编码guid):
xtype: 'box',
width: 600,
height: 900,
autoEl: {
tag: 'iframe',
scrolling: 'no',
seamless: 'seamless',
frameborder: 0,
src: 'Pdf/View/031d2151-5315-4574-aeb5-8154693a928d'
}
我希望,这个解决方案可以帮助其他人。
感谢所有支持我的人!