vue启用打印机打印-二维码条形码打印

news2024/11/17 11:26:28

起因

资产、设备管理必备的二维码条形码打印

原理

所需插件 vue-print-nb 本文版本1.7.5

构建所需要打印的内容,利用vue-print-nb进行打印。二维码条形码打印的本质就是图片打印

代码

html部分

<div ref="printDom"
             id="printDom">
             //你想要打印的内容
</div>
//启动打印
<el-button v-print="printContent"
                   class="startPrintBtn"
                   type="primary"
                   size="mini">打印</el-button>

js

data() {
        return {
            printContent: {
                id: "printDom", // 打印的区域
                preview: false, // 预览工具是否启用
                previewTitle: "", // 预览页面的标题
                popTitle: "", // 打印页面的页眉
                // extraCss: "", //css 尽量不要在此设置样式
                previewBeforeOpenCallback(vue) {
                    console.log("正在加载预览窗口");
                },
                previewOpenCallback(vue) {
                    console.log("已经加载完预览窗口");
                },
                clickMounted: (vue) => {
                    console.log("触发点击打印回调");

                    vue.isShowPrint = true; //弹框显示条码
                },
                beforeOpenCallback(vue) {
                    console.log("打开之前", vue.barcodeNum);
                },
                openCallback(vue) {
                    console.log(vue);
                    vue.isShowPrint = false; // 关闭条码显示弹框
                    console.log("执行了打印", vue.barcodeNum);
                },
            },
            fontSizeText: "16px",
            lineHeightText: "16px",
        };
    },
    methods: {
        startPrint() {
            if (this.printInfo.coName.length > 8) {
                this.fontSizeText = "12px";
            }
            let btn = document.querySelector(".startPrintBtn");
            btn.click();
            // console.log(window.matchMedia("print").matches);
            // console.log(window.matchMedia("print"));
        },
    },

css

注意:在页面上设置的样式打印时是没效果的,这里需要用过媒体查询来设置样式

<style scoped media="print">
//设置纸张样式
@page {
    size: auto;
    margin: 0 2mm;
}
</style>

使用px来设置距离需谨慎,相同px在不同纸张呈现大小可能是不相同的。小距离的变动px是无法呈现的。(举个栗子:在某一纸张上1px=0.3mm,此时我只想上移0.2mm)

总代码

<template>
    <div class="printDom-box">
        <div ref="printDom"
             id="printDom">
            <div v-if="printInfo.type=='brcode'">
                <div class="title"
                     :style="{'font-size': fontSizeText,'line-height':lineHeightText}">{{ printInfo.coName }}</div>
                <div class="line"></div>
                <p>{{ printInfo.snCode }}</p>
                <div class="img-box">
                //二维码、条形码图片 替换即可使用
                    <img v-if="printInfo.barCodePic"
                         :src="printInfo.barCodePic"
                         alt="">
                </div>
            </div>
            <div v-else>
                <div class="qrcode-img-box">
                    <img v-if="printInfo.barCodePic"
                         :src="printInfo.barCodePic"
                         alt="">
                </div>
            </div>
            <p>{{ printInfo.barCode }}</p>
        </div>
        <!-- style="visibility: hidden;" -->
        <el-button v-print="printContent"
                   class="startPrintBtn"
                   type="primary"
                   size="mini">打印</el-button>
    </div>
</template>
<script>
import JsBarcode from "jsbarcode";
import print from "vue-print-nb";
export default {
    props: ["printInfo"],
    directives: {
        print,
    },
    mounted() {},
    data() {
        return {
            printContent: {
                id: "printDom", // 打印的区域
                preview: false, // 预览工具是否启用
                previewTitle: "", // 预览页面的标题
                popTitle: "", // 打印页面的页眉
                // extraCss: "", //css
                previewBeforeOpenCallback(vue) {
                    console.log("正在加载预览窗口");
                },
                previewOpenCallback(vue) {
                    console.log("已经加载完预览窗口");
                },
                clickMounted: (vue) => {
                    console.log("触发点击打印回调");

                    vue.isShowPrint = true; //弹框显示条码
                },
                beforeOpenCallback(vue) {
                    console.log("打开之前", vue.barcodeNum);
                },
                openCallback(vue) {
                    console.log(vue);
                    vue.isShowPrint = false; // 关闭条码显示弹框
                    console.log("执行了打印", vue.barcodeNum);
                },
            },
            fontSizeText: "16px",
            lineHeightText: "16px",
        };
    },
    methods: {
        startPrint() {
            if (this.printInfo.coName.length > 8) {
                this.fontSizeText = "12px";
            }
            let btn = document.querySelector(".startPrintBtn");
            btn.click();
            // console.log(window.matchMedia("print").matches);
            // console.log(window.matchMedia("print"));
        },
    },
};
</script>
<style lang="scss" scoped>
.printDom-box {
    visibility: hidden;
    position: absolute;
    top: 0;
    img {
        width: 500px;
        height: auto;
    }
}
</style>
<style scoped media="print">
@page {
    size: auto;
    margin: 0 2mm;
}
#printDom {
    display: inline-block;
    width: 100%;
    height: 100%;
    text-align: center;
    margin: auto 0;
    line-height: 2.2mm;
}
#printDom .title {
    font-weight: 700;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    padding-top: 0.8mm;
}
p {
    margin-top: 1mm;
    font-size: 1mm !important;
}
.line {
    height: 0.1mm;
    width: 100%;
    background-color: #000;
    margin: 0.5mm 0;
}
.img-box {
    height: 10mm;
    overflow: hidden;
}
img {
    width: 100%;
    height: 100%;
    margin-top: 1mm;
}
.qrcode-img-box {
    /* height: 16mm; */
    padding: 0;
    overflow: hidden;
}
.qrcode-img-box img {
    height: 18mm;
    width: 18mm;
    margin-top: 0mm;
    /* margin: auto 0; */
}
</style>

