【问题标题】:Print via javascript in SharePoint在 SharePoint 中通过 javascript 打印
【发布时间】:2012-08-01 19:12:40
【问题描述】:

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

【问题讨论】:

    标签: javascript sharepoint-2010 printing


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我不具体了解 SharePoint,因此无法提供具体示例。但是,听起来您正在考虑一种类似other stackoverflow question 中概述的技术。

      请注意,这是将顺序执行的所有代码块。所以我们打开一个窗口,设置标记并立即打印。在这些步骤之间无需等待。

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

      注入的脚本应该有一些逻辑来等待某些脚本资源完成加载,然后它会调用window.print()。显然window.onload 直到所有资源完成加载后才会触发。 (onload doesn't fire until all content is either loaded or has failed to load)。这是jquery example on stackoverflow。脚本也按照出现在标记中的顺序执行。因此,如果您注入的打印窗口 JavaScript 是最后一个,那么它上面的所有其他脚本都必须已经完成。 (所以任何 SharePoint 在标记中注入的东西都应该已经被执行了)。

      对于奖励积分,如果一切顺利,您可以在新的打印窗口上注入一个“加载蒙版”,然后在您的 javascript 执行 window.print() 之前隐藏该蒙版。

      【讨论】:

        【解决方案3】:

        下面给出的代码适用于 sharepoint、ASPX 页面和任何浏览器。我用 Sharepoint 2010 Visual webparts 测试了代码,它就像一个魅力。

        将此 Javascript 代码放入您的 Webpart 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');" />
        

        希望对你有所帮助。

        【讨论】:

        • 我遇到的问题是,我必须将打印页面中的标题信息带入打印窗口,然后打印窗口执行 SP 客户端库,而这种方法并不能很好地工作。 FF 和 IE 都冻结,直到加载新选项卡。加载过程等待 SP javascript 库。
        猜你喜欢
        • 2011-06-14
        • 1970-01-01
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多