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


相关文章
|
29天前
|
JavaScript 容器
乾坤qiankun框架搭建 主应用为vue3的项目。
乾坤qiankun框架搭建 主应用为vue3的项目。
149 2
|
20天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
6天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
23天前
|
JavaScript
如何在 Vue 项目中选择合适的模块格式
【10月更文挑战第20天】选择合适的模块格式需要综合考虑多个因素,没有一种绝对正确的选择。需要根据项目的具体情况进行权衡和分析。在实际选择过程中,要保持灵活性,根据项目的发展和变化适时调整模块格式。
20 7
|
19天前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
23天前
|
JavaScript 前端开发 编译器
在 Vue 项目中使用 ES 模块格式的优点
【10月更文挑战第20天】在 Vue 项目中使用 ES 模块格式具有众多优点,这些优点共同作用,使得项目能够更高效、更可靠地开发和运行。当然,在实际应用中,还需要根据项目的具体情况和需求进行合理的选择和配置。
25 6
|
19天前
|
JavaScript 测试技术 UED
解决 Vue 项目中 Tree shaking 无法去除某些模块
【10月更文挑战第23天】解决 Vue 项目中 Tree shaking 无法去除某些模块的问题需要综合考虑多种因素,通过仔细分析、排查和优化,逐步提高 Tree shaking 的效果,为项目带来更好的性能和用户体验。同时,持续关注和学习相关技术的发展,不断探索新的解决方案,以适应不断变化的项目需求。
|
25天前
|
JavaScript 测试技术 API
跟随通义灵码一步步升级vue2(js)项目到vue3版本
Vue 3 相较于 Vue 2 在性能、特性和开发体验上都有显著提升。本文介绍了如何利用通义灵码逐步将 Vue 2 项目升级到 Vue 3,包括备份项目、了解新特性、选择升级方式、升级依赖、迁移组件和全局 API、调整测试代码等步骤,并提供了注意事项和常见问题的解决方案。
|
28天前
|
缓存 JavaScript 前端开发
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
65 3
|
28天前
|
JavaScript 前端开发 测试技术
JavaScript与TypeScript:为何TypeScript成为大型项目的首选
JavaScript与TypeScript:为何TypeScript成为大型项目的首选
28 1