js几种打印方法

1、使用printJs插件(优先使用)

printjs官网

// 官网文档很详细!
// 举例如下:
printJS({
   printable: [this.blobUrl],
   type: 'pdf'
})

2、使用window.open的方式

// 举例如下:
// 其中imgUrl为base64格式:'data:image/' + type + ';base64,' + ...
 let oWin = window.open(
  '',
    'pringwindow',
    'menubar=no,location=no,resizable=yes,scrollbars=no,status=no,width=1000,height=660'
  )
  oWin.document.fn = function () {
    if (oWin) {
      oWin.print()
      oWin.close()
    }
  }
  let html =
    '<div style="height: 100%;width: 100%;">' +
    `<img src="${this.imgUrl}" οnlοad="fn()" style="max-height:100%;max-width: 100%;" />` +
    '</div>'
  oWin.document.open()
  oWin.document.write(html)
  oWin.document.close()

3、使用iframe方式

// 举例如下:
const iframe = document.createElement('iframe')

     iframe.style.height = 0
     iframe.style.visibility = 'hidden'
     iframe.style.width = 0

     iframe.setAttribute('srcdoc', '<html><body></body></html>')
     document.body.appendChild(iframe)

     iframe.addEventListener('load', function () {
       // 这里获取image的前提是html中有一个id为image的dom
       // 例如:<img id="image" :src="图片路径"/>
       const image = document.getElementById('image').cloneNode()
       image.style.maxWidth = '100%'

       const body = iframe.contentDocument.body
       body.style.textAlign = 'center'
       body.appendChild(image)
       image.addEventListener('load', function () {
         iframe.contentWindow.print()
       })
     })

	iframe.contentWindow.addEventListener('afterprint', function () {
	   iframe.parentNode.removeChild(iframe)
	})

4、在electron中封装一个打印pdf的方法(这个一般用不到)

 const reader = new FileReader()
 // blobUrl: 一个blob流
   reader.readAsDataURL(blobUrl)
    reader.addEventListener('loadend', () => {
      nodeApi.sendnew('printResponsePdf', {
        buffer: Buffer.from(
          reader.result.split('base64,')[1],
          'base64'
        ),
    })
})

// 提供一个base64转blob的方式吧
 base64ToBlob() {
   let imgSrc = this.imgUrl // imgUrl为base64格式的路径

   let arr = imgSrc.split(',')
   let array = arr[0].match(/:(.*?);/)
   let mime = (array && array.length > 1 ? array[1] : type) || type
   // 去掉url的头,并转化为byte
   let bytes = window.atob(arr[1])
   // 处理异常,将ascii码小于0的转换为大于0
   let ab = new ArrayBuffer(bytes.length)
   // 生成视图(直接针对内存):8位无符号整数,长度1个字节
   let ia = new Uint8Array(ab)
   for (let i = 0; i < bytes.length; i++) {
    ia[i] = bytes.charCodeAt(i)
   }
   return new Blob([ab], {
     type: mime,
   })
 },
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaScript中遍历数组有多种方法。其中常用的方法包括forEach、map、for循环、for of、for in、filter和find。 1. 使用forEach方法进行遍历。forEach方法接受一个回调函数作为参数,该函数在遍历数组的每个元素时被调用。可以使用item参数来访问当前遍历到的元素,使用index参数来访问元素的索引,使用self参数来访问数组本身。例如: arr.forEach(function(item, index, self) { console.log(item); }); 这段代码会打印出数组arr中的每个元素。 2. 使用map方法进行遍历和映射。map方法也接受一个回调函数作为参数,该函数在遍历数组的每个元素时被调用,并返回一个新的数组。可以使用item参数来访问当前遍历到的元素。例如: let newArr = arr.map(item => { return item * 2; }); 这段代码会将数组arr中每个元素都乘以2,并将结果保存在新数组newArr中。 3. 使用for循环进行遍历。可以使用临时变量将数组的长度缓存起来,以避免重复获取数组长度。例如: for (var i = 0; i < arr.length; i++) { console.log(arr[i]); } 这段代码会按顺序遍历数组arr中的每个元素,并打印出来。 4. 使用for of循环进行遍历。for of循环可以直接遍历数组中的每个元素。例如: for (var item of arr) { console.log(item); } 这段代码会按顺序遍历数组arr中的每个元素,并打印出来。 5. 使用for in循环进行遍历。for in循环遍历的是数组的索引,而不是数组的值。例如: for (var index in arr) { console.log(arr[index]); } 这段代码会按顺序遍历数组arr中的每个元素,并打印出来。 6. 使用filter方法进行遍历和筛选。filter方法也接受一个回调函数作为参数,该函数在遍历数组的每个元素时被调用,并返回一个满足某个条件的新数组。例如: let newArr = arr.filter(item => { return item < 3; }); 这段代码会返回一个新数组newArr,其中包含数组arr中小于3的元素。 7. 使用find方法进行遍历。find方法也接受一个回调函数作为参数,该函数在遍历数组的每个元素时被调用,直到找到满足某个条件的元素为止。例如: let result = arr.find(item => { return item === 3; }); 这段代码会返回数组arr中第一个等于3的元素。 以上是JavaScript中常用的几种遍历数组的方法。根据实际需求选择合适的方法来进行遍历。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [JS遍历数组的十五种方法](https://blog.csdn.net/weixin_39987434/article/details/130869691)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值