“打印”窗口不会以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);
}
相关文章:
- 如何确定相对较新版本的IE的高度和宽度(IE8不喜欢从JavaScript设置这种样式吗?
- 浏览器兼容性/支持较新版本
- 如何在较新版本的 Free-JQGard 中重置搜索工具栏和搜索过滤器
- 如何用新版本的因果报应取代被弃用的吞咽因果报应
- npm安装can'找不到新版本
- 为什么获胜't客户端在公用文件夹中接收此脚本的新版本
- 获取模板是用我的Node.JS应用程序的新版本Handlebars错误预编译的
- 上载图像的新版本并避免缓存
- 如何避免被大量的框架和新版本的JavaScript淹没
- 推出新版本的JavaScript,css和图形内容,使用ASP .NET MVC
- 无法将 Slickgrid 的标头与 Jquery 新版本分组
- 谷歌分析 - 旧版本和新版本有什么区别
- 为什么这个选择菜单在jQuery和JQM的新版本组合中失败
- 如何在 Angular 中打印新对象的属性值
- 将输入记录到数组中,仅打印新输入
- 一个函数,它接受回调并创建只能调用一次的新版本的回调.Javascript
- Splitter.js 不适用于新版本的 jQuery
- Breezejs新版本'的合并实体功能
- Javascript:检测是否缓存了请求的文件,如果存在较新版本,则删除缓存
- 一些jquery插件不适用于新版本的jquery库