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

标签 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>';
}

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

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);

这非常复杂,但很有必要,因为无法判断 PDF 何时加载,也无法判断 el.print() 是否成功。我花了很长时间才弄清楚,但它似乎在 IE7 和 IE8 中运行良好。 IE9 时好时坏,通常在我的本地机器(运行 IIS7.5)上工作,但有时不能。当站点在我的测试服务器上运行时,IE9 从未工作过,它运行 IIS6 是出于必要。我不知道我运行的 IIS 版本是否导致了我的问题,但从 Fiddler 日志来看,我对此表示怀疑。

我一直在仔细研究 Fiddler,在这里和那里进行小的调整,看看是否有什么不同。到目前为止,什么都没有。我能看到的唯一区别是 Server header 。

我发现IE7和IE8需要classid属性;否则,他们会对 PDF 发出多次请求,并且经常加载失败。它还显着改进了 IE9 的缓存行为。

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

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

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

旁注:Firefox 和 Opera 在嵌入 PDF 的页内弹出窗口中使用相同的 HTML。这工作得很好。 (遗憾的是,Adobe Reader NPAPI 插件没有我能够找到的 print() 方法,因此弹出窗口指示用户单击嵌入式 View 的“打印”按钮)

没有什么能阻止我尝试其他嵌入方法,例如 iframe,但是当我第一次尝试它时遇到了一些奇怪的问题(毕竟现在不记得它们是什么了)这个烂摊子)。

我想这就是我现在所知道的关于这个问题的一切......

最佳答案

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

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

关于javascript - 在页面中嵌入 PDF 并打印 - IE9 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8510728/

相关文章:

html - 非标准的 html <comment> 标签做了什么?

javascript - JSONP无响应IE弹出 'Syntax Error'

javascript - 在多个导航元素上高效使用 addEventListener

javascript - FullCalendar - eventMouseover 和 eventMouseout 事件不适用于自定义 View

c# - 服务器响应为 : 5. 7.0 必须先发出 STARTTLS 命令。 i16sm1806350pag.18-gsmtp

c# - 我怎样才能让 OData DELETE 工作?

javascript - 根据 child 和类(class)选择表格项目

javascript - 如何在大型网站中找到引用的 Javascript 方法?

Asp.Net:从类返回读者

javascript - IE 在 sethtml 时丢失自定义标签