适配针式打印机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


相关文章
|
JavaScript 前端开发 开发者
VUE 开发——Node.js学习(一)
VUE 开发——Node.js学习(一)
296 2
|
机器学习/深度学习 JavaScript 前端开发
JavaScript 弹窗
JavaScript 弹窗
288 1
|
12月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
544 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
JavaScript 安全 API
iframe嵌入页面实现免登录思路(以vue为例)
通过上述步骤,可以在Vue.js项目中通过 `iframe`实现不同应用间的免登录功能。利用Token传递和消息传递机制,可以确保安全、高效地在主应用和子应用间共享登录状态。这种方法在实际项目中具有广泛的应用前景,能够显著提升用户体验。
1682 9
|
JavaScript
js学习--开屏弹窗
js学习--开屏弹窗
166 1
|
JavaScript 前端开发 开发者
JavaScript框架React vs. Vue:一场性能与易用性的较量
JavaScript框架React vs. Vue:一场性能与易用性的较量
381 0
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
833 0
|
JavaScript
深入解析:JS与Vue中事件委托(事件代理)的高效实现方法
深入解析:JS与Vue中事件委托(事件代理)的高效实现方法
431 0
|
JavaScript 前端开发
前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信
前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信
|
5月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
494 2