[英]Print window does not print whole page in chrome latest version
我正在使用HTML5畫布開發一個打印工具。 通過打開一個新窗口並將頁面畫布作為圖像寫入新窗口文檔,然后最后打印窗口文檔。作為測試,我嘗試在chrome最新版本(版本46.0.2490.71)中打印頁面(大於100頁) )它不打印整個頁面。 在chrome打印預覽窗口中僅顯示部分頁面,如果我們打印110頁文檔意味着它只顯示24或38頁(它隨機顯示頁面)。 但是整個頁面都會添加到新創建的打印窗口中。 我用下面的代碼打印頁面。
var _printWindow = window.open('');
_printWindow.document.write('<html><BODY>');
_printWindow.document.write('<center>');
for (var i = 1; i <= _totalPages; i++) {
var canvas = this._printpages(i);
_printWindow.document.write('<img src="' + canvas.toDataURL() + '"style="border:1px solid;height:"' + _pageHeight + '"px;margin:0px"><br />');
}
_printWindow.document.write('</center></body></html>');
_printWindow.document.close();
_printWindow.print();
在完成<img>
標記的編寫后,您將直接調用print()
。 但是,所有這些圖像加載(異步)需要時間。 因此,當您調用print()
,圖像尚未完成加載,有些可能尚未確定其高度,從而導致意外的頁數。
要解決此問題,只有在onload
事件觸發所有圖像元素后才應調用print()
。 這是我解決它的方式:
var nImages = _totalPages;
function imageLoaded() {
if (--nImages === 0) {
_printWindow.print();
}
}
// ...snip...
// replace your `for` loop with the following:
for (var i = 1; i <= _totalPages; i++) {
var img = new Image;
img.addEventListener('load', imageLoaded);
img.src = /* get the data URL from the canvas */;
// here, add in your style properties
_printWindow.document.body.appendChild(img);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.