vue实现页面打印

安装

// 安装 打印组件
npm install vue-print-nb --save

引用

vue2引用

import Print from 'vue-print-nb'
// 全局引用
Vue.use(Print);

// 或者

// 单组件引用
import print from 'vue-print-nb'
// 在自定义指令中注册
directives: {
    print   
}

vue3引用

// 全局引用
import { createApp } from 'vue'
import App from './App.vue'
import print from 'vue3-print-nb'
const app = createApp(App)
app.use(print)
app.mount('#app')

// 或者

// 单组件引用
import print from 'vue3-print-nb'
// 在自定义指令中注册
directives: {
    print   
}

API

打印内容示范 

<template>
  <div class="layout-router-container">
    <el-card class="goosn-card-gray modular-bottom-margin">
      <body-header :title="title">
        <div slot="right">
          <el-button class="search-button" @click="cancel">取消</el-button>
          <el-button type="primary" v-print="printObj">打印</el-button>
        </div>
      </body-header>
    </el-card>
    <el-row>
      <el-col :span="24">
        <div class="grid-content bg-purple-dark"></div>
      </el-col>
    </el-row>
    <div id="printMe">
      <div v-for="(item, index) in dataList" :key="index">
        <div class="boxli-card">
          <div class="boxli-card-top boxFlexSpace">
            <div v-if="item.signer_info">
              签订人:{{ item.signer_info.name }}
            </div>
            <div>订单编号:{{ item.order_sn }}</div>
          </div>
          <div class="boxli-card-top">
            <img class="qrcode" :src="item.qr_code" alt="" />
            <div class="card-top-text">
              <!-- {{ item.order_name }} -->
              GOOSN-生产单
            </div>
          </div>
          <div class="informationorder">
            <div>订单名称:{{ item.order_name }}</div>
            <div>客户名称:{{ item.customer_name }}</div>
            <div>订单sku数量:{{ item.sku_total_num }}</div>
            <div>定制工艺:{{ item.tech }}</div>
            <div>订单工作流:{{ item.flow_name }}</div>
            <div>物流公司:{{ item.express_name }}</div>
            <div>最晚发货时间:{{ item.dead_line }}</div>
            <div>订单负责人:{{ item.main_staffs | Head }}</div>
          </div>
          <div class="remark">备注:{{ item.remarks }}</div>
          <div class="producteffect">
            <el-image class="imagebox" :src="item.imgs[0]">
              <div slot="error" class="image-slot">
                <!-- <i class="el-icon-picture-outline"></i> -->
              </div></el-image
            >
          </div>
          <div class="boxli-card-bottom">
            <div>制单人:{{ userInfo ? userInfo.name : "" }}</div>
            <div>打印时间:{{ time }}</div>
          </div>
        </div>
        <div style="page-break-after: always"></div>
      </div>
    </div>
  </div>
</template>
data() {
    return {
      ims: require("../../../assets/dkw.png"),
      printObj: {
        id: "printMe", //要打印的id名 无#号
        popTitle: "&nbsp;", //页眉标题 默认浏览器标题 空字符串时显示undefined 使用html语言
        extraHead: "",
        previewBeforeOpenCallback: () => {
          console.log("触发打印预览打开前回调");
        },
        previewOpenCallback: () => {
          console.log("触发打开打印预览回调");
        },
        beforeOpenCallback: () => {
          console.log("触发打印工具打开前回调");
        },
        openCallback: () => {
          console.log("触发打开打印工具回调");
        },
        closeCallback: () => {
          console.log("触发关闭打印工具回调,");
          const { mes_ids } = this.$route.query;
          if (mes_ids) {
            this.printInfo(mes_ids);
          }
          this.time = getNowDate();
        },
        clickMounted: () => {
          console.log("触发点击打印回调");
        },
      },
      dataList: [],
      time: "",
    };
  },

分页打印

<template>
	<div>
		<button v-print="'#nbprint'">NB打印</button>
		<div id="nbprint">
             // 方法一
             // 使用div包裹需要分页的块 使用 css属性 page-break-after:always进行分页
			<div style="page-break-after:always">这是第二页</div>
			<div style="page-break-after:always">这是第二页</div>
		</div>
	</div>
</template>

<style>
     // 方法二
     // 使用媒体查询 在打印时设置 body 和 html 的高度为auto
     @media print {
        @page {
          size:  auto;
        }
        body, html {
          height: auto !important;
        }
      }
</style>

补充vue-print-nb插件的一些优化

1.去掉页眉页脚

<style>
@page {
    size: auto;
    margin: 0mm;
  }
</style>

2.打印內容不自动换行问题

给不换行的标签加上 word-wrap:break-word就可以了

<style>
  .procedure{
      word-wrap:break-word;
   }
</style>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue中使用Repx模板进行打印,您可以使用DevExpress提供的打印组件和Vue.js插件。以下是一些简单的步骤: 1. 在Vue.js中安装DevExpress Vue.js插件 您可以通过以下命令安装插件: ``` npm install devexpress-vue@19.2.4 ``` 然后,您可以在Vue.js应用程序的入口文件中引入DevExpress Vue.js插件: ```js import Vue from 'vue'; import { DxButtonModule, DxLoadIndicatorModule, DxPopupModule, DxListModule, DxDataGridModule, DxSelectBoxModule } from 'devextreme-vue'; Vue.use(DxButtonModule); Vue.use(DxLoadIndicatorModule); Vue.use(DxPopupModule); Vue.use(DxListModule); Vue.use(DxDataGridModule); Vue.use(DxSelectBoxModule); ``` 2. 创建一个Repx模板 您可以使用DevExpress的报表设计器来创建一个Repx模板。在报表设计器中,您可以添加数据源、数据字段、图表、文本框等元素,并设置它们的属性。一旦您完成了报表的设计,您可以将其导出为Repx文件。 3. 加载Repx模板并进行打印Vue组件中,您可以使用DevExpress的打印组件来加载并打印Repx模板。以下是一个简单的示例: ```vue <template> <div> <dx-button text="Print" @click="print" /> <dx-report-designer ref="designer" :reportUrl="reportUrl" /> </div> </template> <script> import { DxButton, DxReportDesigner } from 'devexpress-vue'; export default { components: { DxButton, DxReportDesigner }, data() { return { reportUrl: 'path/to/your/repx/file', }; }, methods: { async print() { const reportDesigner = this.$refs.designer.instance; const report = await reportDesigner.getReport(); const printingSystem = report.printingSystem; printingSystem.pageSettings.landscape = true; printingSystem.pageSettings.paperKind = 'A4'; printingSystem.pageSettings.margins = { top: 0.5, bottom: 0.5, left: 0.5, right: 0.5 }; printingSystem.print(); }, }, }; </script> ``` 在上述代码中,我们引入了DevExpress的`DxButton`和`DxReportDesigner`组件,并在组件中添加了一个按钮和一个报表设计器。当用户点击该按钮时,我们会调用`print`方法来打印Repx模板。 在`print`方法中,我们首先获取报表设计器实例,并使用`getReport`方法获取当前报表的实例。然后,我们可以使用打印系统(PrintingSystem)来设置打印选项,例如页面方向、纸张大小和页边距等。最后,我们调用打印系统的`print`方法来触发打印操作。 当然,如果您需要更多的打印选项或者更复杂的报表功能,您可以使用DevExpress的打印和报表组件来实现。同时,DevExpress还提供了大量的UI组件和工具,可以帮助您快速开发高质量的Vue应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值