成果图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1083147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux内存管理 | 二、虚拟地址空间布局

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

SNAP计算哨兵2号的LAI/FVC/FAPAR

SNAP计算LAI 简介 SNAP的计算LAI方法是基于PROSAIL模型&#xff0c;集成的模块&#xff0c;很方便。 首先要下载SNAP软件&#xff0c;下载步骤见博文 打开数据 找到影像的.xml文件 拖入左边的空白框中&#xff0c;发现所有波段会显示如下。这些数据都是已经经过处理完成之后…

Vue之VueX知识探索(一起了解关于VueX的新世界)

目录 前言 一、VueX简介 1. 什么是VueX 2. VueX的作用及重要性 3. VueX的应用场景 二、VueX的使用准备工作 1. 下载安装VueX 2. vuex获取值以及改变值 2.1 创建所需示例 2.2 将创建好的.vue文件页面显示 2.3 创建VueX的相关文件 2.4 配置VueX四个js文件 2.5 加载到vue示…

网络架构介绍

1 网络 7 层架构 7 层模型主要包括&#xff1a; 1. 物理层&#xff1a;主要定义物理设备标准&#xff0c;如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流&#xff08;就是由 1、0 转化为电流强弱来进行传输,到达目的地后在转化为1、0…

简述电子设计中的EMC、EMI、ESD

简述电子设计中的EMC、EMI、ESD ESD EMI EMC ESD、EMI、EMC 设计是电子工程师在设计中遇到最常见的难题&#xff0c;电磁兼容性&#xff08;EMC&#xff09;是指设备或系统在其电磁环境中符合要求运行并不对其环境中的任何设备产生无法忍受的电磁干扰的能力。 因此&#xff0…

【2023年11月第四版教材】第24章《法律法规与标准规范》(合集篇)

