【问题标题】:How to find out when PDF is loaded via embed tag如何找出通过嵌入标签加载 PDF 的时间
【发布时间】:2017-02-13 18:53:38
【问题描述】:

我正在尝试使用嵌入标签显示 PDF。 PDF 是从 .NET 中的 HTTPHandler 加载的。

PDF 的显示工作正常,但我想知道文件何时完成加载和显示,以便运行 JavaScript 函数。

我已经尝试在事件处理程序中绑定 onloadeddata、onload、onloadstart、onended 和 onplay,但它们都没有被命中。

我想做的事可能吗?如果是这样,我可以捕捉到什么事件?

<embed src=@virtualPath  id="pdfiFrame" type="application/pdf" alt="pdf"  style="width: 100%; height: 99.4%;" frameborder="0" pluginspage="http://www.adobe.com/products/acrobat/readstep2.html" onloadeddata='tryThis;' onload="tryThis;" onloadstart="tryThis;", onended="tryThis;" onplay="tryThis;"/>

function tryThis(arg) {
    alert("here = " + arg);
}

路径在 MVC Razor 视图中的变量中定义。

从处理程序本身做任何事情都不是一个选项,因为我也在缓存结果,所以处理程序不会被第二次命中同一个文件。

【问题讨论】:

    标签: javascript html pdf httphandler


    【解决方案1】:

    整个 PDF 文件可能永远无法完全加载...尤其是如果 PDF 查看器是 Adob​​e Reader,但任何能够利用“快速 Web 视图”的 PDF 查看器也是如此。 PDF 文件是随机访问的,符合标准的查看器只会从服务器请求显示请求页面所需的字节。这就是为什么您可以在浏览器中打开 PDF,例如,立即跳转到 1000 页文档的第 500 页,而无需等待整个文件下载完毕。 Web 优化 PDF 是专门为做你想做的事情而设计的。

    也就是说,您可以尝试不在 HTML 中设置 embed 元素的 src 属性,而是使用 AJAX(或其他东西)将 PDF 作为 blob 获取,然后在“done”事件触发后设置 src 属性。然后你就会知道你有整个文件之前它甚至开始显示。

    【讨论】:

    • 您提出了一个有趣的观点,即不一定要加载整个内容。我真正想做的是在页面上放置一个模态进度指示器,直到文档准备好供查看。这并不一定意味着整个事情都在那里,只是第一页是可见的。关于如何做这部分的任何想法?
    • Adobe Reader 可以做到这一点,但除非它是网络优化的,而且现在它成为默认 PDF 查看器的可能性非常低,否则它几乎是在猜测。您将遇到的问题是典型的 PDF 查看器不知道任何给定页面需要文件中的哪些字节。这些对象是随机访问的,一个页面对象可以指代任何数量的其他对象,这些对象可能是该页面共享的或唯一的。查看者在读取一个对象时才发现它引用了另一组对象。
    • 旧线程,但是嘿,如果有人正在寻找这个,作为一种解决方法,我只是使用 css 将嵌入元素放在我的加载图标上,这样加载图标将可见,直到加载 pdf 并且在实际加载图标上方。
    猜你喜欢
    • 2020-03-20
    • 2010-09-28
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2014-06-14
    • 2013-09-12
    • 1970-01-01
    相关资源
    最近更新 更多