在SharePoint中通过javascript打印

Print via javascript in SharePoint

本文关键字:javascript 打印 SharePoint      更新时间:2023-09-26

我环顾四周,看到了如何通过实例化一个新窗口并在那里移植标记来使用javascript打印div内容的绝妙解决方案
我在SharePoint中使用该解决方案的问题是SP*.js库异步加载,它会冻结打印对话框屏幕或浏览器本身
有人能解决这个问题吗?

使用sharepoint,您可以使用ExecuteOrDelayUntilScriptLoaded等待SP.js加载,以确保没有冻结。

<script type="text/javascript">
  function printPage(){
  }
  window.onload = function(){ ExecuteOrDelayUntilScriptLoaded(printPage, "sp.js"); };
</script>

我不太了解SharePoint,因此无法提供具体的示例。然而,听起来你正在考虑一种技巧,就像在另一个stackoverflow问题上概述的那样。

请注意,这是将按顺序执行的所有一个代码块。因此,我们打开一个窗口,设置标记并立即打印。不要在台阶之间等着。

我建议您此时不要调用print,而是打开窗口,设置标记并在新窗口标记中注入更多javascript。这个新注入的javascript将用于实际打印。

注入的脚本应该有一些逻辑等待,直到某些脚本资源完成加载,然后调用window.print()。显然,window.onload直到所有资源都完成加载后才会启动。(只有加载了所有内容或加载失败后,onload才会激发)。下面是一个关于stackoverflow的jquery示例。此外,脚本是按照在标记中出现的顺序执行的。因此,如果您注入的打印窗口javascript是最后一个,那么它上面的所有其他脚本都必须已经完成。(因此,SharePoint在标记中注入的任何内容都应该已经执行了)。

为了获得奖励,如果一切顺利,您可以在新的打印窗口上注入一个"加载掩码",然后在javascript执行window.print()之前隐藏该掩码。

下面给出的代码将适用于sharepoint、ASPX页面和任何浏览器。我用Sharepoint 2010 Visual Web部件测试了代码,它的工作方式很有魅力。

将此Javascript代码放入您的Web部件ASCX文件中

    <script type="text/javascript">
       function printPartOfPage(elementId) {
        var printContent = document.getElementById(elementId);
        var windowUrl = '';
        var uniqueName = new Date();
        var windowName = 'Print' ;
        var printWindow = window.open(windowUrl, windowName, 'left=-20,top=-20,width=0,height=0');
        printWindow.document.write('<HTML><Head><Title></Title>');
        printWindow.document.write('</Head><Body style="margin-left:50px;margin-top:50px;font-size:10pt;">');
        printWindow.document.write(printContent.innerHTML);
        printWindow.document.write('</Body></HTML>');
        printWindow.document.close();
        printWindow.focus();
        printWindow.print();
        printWindow.close();
    }
</script>

&使用更新打印按钮ClientClick事件

   <img alt="" src="~/_layouts/images/WebpartCollection/Printer-30X30.jpg" 
onclick="JavaScript:printPartOfPage('YourDivClientID');" />

我希望这能帮助你。