适配针式打印机EPSON爱普生,在vue项目中用原生js搭配iframe完成唤起打印弹窗

简介: 适配针式打印机EPSON爱普生,在vue项目中用原生js搭配iframe完成唤起打印弹窗


被嵌入的frame html页面,命名为index.html,放入static/previewPDF/路径下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>打印预览</title>
    <style>
        html,
        body,
        div,
        span,
        iframe,
        h1,
        h2,
        h3,
        h4,
        h5,
        h6,
        p,
        img,
        b,
        i,
        dl,
        dt,
        dd,
        ol,
        ul,
        li,
        form,
        label,
        table,
        tbody,
        tfoot,
        thead,
        tr,
        th,
        td,
        input,
        select,
        button,
        a {
            list-style: none;
            margin: 0;
            padding: 0;
            border: 0;
            outline: 0;
            border-collapse: collapse;
            border-spacing: 0;
        }
        /* A4纸像素长宽分别是842×595 */
        .table {
            width: 842px;
            min-height: 595px;
        }
        .table * {
            font-weight: 100;
            font-family: 'Microsoft YaHei';
        }
        .head {
            width: 100%;
            text-align: center;
            margin-bottom: 5px;
        }
        .title {
            font-weight: 200;
            font-size: 24px;
        }
        .datetime {
            font-size: 14px;
            margin-bottom: 20px;
        }
        .head-desc {
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        table {
            width: 100%;
            border: 1px solid #eee;
            border-collapse: collapse;
        }
        table tr {}
        table th {
            font-weight: 200;
            border: 1px solid black;
            text-align: center;
            font-size: 14px;
        }
        table td {
            border: 1px solid black;
            text-align: center;
            font-size: 14px;
        }
        .foot-desc {
            margin-top: 5px;
            display: flex;
            justify-content: space-between;
            align-items: center;
            font-size: 14px;
        }
    </style>
</head>
<body>
    <div class="table">
        <div class="head">
            <div class="title"><span id="GSMC">XXXX有限公司</span>-<span id="LX">XX单</span></div>
            <div class="datetime">时间:<span id="CJSJ">2020年0月0日 18:08:08</span></div>
            <div class="head-desc">
                <div>客户:<span id="KHMC">XXXX有限公司</span></div>
                <div>单号:<span id="DH">23061214500008888</span></div>
            </div>
        </div>
        <table>
            <colgroup>
                <col style="width: 50px;">
                <col style="width: 100px;">
                <col style="width: 300px;">
                <col style="width: 150px;">
                <col style="width: 50px;">
                <col style="width: 100px;">
                <col style="width: 100px;">
            </colgroup>
            <thead>
                <tr>
                    <th>序号</th>
                    <th>品牌</th>
                    <th>型号规格</th>
                    <th>商品名称</th>
                    <th>数量</th>
                    <th>单价</th>
                    <th>金额</th>
                </tr>
            </thead>
            <tbody id="HPS">
                <tr>
                    <td>1</td>
                    <td>BMW</td>
                    <td>宝马3系(进口) 2009款 335i</td>
                    <td>三厢车</td>
                    <td>1</td>
                    <td>360000</td>
                    <td>360000</td>
                </tr>
                <tr>
                    <td>2</td>
                    <td>BMW</td>
                    <td>宝马3系(进口) 2008款 320i典雅型 2.0L</td>
                    <td>三厢车</td>
                    <td>1</td>
                    <td>580000</td>
                    <td>580000</td>
                </tr>
                <tr>
                    <td>3</td>
                    <td>玛莎拉蒂</td>
                    <td>Maserati GranTurismo</td>
                    <td>双门四座跑车</td>
                    <td>1</td>
                    <td>2880000</td>
                    <td>2880000</td>
                </tr>
                <tr>
                    <td>4</td>
                    <td>阿斯顿马丁</td>
                    <td>AstonMartin </td>
                    <td>两门两座超跑</td>
                    <td>1</td>
                    <td>3880000</td>
                    <td>3880000</td>
                </tr>
                <tr>
                    <td>5</td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td>6</td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td>7</td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td>8</td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td>9</td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td>10</td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
            </tbody>
        </table>
        <div class="foot-desc">
            <div>开单人:<span id="CJRMC">你挚爱的强哥</span></div>
            <div>联系电话:<span id="LXDH">16666666666(微信同号) 028-66666666</span></div>
        </div>
        <div class="address">
            <div>公司地址:<span id="GSDZ">XX市XXX...</span></div>
        </div>
        <div class="remark">
            <div>备注:<span id="BZ">...</span></div>
        </div>
    </div>
</body>
<script>
    function initPDF({ d, } = { d: null, }) {
        if (d) {
            Object.keys(d).forEach((k) => {
                // 执行逻辑
            });
        }
    }
</script>
</html>

vue代码

<template>
    <iframe ref="previewPDF" src="static/previewPDF/index.html" hidden></iframe>
</template>
<script>
    export default {
        created() {
            this.jsPrint();
        },
        methods: {
            jsPrint({ d, } = { d: null, }) {
                this.$refs.previewPDF.contentWindow.initPDF({ d: { a: 1, b: 2 } });//调用frame中的方法
                this.$nextTick(() => {
                    setTimeout(() => {
                        this.$refs.previewPDF.contentWindow.print();//唤起打印弹窗
                    }, 100);
                });
            },
        }
    }
</script>

image.png


相关文章
|
20天前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
20天前
|
JavaScript 算法
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
|
3天前
|
JavaScript 前端开发 BI
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
7 1
|
4天前
|
存储 JavaScript
报错permission.js:41 [Vue warn]: Property “showClose“ must be accessed with “$data.showClose“ because
报错permission.js:41 [Vue warn]: Property “showClose“ must be accessed with “$data.showClose“ because
|
4天前
|
缓存 JavaScript 前端开发
js开发:请解释什么是Webpack,以及它在项目中的作用。
Webpack是开源的JavaScript模块打包器,用于前端项目构建,整合并优化JavaScript、CSS、图片等资源。它实现模块打包、代码分割以提升加载速度,同时进行资源优化和缓存。Webpack的插件机制可扩展功能,支持热更新以加速开发流程。
13 2
|
6天前
|
JavaScript 前端开发 UED
深入解析JavaScript原生操作DOM技术
【4月更文挑战第22天】本文深入探讨JavaScript原生DOM操作技术,包括使用`getElement*`方法和CSS选择器获取元素,借助`createElement`与`appendChild`动态创建及插入元素,修改元素内容、属性和样式,以及删除元素。通过掌握这些技术,开发者能实现页面动态交互,但应注意避免过度操作DOM以优化性能和用户体验。
|
10天前
|
JavaScript 前端开发 UED
Vue工具和生态系统: Vue.js和服务器端渲染(SSR)有关系吗?请解释。
Vue.js是一个渐进式JavaScript框架,常用于开发单页面应用,但其首屏加载较慢影响用户体验和SEO。为解决此问题,Vue.js支持服务器端渲染(SSR),在服务器预生成HTML,加快首屏速度。Vue.js的SSR可手动实现或借助如Nuxt.js的第三方库简化流程。Nuxt.js是基于Vue.js的服务器端渲染框架,整合核心库并提供额外功能,帮助构建高效的应用,改善用户体验。
12 0
|
12天前
|
JavaScript
node.js输入项目目录结构并展示
node.js输入项目目录结构并展示
5 0
|
16天前
|
JavaScript 搜索推荐 测试技术
深入了解 Vue CLI:现代化 Vue.js 项目开发工具
深入了解 Vue CLI:现代化 Vue.js 项目开发工具
|
16天前
|
JavaScript 前端开发
JavaScript中比较常见的几种弹窗
JavaScript中比较常见的几种弹窗
17 0