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


相关文章
|
9月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
495 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
8月前
|
JavaScript 安全 前端开发
关于Node.js,一定要学这个10+万Star项目 !!
一篇关于Node.js的宝藏项目——Node.js Best Practices。该项目在GitHub上已有102k Star,汇集了100+条最佳实践,涵盖架构、安全、性能等多方面。每条实践不仅有简明说明和详细解释,还附带代码示例及资源链接。文中通过三个实战案例(利用CPU多核、避免阻塞事件循环、使用中间件处理错误)展示了其实际应用价值,并推荐了几条对前端转Node.js开发者特别有用的最佳实践。强烈建议每位Node.js开发者学习此项目,理解“怎么做”与“为什么要这么做”,以提升开发能力。
299 3
|
10月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
385 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
10月前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
531 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
10月前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
439 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
10月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
456 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
10月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
480 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
3月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
327 2
|
2月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
303 137

热门文章

最新文章