当前位置:首页 > VUE

vue实现预览打印

2026-03-29 21:26:52VUE

实现 Vue 打印预览功能

使用 window.print() 方法

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

vue实现预览打印

<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 插件可以更方便地实现打印功能:

vue实现预览打印

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 规则可以优化打印效果:

@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
分享给朋友:

相关文章

vue实现视频会议

vue实现视频会议

使用 Vue 实现视频会议 技术选型 Vue.js 作为前端框架,结合 WebRTC 技术实现实时音视频通信。常用的库包括: peerjs:简化 WebRTC 的点对点连接。 socket.io:用…

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组件…

实现vue模版

实现vue模版

Vue 模板的基本结构 Vue 模板基于 HTML 语法,通过 Vue 的指令和插值实现动态渲染。以下是一个基础模板示例: <template> <div id="…

vue筛选实现

vue筛选实现

Vue 筛选实现方法 使用计算属性实现筛选 计算属性是 Vue 中实现数据筛选的常用方式。通过定义一个计算属性,可以根据输入的条件动态过滤数据。 <template> <div…

vue代理实现

vue代理实现

Vue 代理实现方法 在 Vue 项目中,配置代理可以解决开发环境下的跨域问题,通常通过修改 vue.config.js 文件实现。以下是几种常见的代理配置方式: 基础代理配置 在 vue.conf…

vue scrolltop 实现

vue scrolltop 实现

实现 Vue 中的 scrollTop 在 Vue 中实现滚动到顶部功能可以通过多种方式完成,包括使用原生 JavaScript、Vue 指令或第三方库。以下是几种常见的实现方法: 使用原生 Jav…