当前位置:首页 > VUE

vue实现预览打印

2026-03-29 21:26:52VUE

实现 Vue 打印预览功能

使用 window.print() 方法

在 Vue 中可以通过调用浏览器原生 window.print() 方法实现打印功能。创建一个专门用于打印的组件或页面,隐藏不需要打印的元素。

<template>
  <div>
    <button @click="handlePrint">打印</button>
    <div id="printArea">
      <!-- 需要打印的内容 -->
      <h1>打印测试</h1>
      <p>这是要打印的内容</p>
    </div>
  </div>
</template>

<script>
export default {
  methods: {
    handlePrint() {
      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 插件可以更方便地实现打印功能:

npm install vue-print-nb --save
import Print from 'vue-print-nb'
Vue.use(Print)
<template>
  <div>
    <button v-print="printObj">打印</button>
    <div id="printContent">
      <!-- 打印内容 -->
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      printObj: {
        id: 'printContent',
        popTitle: '打印标题',
        extraCss: 'https://example.com/print.css'
      }
    }
  }
}
</script>

使用 html2canvas + jspdf 实现 PDF 导出

如果需要将页面内容导出为 PDF 再进行打印,可以使用这两个库:

npm install html2canvas jspdf --save
<template>
  <div>
    <button @click="exportToPDF">导出PDF</button>
    <div id="pdfContent">
      <!-- 要导出的内容 -->
    </div>
  </div>
</template>

<script>
import html2canvas from 'html2canvas'
import jsPDF from 'jspdf'

export default {
  methods: {
    async exportToPDF() {
      const element = document.getElementById('pdfContent')
      const canvas = await html2canvas(element)
      const imgData = canvas.toDataURL('image/png')
      const pdf = new jsPDF('p', 'mm', 'a4')
      const imgProps = pdf.getImageProperties(imgData)
      const pdfWidth = pdf.internal.pageSize.getWidth()
      const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width

      pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight)
      pdf.save('document.pdf')
    }
  }
}
</script>

打印样式优化

通过 CSS 的 @media print 规则可以优化打印效果:

vue实现预览打印

@media print {
  /* 隐藏不需要打印的元素 */
  .no-print {
    display: none;
  }

  /* 设置打印页面大小和边距 */
  @page {
    size: A4;
    margin: 0;
  }

  /* 强制分页 */
  .page-break {
    page-break-after: always;
  }

  /* 打印链接显示URL */
  a[href]:after {
    content: " (" attr(href) ")";
  }
}

注意事项

  1. 打印内容应尽量使用固定单位(如pt、mm),而非相对单位(如em、rem)
  2. 避免在打印内容中使用背景色和背景图片,某些浏览器默认不打印背景
  3. 测试不同浏览器的打印效果,Chrome、Firefox 和 IE 可能有差异
  4. 对于复杂表格,考虑添加 page-break-inside: avoid 属性防止跨页断开

标签: vue
分享给朋友:

相关文章

django vue实现

django vue实现

Django与Vue.js整合实现方案 Django作为后端框架与Vue.js作为前端框架的整合,可以通过以下方式实现: 分离式开发 前后端完全分离,Django仅提供API接口,Vue.js通过a…

vue实现$.extend

vue实现$.extend

Vue 实现类似 jQuery 的 $.extend 功能 在 Vue 中实现类似 jQuery 的 $.extend 功能,可以通过多种方式完成。$.extend 主要用于合并多个对象的属性,Vue…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

vue实现博客

vue实现博客

Vue 实现博客的基本步骤 使用 Vue.js 实现一个博客系统可以分为前端和后端两部分。以下是基于 Vue 的前端实现方案,后端可以选择 Node.js、Django 或其他框架。 项目初始化 使…

vue实现webapp

vue实现webapp

Vue 实现 WebApp 的基本步骤 环境准备 确保已安装 Node.js 和 npm/yarn。通过 Vue CLI 或 Vite 创建项目: npm install -g @vue/cli v…

vue实现Siri

vue实现Siri

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