Print a div using javascript in angularJS single page application
我有一个使用angularJS的单页Web应用程序。我需要打印某个页面的div。
我尝试了以下操作:
该页面包含少量div(print.html)
1 2 3 4 5 6 | Do not print Print this div <button ng-click="printDiv('printableArea');">Print Div</button> |
控制器具有以下脚本:
1 2 3 4 5 6 7 | $scope.printDiv = function(divName) { var printContents = document.getElementById(divName).innerHTML; var originalContents = document.body.innerHTML; document.body.innerHTML = printContents; window.print(); document.body.innerHTML = originalContents; } |
此代码可打印所需的div,但存在问题。
语句
1 2 3 4 5 6 7 | $scope.printDiv = function(divName) { var printContents = document.getElementById(divName).innerHTML; var popupWin = window.open('', '_blank', 'width=300,height=300'); popupWin.document.open(); popupWin.document.write('<html><head><link rel="stylesheet" type="text/css" href="style.css" /></head><body onloadx="window.print()">' + printContents + '</body></html>'); popupWin.document.close(); } |
需要两个条件函数:一个用于Google Chrome浏览器,另一个用于其余浏览器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | $scope.printDiv = function (divName) { var printContents = document.getElementById(divName).innerHTML; if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) { var popupWin = window.open('', '_blank', 'width=600,height=600,scrollbars=no,menubar=no,toolbar=no,location=no,status=no,titlebar=no'); popupWin.window.focus(); popupWin.document.write('<!DOCTYPE html><html><head>' + '<link rel="stylesheet" type="text/css" href="style.css" />' + '</head><body onloadx="window.print()">' + printContents + '</body></html>'); popupWin.onbeforeunload = function (event) { popupWin.close(); return '.\ '; }; popupWin.onabort = function (event) { popupWin.document.close(); popupWin.close(); } } else { var popupWin = window.open('', '_blank', 'width=800,height=600'); popupWin.document.open(); popupWin.document.write('<html><head><link rel="stylesheet" type="text/css" href="style.css" /></head><body onloadx="window.print()">' + printContents + '</body></html>'); popupWin.document.close(); } popupWin.document.close(); return true; } |
您现在可以使用名为angular-print
的库
我这样做的方式是:
1 2 3 4 5 6 7 8 9 10 11 12 | $scope.printDiv = function (div) { var docHead = document.head.outerHTML; var printContents = document.getElementById(div).outerHTML; var winAttr ="location=yes, statusbar=no, menubar=no, titlebar=no, toolbar=no,dependent=no, width=865, height=600, resizable=yes, screenX=200, screenY=200, personalbar=no, scrollbars=yes"; var newWin = window.open("","_blank", winAttr); var writeDoc = newWin.document; writeDoc.open(); writeDoc.write('<!doctype html><html>' + docHead + '<body onloadx="window.print()">' + printContents + '</body></html>'); writeDoc.close(); newWin.focus(); } |
n
这就是在Chrome和Firefox中对我有效的方法!单击打印后,这将打开小打印窗口并自动将其关闭。
1 2 3 4 5 6 7 8 9 | var printContents = document.getElementById('div-id-selector').innerHTML; var popupWin = window.open('', '_blank', 'width=800,height=800,scrollbars=no,menubar=no,toolbar=no,location=no,status=no,titlebar=no,top=50'); popupWin.window.focus(); popupWin.document.open(); popupWin.document.write('<!DOCTYPE html><html><head>TITLE OF THE PRINT OUT' +'<link rel="stylesheet" type="text/css" href="app/directory/file.css" />' +'</head><body onloadx="window.print(); window.close();">' + printContents + '</html>'); popupWin.document.close(); |
我认为不需要编写这么大的代码。
我刚刚安装了有角印刷的凉亭包,一切准备就绪。
只需将其注入模块中就可以了
使用预建的打印指令