簡體   English   中英

打印窗口不打印chrome最新版本的整頁

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM