当前位置:首页 > VUE

vue实现打印功能

2026-01-17 16:30:35VUE

vue实现打印功能的几种方法

使用window.print()方法

在Vue组件中直接调用浏览器原生打印API,适合简单打印需求

methods: {
  handlePrint() {
    window.print()
  }
}

需要配合CSS媒体查询隐藏不需要打印的元素

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

使用vue-print-nb插件

安装插件:

npm install vue-print-nb --save

在main.js中引入:

vue实现打印功能

import Print from 'vue-print-nb'
Vue.use(Print)

模板中使用:

<button v-print="printObj">打印</button>
<div id="printContent">需要打印的内容</div>

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

使用html2canvas + jsPDF库

适合需要将DOM转换为PDF打印的场景 安装依赖:

vue实现打印功能

npm install html2canvas jspdf --save

实现代码:

import html2canvas from 'html2canvas'
import jsPDF from 'jspdf'

methods: {
  async printPDF() {
    const element = document.getElementById('print-area')
    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')
  }
}

使用iframe打印

创建隐藏iframe实现局部打印:

methods: {
  printByIframe() {
    const content = document.getElementById('print-area').innerHTML
    const iframe = document.createElement('iframe')
    iframe.style.display = 'none'
    document.body.appendChild(iframe)
    const frameDoc = iframe.contentDocument || iframe.contentWindow.document
    frameDoc.open()
    frameDoc.write(`
      <!DOCTYPE html>
      <html>
        <head>
          <style>
            /* 打印样式 */
          </style>
        </head>
        <body>${content}</body>
      </html>
    `)
    frameDoc.close()
    setTimeout(() => {
      iframe.contentWindow.focus()
      iframe.contentWindow.print()
      document.body.removeChild(iframe)
    }, 200)
  }
}

打印样式优化

创建专门的打印样式表确保打印效果:

@media print {
  body * {
    visibility: hidden;
  }
  #print-area, #print-area * {
    visibility: visible;
  }
  #print-area {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
  }
  @page {
    size: auto;
    margin: 0mm;
  }
}

以上方法可根据具体需求选择,简单打印推荐使用vue-print-nb插件,复杂需求可考虑html2canvas方案或iframe方案。

标签: 功能vue
分享给朋友:

相关文章

前端多线程实现vue

前端多线程实现vue

前端多线程与Vue的结合 在Vue中实现多线程通常通过Web Worker技术完成。Web Worker允许在后台线程中运行脚本,避免阻塞主线程,适合处理计算密集型任务。 使用Web Worker的…

vue实现考试多选功能

vue实现考试多选功能

实现考试多选功能的方法 数据绑定与选项渲染 使用v-model绑定用户选择的答案数组,配合v-for渲染选项列表: <template> <div v-for="(op…

vue实现账号注册功能

vue实现账号注册功能

注册功能实现步骤 前端部分(Vue.js) 创建注册表单组件 使用Vue的单文件组件结构,包含用户名、邮箱、密码等输入框,并添加表单验证逻辑。 <template> <form…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keyword…

vue实现3d宇宙

vue实现3d宇宙

Vue实现3D宇宙效果 使用Three.js库 Three.js是一个强大的JavaScript 3D库,可以轻松集成到Vue项目中。安装Three.js依赖: npm install three…

vue实现下拉刷新组件

vue实现下拉刷新组件

实现下拉刷新组件的核心思路 下拉刷新功能通常通过监听触摸事件、滚动位置和动画效果实现。Vue中可以利用自定义指令或封装组件完成,以下为两种常见实现方式。 基于自定义指令的实现 创建指令监听触摸事件…