jbk*_*kly 11 javascript printing pdf google-chrome dom-events
我们有一个AngularJS Web应用程序,可以从服务器加载PDF文档,并在页面中显示如下:
<object id="preview" type="application/pdf" data="blob:{fileUrl}">
每当用户执行某些操作时,我们都会有新的审核要求:
PDF下载和打印控件位于浏览器PDF查看器中.我们只需支持最新的Google Chrome(截至2018年7月的Chrome 68).
是否可以检测从PDF查看器下载或打印文件的时间?我没有看到任何前印刷/后印刷事件,我认为因为它是交叉原点.我们不需要控制处理程序,只是以某种方式检测事件.
不幸的是,您无法将任何脚本附加到 PDF 窗口,因为它来自 MIME 类型"application/pdf"。
如果您在 Chrome 浏览器中加载一些 PDF,然后查看开发人员控制台,您将看到如下代码:
<embed width="100%" height="100%" name="plugin" id="plugin"
src="your-pdf-path.pdf" type="application/pdf" internalinstanceid="7">
Run Code Online (Sandbox Code Playgroud)
我尝试将一些脚本添加到 PDF 窗口中,如下所示:
<style type="text/css">html,body{height:100%;margin:0}</style>
<iframe id="iframe1" src="your-pdf-path.pdf" frameborder="0"
style="display:block;width:100%;height:100%"></iframe>
<script type="text/javascript">
var ifrDoc = document.getElementById('iframe1').contentWindow.document;
var script = ifrDoc.createElement('script');
script.type = 'text/javascript';
script.innerText = 'alert(1)';
//OR: script.src = 'your-js-file-path.js'
ifrDoc.getElementsByTagName('head')[0].appendChild(script);
</script>
Run Code Online (Sandbox Code Playgroud)
但它什么也不做,因为 MIME 类型是"application/pdf".
您只能检测 HTML 文档的打印事件,如下所示:
function beforePrint(){alert('before print')}
function afterPrint(){alert('after print')}
if(window.onafterprint !== void 0)
{
window.onbeforeprint = beforePrint;
window.onafterprint = afterPrint;
}
else if(window.matchMedia)
{
var mediaQueryList = window.matchMedia('print');
mediaQueryList.addListener(function(mql)
{
if(mql.matches)
beforePrint();
else afterPrint()
});
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息及其用途,您可以阅读这篇文章。
也许你可以使用这段代码,但我认为不适合这种情况。
因此,只有编写自己的 PDF 查看器才能编写解决方案。例如,您可以使用 PDF.js 来实现此目标。PDF.js 是用 JavaScript 编写的便携式文档格式 (PDF) 查看器。它是开源的,您可以在GitHub 上下载完整的源代码。
下载是相同的(仅使用您自己的 PDF 查看器),但我想推荐阅读以下链接:
也许我的回答可以节省您的时间!
| 归档时间: |
|
| 查看次数: |
2029 次 |
| 最近记录: |