当前位置:首页 > VUE

vue实现模板打印

2026-03-08 16:22:04VUE

Vue 实现模板打印

在 Vue 中实现模板打印功能,通常需要结合浏览器的打印 API 和 CSS 打印样式。以下是几种常见的方法:

使用 window.print() 方法

创建一个打印按钮,点击时调用 window.print() 方法触发浏览器打印对话框。

<template>
  <div>
    <button @click="print">打印</button>
    <div id="printArea">
      <!-- 打印内容区域 -->
      <h1>打印标题</h1>
      <p>打印内容...</p>
    </div>
  </div>
</template>

<script>
export default {
  methods: {
    print() {
      window.print();
    }
  }
};
</script>

<style>
@media print {
  body * {
    visibility: hidden;
  }
  #printArea, #printArea * {
    visibility: visible;
  }
  #printArea {
    position: absolute;
    left: 0;
    top: 0;
  }
}
</style>

使用 vue-print-nb 插件

vue-print-nb 是一个 Vue 打印插件,使用起来更加方便。

安装插件:

npm install vue-print-nb --save

使用示例:

<template>
  <div>
    <button v-print="printObj">打印</button>
    <div id="printContent">
      <!-- 打印内容 -->
      <h1>打印标题</h1>
      <p>打印内容...</p>
    </div>
  </div>
</template>

<script>
import print from 'vue-print-nb'

export default {
  directives: {
    print
  },
  data() {
    return {
      printObj: {
        id: 'printContent',
        popTitle: '打印标题'
      }
    }
  }
}
</script>

使用 CSS 控制打印样式

通过 CSS 的 @media print 可以控制打印时的样式,隐藏不需要打印的元素。

@media print {
  .no-print {
    display: none;
  }
  .print-only {
    display: block;
  }
}

动态生成打印内容

如果需要动态生成打印内容,可以使用 Vue 的模板和数据绑定。

vue实现模板打印

<template>
  <div>
    <button @click="printReport">打印报表</button>
    <div id="report" ref="report">
      <h1>{{ title }}</h1>
      <table>
        <tr v-for="item in items" :key="item.id">
          <td>{{ item.name }}</td>
          <td>{{ item.value }}</td>
        </tr>
      </table>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      title: '销售报表',
      items: [
        { id: 1, name: '产品A', value: 100 },
        { id: 2, name: '产品B', value: 200 }
      ]
    }
  },
  methods: {
    printReport() {
      const printWindow = window.open('', '', 'width=800,height=600')
      printWindow.document.write('<html><head><title>打印</title></head><body>')
      printWindow.document.write(this.$refs.report.innerHTML)
      printWindow.document.write('</body></html>')
      printWindow.document.close()
      printWindow.focus()
      printWindow.print()
      printWindow.close()
    }
  }
}
</script>

注意事项

  1. 打印样式可能需要多次调试才能达到理想效果
  2. 某些浏览器可能会阻止弹出窗口,需要在用户交互事件中触发打印
  3. 复杂布局在打印时可能需要特殊处理
  4. 分页控制可以使用 CSS 的 page-break-beforepage-break-after 属性

以上方法可以根据具体需求选择使用,简单的打印需求使用 window.print() 配合 CSS 即可,复杂需求可以考虑使用打印插件或动态生成打印内容。

标签: 模板vue
分享给朋友:

相关文章

vue实现active

vue实现active

Vue 实现 active 状态的方法 在 Vue 中实现 active 状态可以通过以下几种方式实现,具体取决于使用场景和需求。 使用 v-bind:class 动态绑定类名 通过 v-bind:…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…

vue实现Siri

vue实现Siri

Vue 实现 Siri 风格语音交互 实现类似 Siri 的语音交互功能需要结合语音识别、语音合成和前端交互逻辑。Vue 作为前端框架,可以很好地管理这些功能的交互状态。 语音识别集成 使用 Web…

vue实现烟花

vue实现烟花

Vue 实现烟花效果 在 Vue 中实现烟花效果可以通过结合 CSS 动画和 JavaScript 动态生成烟花元素。以下是具体实现方法: 动态生成烟花元素 通过 Vue 的 v-for 动态生成烟…

用vue实现echarts

用vue实现echarts

使用 Vue 实现 ECharts 安装依赖 在 Vue 项目中安装 ECharts 和 Vue-ECharts(官方推荐的 Vue 封装库): npm install echarts vue-ec…

vue路由实现iframe

vue路由实现iframe

在Vue中实现iframe嵌入可以通过路由配置和组件动态加载来完成。以下是具体实现方法: 路由配置 在Vue Router的路由配置中,通过component属性动态加载iframe组件。需要将目标…