js调用windows打印机,JavaScript是一种广泛应用于web开发的编程语言,它可以通过调用浏览器内置的API,实现各种功能。其中调用浏览器的打印功能是很常见的一种应用。通过JavaScript调用浏览器的打印功能,可以方便地将网页内容输出到打印机上,进行打印输出。接下来我们就来看一看,如何使用JavaScript来调用浏览器的打印功能。
JavaScript 如何调用浏览器的打印功能
实现功能:......
难点:浏览器核心 APIwindow.print()
js 调用打印机的两种方式
直接调用 window.print()这种方式的缺点在于会操作原始页面的 DOM,影响原始页面的展现,而且当局部打印时样式可能会与预期不一致。
<!--startprint--> <div class="print-content"> content... </div> <!--endprint--> <script> function doPrint() { const html = window.document.body.innerHTML; const start = "<!--startprint-->"; //开始打印标识字符串有17个字符 const end = "<!--endprint-->"; //结束打印标识字符串 let printHtml= html.substring(html.indexOf(start) + 17); //从开始打印标识之后的内容 printHtml = printHtml.substring(0, printHtml.indexOf(end)); //截取开始标识和结束标识之间的内容 window.document.body.innerHTML = printHtml; //把需要打印的指定内容赋给body.innerHTML window.print(); //调用浏览器的打印功能打印指定区域 window.document.body.innerHTML = html;//重新给页面内容赋值; } </script>使用 iframe(推荐)
这种方式不会影响原始页面的展现,但是同样可能会出现样式不一致的问题
局部打印时如何确保样式符合预期局部打印时,打印内容的样式可能会由于全局样式的丢失而失真,有以下方式可以解决:
将全局样式文件补充到打印内容中const globalCss = '<style src="./main.css"></style>' function doPrint() { // pre... printHtml = globalCss + printHtml window.document.body.innerHTML = printHtml; //把需要打印的指定内容赋给body.innerHTML // next... }放弃使用 innerHTML获取打印内容的方式,动态计算当前元素的样式。然后对打印内容元素字符串化(stringify)并将样式内联。(call-printer 采用的就是这种方式,并且自动将样式内联了)
计算当前样式:
function getStyleObj(dom) { return dom ? window.getComputedStyle(dom) : {} }
节点元素 stringify:
function stringifyNode(el) { if (el.nodeName === '#text') return el.nodeValue || '' const styleStr = stringifyStyle(getStyleObj(el)) const attrs = stringifyAttrs(el, { style: styleStr }) const tagName = el.nodeName.toLowerCase() if (['br', 'hr', 'input', 'img'].includes(tagName)) { return `<${tagName} ${attrs}/>` } const children = Array.prototype.reduce.call( el.childNodes, (pre: any, node: any) => pre + stringifyNode(node), '', ) as string return `<${tagName} ${attrs}>${children}</${tagName}>` }
关于 call-printer 的使用:
import { callPrinter } from 'call-printer' // 打印 html 字符串。可用于单独打印图片,文字等等,注意写内联样式 callPrinter('<img src="./sample.jpeg" >') // 打印 dom 元素,打印页面的局部 const content = document.getElementById('content') callPrinter(content)
刘志平 - livelybone
github - 个人组件库 - Demo
综上所述,JS调用浏览器的打印功能非常简单,并且非常实用。我们可以通过简单的几行代码来实现页面的打印,方便用户进行文档的保存和分享。未来,在Web应用中,打印功能绝对是必不可少的一部分。
电脑教程推荐
win10系统推荐
Copyright © 2012-2024 win10系统家园 版权声明