当前位置: 首页 > news >正文

前端实现打印1 - 使用 iframe 实现 并 分页打印

目录

  • 打印代码
  • 对话框预览
  • 打印预览

打印代码

<!-- 打印 -->
<template><el-dialogtitle="打印":visible.sync="dialogVisible"width="50%"top="7vh"append-to-body@close="handleClose"><div ref="printContainer" class="container"><div v-for="(item, index) in bloodList" :key="index" class="blood_num_item"><el-image :src="item.src" :preview-src-list="[item.src]" /><!-- <img :src="item.src" /> --><div class="num">{{ item.num }}</div></div></div><template slot="footer"><div class="btns"><el-button size="mini" @click="handleClose">取消</el-button><el-button size="mini" type="primary" @click="printHandler">打印</el-button></div></template></el-dialog>
</template><script>
import { getStore } from '@/utils/tool.js'
// import printJS from 'print-js'export default {name: 'PrintBloodUseDialog',components: {},data() {return {dialogVisible: false,bloodList: [],vuex: JSON.parse(getStore('vuex') || '{}')}},computed: {sysConfigData() {return (this.vuex && this.vuex.app && this.vuex.app.sysConfigData) || {}}},watch: {},created() {this.open()},methods: {// open(bloodList = []) {open(bloodList = ['0000000038','0000000039','0000000040','0000000041','0000000042','0000000043','0000000044','0000000045','0000000046']) {this.bloodList = bloodList.map((item) => {return {src: 'https://fc1tn.baidu.com/it/u=1935894774,4092430670&fm=202&src=780&ernie_sim_online&mola=new&crop=v1',num: item}})this.dialogVisible = true},printHandler() {console.log('"打印"----', '打印')// printJS({//   printable: [`data:image/jpg;base64,${this.printData.url}`],//   type: 'image'// })const el = this.$refs.printContainerthis.iframe = document.createElement('iframe')this.iframe.setAttribute('style','position:absolute;width:0;height:0;left:-500px;top:-500px;')document.body.appendChild(this.iframe)const doc = this.iframe.contentWindow.documentdoc.write('<div class="print-iframe">' + el.innerHTML + '</div>')doc.write('<style>@page{size:auto;margin: 0.5cm 1cm 0cm 1cm;}</style>') // 打印内容距离页面边距doc.write( // 实现分页主要代码`<style>.blood_num_item {page-break-before:always !important;page-break-after:always !important;}img,.el-image {width:100%}.num {text-align:center;}</style>`)doc.close()this.iframe.contentWindow.onafterprint = this.afterPrintthis.iframe.contentWindow.focus()// this.iframe.contentWindow.print() // 直接打印图片展示不了,需借助 onload ↓↓↓this.iframe.onload = () => {         // 解决图片显示不了的问题this.iframe.contentWindow.print()}if (navigator.userAgent.indexOf('MSIE') > 0) {document.body.removeChild(this.iframe)}},handleClose() {this.dialogVisible = false}}
}
</script><style lang='scss' scoped>
@import '@/styles/dialog-style.scss';
::v-deep .el-dialog {.el-dialog__body {max-height: 500px;overflow: auto;}
}.container {display: flex;flex-wrap: wrap;.blood_num_item {width: calc(20% - 5px);margin-right: 5px;.el-image {width: 100%;}img {width: 100%;}.num {text-align: center;}}
}.btns {text-align: right;
}
</style>

对话框预览

在这里插入图片描述

打印预览

在这里插入图片描述

http://www.lryc.cn/news/107225.html

相关文章:

  • MIAOYUN获评“2023年度一云多芯稳定安全运行优秀案例”
  • 论文代码学习—HiFi-GAN(4)——模型训练函数train文件具体解析
  • 安防视频综合管理合平台EasyCVR可支持的视频播放协议有哪些?
  • 一张表格讲明白white-space属性。html如何识别\n\r,让这些特殊换行符换行。
  • 【Linux】编写shell脚本将项目前一天打印的日志进行提取,并且单独保存
  • 快速搭建单机RocketMQ服务(开发环境)
  • Centos7搭建Apache Storm 集群运行环境
  • C语言假期作业 DAY 12
  • 2.4在运行时选择线程数量
  • element-ui中Notification 通知自定义样式、按钮及点击事件
  • 无头单向非循环单链表、带头双向循环链表
  • UE4/5C++多线程插件制作(二十、源码)
  • 构建稳健的PostgreSQL数据库:备份、恢复与灾难恢复策略
  • 查看本地mysql账号密码
  • 数据结构:顺序表详解
  • 采集数据筛选-过滤不要数据或只保留指定数据
  • RISC-V基础指令之shift移动指令slli、srli、srai、sll、srl、sra
  • 【沁恒蓝牙mesh】CH58x flash分区与数据存储管理
  • Ctfshow web入门 JWT篇 web345-web350 详细题解 全
  • 2023年国家留学基金委(CSC)青年骨干教师项目即将开始申报
  • GC垃圾回收器【入门笔记】
  • 在 React 中渲染大型数据集的 3 种方法
  • uniapp iOS 消息推送扩展:后台/杀死app进程状态能语音播报
  • 批量创建可配置物料参数文件
  • 性能压力测试的重要性与实施方法
  • HCIP入门静态实验
  • Vue与js的融合,如何编写现代化的前端应用
  • Boost开发指南-3.10singleton_pool
  • 腾讯云从业者认证考试考点——云网络产品
  • Miniled透明屏:超薄、轻便,还有哪些特点?