第24章《法律法规与标准规范》(合集篇&#xff09; 1 民法典&#xff08;合同编&#xff09;2 招标投标法2.1 关于时间的总结2.2 内容 3 政府采购法4 专利法5 著作权法6 商标法7 网络安全法8 数据安全法 1 民法典&#xff08;合同编&#xff09; 1、要约是希望和他人订立合同的…

LLM - 旋转位置编码 RoPE 代码详解

目录 一.引言 二.RoPE 理论 1.RoPE 矩阵形式 2.RoPE 图例形式 3.RoPE 实践分析 三.RoPE 代码分析 1.源码获取 2.源码分析 3.rotary_emb 3.1 __init__ 3.2 forward 4.apply_rotary_pos_emb 4.1 rotate_half 4.2 apply_rotary_pos_emb 四.RoPE 代码实现 1.Q/K/V …

苹果ios开发者ipa文件包内测人数签名真机数量满了应该怎么做?

苹果ios开发者ipa文件包内测人数签名真机数量满了应该怎么做&#xff1f; 有人总是问我开发者的设备满了怎么做才可以让设备增加&#xff1f;或者我要怎么做才能让员工的设备都可以安装&#xff0c;那么首先我们要做到的就是要知道我们的开发者都是拥有多少内测设备&#xff1f…

放大器的输入、输出电压范围的理解

问题电路 由于运放SGM8295不是轨到轨的电路&#xff0c;导致U29.1输出电压只有当输入到一定门限的时候才会有输出。 上图表示输入电压工作范围为如上&#xff0c;在此以外的不能正常工作。 一篇很好的运放的输入/输出文章介绍 https://zhuanlan.zhihu.com/p/351740051?utm_id0…

【Java学习之道】异常的处理方式

引言 今天我们将聚焦于异常处理&#xff0c;这是每一个Java程序员都应该掌握的核心技能之一。通过学习这些内容&#xff0c;你将能够更好地应对程序中的意外情况&#xff0c;提高程序的健壮性和可靠性。 一、异常的处理方式 在Java中&#xff0c;异常处理主要通过使用try-ca…

后厂村路灯在线签名网站,在线签名工具,IPA在线签名

IPA在线签名工具网站&#xff0c;在线实现IPA包签名 案例网站&#xff1a;在线签名 - 后厂村路灯https://sign.vx365.vip/ 用户可以自定义签名网站样式。 用户可以独立部署到自己服务器&#xff0c;使用自己的域名。 用户可以使用自己服务器&#xff0c;加快签名速度&#xf…

YB4618 具有充电前端过电压和过温保护功能,低压差充电前端 OVP 保护开关IC

YB4618 低压差充电前端 OVP 保护开关 概述: YB4618 具有充电前端过电压和过温保护功能。支持 3V 到 40V 的宽输入电压工作范围。过压保护阈值可以外部设置或采用内部默认设置。超快的过压保护响应速度能够确保后级电路的安全。集成了超低导通阻抗的 nFET 开关&#xff0c;确…

Explain执行计划字段解释说明---type字段说明(02)

type显示访问类型详解 &#xff08;1&#xff09;system 表只有一行记录&#xff08;等于系统表&#xff09;&#xff0c;这是const类型的特列&#xff0c;平时不会出现&#xff0c;这个也可以忽略不计。 &#xff08;2&#xff09;const 表示通过索引一次就找到了,const用…

提升战斗力!吃鸡行家分享顶级游戏干货,助你轻松拿下绝地求生

作为吃鸡行家&#xff0c;我们都知道&#xff0c;在绝地求生中提高战斗力至关重要。今天我来分享一些独特的干货&#xff0c;帮助你成为顶级的吃鸡玩家&#xff0c;并分享一些方便吃鸡作图、装备皮肤库存展示和查询的技巧。 首先&#xff0c;让我们来谈谈绝地求生作图工具推荐。…

【Java学习之道】异常的概念与分类

引言 异常处理是Java编程中重要的一部分&#xff0c;它可以让我们更好地处理程序中可能出现的错误和异常情况。同时&#xff0c;Java也提供了强大的输入/输出流功能&#xff0c;让我们可以轻松地读取和写入数据。这一章&#xff0c;我们就来探讨这两个话题&#xff0c;让你的J…

HT for Web 风格属性手册教程 | 图扑软件

图扑软件明星产品 HT for Web 是一套纯国产化独立自主研发的 2D 和 3D 图形界面可视化引擎。HT for Web&#xff08;以下简称 HT&#xff09;图元的样式由其 Style 属性控制&#xff0c;并且不同类型图元的 Style 属性各不相同。为了方便查询和理解图元的 Style 属性&#xff0…

Docker-compos

Docker-compose 简介 Docker-Compose项目是基于Python开发的Docker官方开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层&#xff0c;分别是 工程&#xff08;project&#xff09;&#xff0c;服务&#xff08;service&#…

大模型的超级“外脑”——向量数据库解决大模型的三大挑战

随着AI大模型产品及应用呈现爆发式增长,新的AI时代已经到来。向量数据库可与大语言模型配合使用,解决大模型落地过程中的痛点,已成为企业数据处理和应用大模型的必选项。在近日举行的华为全联接大会2023期间,华为云正式发布GaussDB向量数据库。GaussDB向量数据库基于GaussD…

MySQL数据库——SQL优化(2)-order by 优化、group by 优化

目录 order by 优化 概述 测试 优化原则 group by 优化 测试 优化原则 order by 优化 概述 MySQL的排序&#xff0c;有两种方式&#xff1a; Using filesort : 通过表的索引或全表扫描&#xff0c;读取满足条件的数据行&#xff0c;然后在排序缓冲区sortbuffer中完成排…

提升吃鸡战斗力,分享顶级作战干货!

大家好&#xff01;作为一名吃鸡玩家&#xff0c;你是否也希望提高自己的游戏战斗力&#xff1f;在这里&#xff0c;我将为大家分享一些顶级游戏作战干货&#xff0c;以及方便吃鸡作图和查询装备皮肤库存的实用工具。 首先&#xff0c;让我们提到绝地求生作图工具推荐。通过使用…