当前位置:首页 > VUE

vue项目实现打印

2026-02-18 00:06:05VUE

实现 Vue 项目打印功能的方法

使用 window.print() 基础打印

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

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

需配合 CSS 打印样式优化:

@media print {
  .no-print {
    display: none;
  }
  body {
    visibility: hidden;
  }
  .print-area {
    visibility: visible;
    position: absolute;
    left: 0;
    top: 0;
  }
}

使用 vue-print-nb 插件

专为 Vue 设计的打印插件,支持局部打印和自定义配置。 安装:

npm install vue-print-nb --save

使用示例:

vue项目实现打印

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

<template>
  <div id="printContent">
    <!-- 要打印的内容 -->
  </div>
  <button v-print="printConfig">打印</button>
</template>

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

使用 html2canvas + jsPDF 实现复杂打印

适用于需要将 DOM 转换为 PDF 的场景。 安装依赖:

npm install html2canvas jspdf

实现代码:

vue项目实现打印

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

methods: {
  async exportToPDF() {
    const element = document.getElementById('printArea');
    const canvas = await html2canvas(element);
    const imgData = canvas.toDataURL('image/png');

    const pdf = new jsPDF({
      orientation: 'portrait',
      unit: 'mm'
    });

    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');
  }
}

打印优化技巧

添加打印按钮时考虑用户体验:

<button @click="handlePrint" class="print-button">
  <i class="printer-icon"></i> 打印文档
</button>

处理分页问题:

@media print {
  .page-break {
    page-break-after: always;
  }
}

动态加载打印内容:

async loadPrintData() {
  const res = await axios.get('/api/print-data');
  this.printContent = res.data;
  this.$nextTick(() => {
    window.print();
  });
}

注意事项

  • 测试不同浏览器的打印兼容性
  • 处理打印时的图片跨域问题
  • 考虑添加打印取消回调函数
  • 移动端需检测打印功能支持情况

以上方法可根据项目需求选择使用,简单场景推荐 vue-print-nb,复杂报表建议使用 html2canvas 方案。

标签: 项目vue
分享给朋友:

相关文章

vue实现新闻

vue实现新闻

Vue 实现新闻功能 使用 Vue 实现新闻功能通常涉及新闻列表展示、新闻详情页、分类筛选等模块。以下是实现的基本思路和代码示例。 新闻列表展示 通过 Vue 组件展示新闻列表,通常使用 v-for…

vue实现上传

vue实现上传

Vue 文件上传实现方法 使用 Vue 实现文件上传可以通过原生 HTML5 的 <input type="file"> 元素结合 Vue 的事件处理和数据绑定来实现。 基础实现步骤…

vue实现频道

vue实现频道

Vue实现频道功能的方法 使用Vue Router动态路由 通过Vue Router的动态路由功能可以轻松实现频道切换。在路由配置中定义动态参数,组件内通过this.$route.params获取当前…

vue实现portal

vue实现portal

Vue 实现 Portal 功能 Portal 是一种将子节点渲染到父组件 DOM 层级之外的 DOM 节点的技术,常用于实现模态框、弹出层等需要脱离当前组件层级的场景。Vue 可以通过多种方式实现…

vue登录实现

vue登录实现

Vue 登录实现 实现登录功能通常需要前端与后端配合,Vue 作为前端框架,主要负责表单处理、请求发送和状态管理。以下是常见的实现方式: 表单设计与数据绑定 使用 Vue 的 v-model 实现表…

vue 实现 confirm

vue 实现 confirm

实现确认对话框的方法 在Vue中实现确认对话框可以通过多种方式完成,包括使用内置组件、第三方库或自定义组件。 使用浏览器原生confirm 最简单的实现方式是直接调用浏览器原生的confirm方法。…