在页面和打印中嵌入PDF - IE9问题

时间:2011-12-14 19:49:59

标签: javascript asp.net internet-explorer iis pdf

我有一些代码可以通过将容器的innerHTML设置为此函数的返回字符串来动态地将PDF文档加载到网页中:

function getPdfString(url) {
    return '<object data="' + url + '" type="application/pdf" classid="clsid:ca8a9780-280d-11cf-a24d-444553540000" style="width:100%;height:600px"></object>';
}

在安装了Adobe Reader插件的IE中(由在PDFObject检测Adobe ActiveX的代码确定),我的代码将此HTML插入隐藏容器,将对象元素的引用放入{{ 1}},然后运行此代码(Repeater是一个自定义类):

el

这是非常复杂的,但是必要的,因为无法判断加载PDF的时间,也不知道log("** start repeater **"); var r = _repeater = new Repeater(function() { try { var delta = timeInterval(); log("iteration - " + delta + "ms"); el.gotoFirstPage(); //throws exceptions until the PDF is loaded log("** assuming success, stop **"); r.stop(); r = undefined; setTimeout(function() { el.print(); //should succeed, can't tell because it doesn't throw or return anything }, 100); } catch(e) { } }, 0, 100); 是否成功。我花了很长时间才弄明白,但它似乎在IE7和IE8中运行良好。 IE9已经被击中和失败,通常在我的本地机器上运行(运行IIS7.5),但有时不行。当网站在我的测试服务器上运行时,IE9从未运行过,因为测试服务器运行IIS6是必要的。我不知道我运行的IIS版本是否会导致我的问题,但从Fiddler日志来看,我对此表示怀疑。

我一直在仔细研究Fiddler,在这里和那里做一些小调整,看看是否有什么不同。到目前为止,什么都没有。我能看到的唯一区别是el.print()标题。

我发现IE7和IE8需要Server属性;否则,他们会对PDF发出多个请求,并且通常无法加载它。它还显着改善了IE9的缓存行为。

每次获取PDF时,PDF略有不同。我目前没有将它保存到临时文件或任何内容,但如果绝对必要的话我可以(因此我可以在后续请求中重新发送相同的PDF)。

响应是gzip编码的,但无论是否启用,我都有同样的问题。

我注意到问题发生时,终止AcroRd32.exe有时会暂时解决问题。

附注:Firefox和Opera在嵌入PDF的页内弹出窗口中使用相同的HTML。这完全没问题。 (遗憾的是,Adobe Reader NPAPI插件上没有我能找到的print()方法,因此弹出窗口指示用户单击嵌入视图的“打印”按钮)

没有什么能阻止我尝试其他嵌入方法,例如classid,但是当我第一次尝试它时,我遇到了一些奇怪的问题(不记得它们现在是什么,在所有这些混乱之后)

我认为这就是我现在对这个问题所知的一切......

1 个答案:

答案 0 :(得分:1)

这似乎是Adobe Reader和IE插件的一个问题。我发现了一些论坛帖子,表明这是一个常见的,可重现的错误(http://forums.adobe.com/thread/758489)。

解决方案似乎是在<object> / <embed>代码上使用iFrame。