IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue-print-nb实现打印问题总结 -> 正文阅读

[JavaScript知识库]vue-print-nb实现打印问题总结

样式丢失

因为正常页面开发时,为避免样式污染,style标签都会加scoped属性,所以导致,打印后无法识别在style标签下设置的样式
解决办法:添加一个新的style不加scoped, 这这里添加样式,切记外层包上当前页面的唯一标签,避免污染其他页面样式

<style lang="less">
	#blueprintContent {
	  .textarea-qr {
	    padding-top: 10px;
	    border: none;
	    width: 400px;
	    line-height: 45px;
	    resize: none;
	    background-color: transparent;
	  }
	}
</style>

打印局部,内有canvas时,canvas过大,会有一页空白

打印的大概结构为:

 <div id="blueprintContent" '}">
   <canvas id="blueprintCanvas"></canvas>
 </div>

blueprintContent 原页面设置的时display: inline-block, 宽度被canvas撑开,但打印时,没有读取到这个样式,默改成了block,且宽度为100%
改成

<style lang="less">
   #blueprintContent {
      display: inline-block !important;
   }
</style>

局部打印,内有canvas, canvas过大时,展示不全

实际上展示不全,并不是被截取了,而是打印页面,视觉效果没有完全展示,我们可以通过手动设置缩放,来让图片完全展示
如图
请添加图片描述

如果产品要在进入页面默认展示全部,可以在打印前将canvas转化成图片 然后通过控制图片的百分比来实现图片全部展示

代码

<div  v-print="print">打印<>
 <div id="blueprintContent" '}">
 	<img id="imgConvas" src="" alt="">
   <canvas id="blueprintCanvas"></canvas>
 </div>
 data () {
 	let _vue = this
 	return {
 	  print: {
        id: 'blueprintContent',
        closeCallback () {
          // 关闭了打印
           _vue.removeImg()
        },
        clickMounted () {
        	// 点击打印
            _vue.creatImg()
        }
      }
 	}
 } 
 methods: {
   // 根据画布生成图片,以便打印时使用图片(解决canvas过大时 打印会显示不全)
    creatImg () {
      let mycanvas = document.getElementById('blueprintCanvas')
      // 获取画布的父对象(div)
      let parent = mycanvas.parentElement
      let image = mycanvas.toDataURL('image/png')
      // 找到img图片对象元素
      let img = document.getElementById('imgConvas')
      img.setAttribute('style', 'display: block')
      // 将画布生成的图片内容给img图片对象元素
      img.src = image
      this.mycanvas = mycanvas
      parent.removeChild(mycanvas)
    },
    removeImg () {
      let parent = document.getElementById('blueprintContent')
      // 恢复画布的内容
      parent.appendChild(this.mycanvas)
      // 将生成的图片内容从到画布所在父元素的内容里删除
      let img = document.getElementById('imgConvas')
      img.setAttribute('style', 'display: none')
    }
 }
 <style lang="less">
	#imgConvas{
	  width: 100%;
	}
 </style>

这样就可以默认显示100%, 但同样也会有弊端,就是当调节打印缩放时,放大后,仍然为100%,不会被放大
请添加图片描述
参考
http://t.zoukankan.com/scallop-p-14184580.htm
https://blog.csdn.net/LizequaNNN/article/details/122438389
https://blog.csdn.net/liangyiyiliang/article/details/124451553

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 22:45:33  更:2022-07-04 22:48:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:41:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码