当前位置:首页 > VUE

vue实现打印预览

2026-03-10 12:05:05VUE

实现 Vue 打印预览的方法

使用 window.print() 方法

在 Vue 中可以通过调用浏览器的 window.print() 方法实现简单的打印功能。这种方法适用于打印当前页面或指定的 DOM 元素。

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

使用 vue-print-nb 插件

vue-print-nb 是一个专门为 Vue 设计的打印插件,可以更方便地控制打印内容和样式。

安装插件:

npm install vue-print-nb --save

在 main.js 中引入:

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

在组件中使用:

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

使用 iframe 实现打印

这种方法可以在不干扰当前页面的情况下实现打印预览。

printWithIframe() {
  const content = document.getElementById('printContent').innerHTML;
  const iframe = document.createElement('iframe');
  iframe.style.display = 'none';
  document.body.appendChild(iframe);

  const frameDoc = iframe.contentWindow || iframe.contentDocument;
  if (frameDoc.document) {
    frameDoc = frameDoc.document;
  }

  frameDoc.open();
  frameDoc.write(`
    <html>
      <head>
        <title>打印预览</title>
        <style>
          /* 自定义打印样式 */
          @media print {
            body { margin: 0; padding: 0; }
          }
        </style>
      </head>
      <body>${content}</body>
    </html>
  `);
  frameDoc.close();

  setTimeout(() => {
    iframe.contentWindow.focus();
    iframe.contentWindow.print();
    document.body.removeChild(iframe);
  }, 200);
}

自定义打印样式

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

@media print {
  .no-print {
    display: none;
  }
  .print-only {
    display: block;
  }
  body {
    margin: 0;
    padding: 0;
  }
}

使用 html2canvas 和 jsPDF 生成 PDF 预览

这种方法适合需要将页面内容转换为 PDF 再进行打印的场景。

安装依赖:

npm install html2canvas jspdf --save

实现代码:

vue实现打印预览

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

methods: {
  async printPDF() {
    const element = document.getElementById('printContent');
    const canvas = await html2canvas(element);
    const imgData = canvas.toDataURL('image/png');
    const pdf = new jsPDF();
    pdf.addImage(imgData, 'PNG', 0, 0);
    pdf.save('print.pdf');
    // 或者直接打印
    // pdf.autoPrint();
    // window.open(pdf.output('bloburl'));
  }
}

注意事项

  • 打印样式需要使用 @media print 专门设置
  • 打印时可能需要调整页面边距和字体大小
  • 复杂的布局在打印时可能需要特殊处理
  • 某些浏览器可能会阻止弹出式打印窗口,需要用户允许

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

标签: vue
分享给朋友:

相关文章

vue   实现单选

vue 实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式,以下是几种常见的方法: 使用原生 <input type="radio"> 绑定 v-model 通过 v-model…

vue实现muli

vue实现muli

Vue 实现多语言(i18n)支持 在 Vue 项目中实现多语言(i18n)功能,通常使用 vue-i18n 插件。以下是具体实现步骤: 安装 vue-i18n npm install vue-i…

实现.vue文件

实现.vue文件

创建.vue文件的基本结构 一个标准的.vue文件包含三个部分:模板(template)、脚本(script)和样式(style)。这种结构允许开发者在一个文件中管理组件的HTML、JavaScrip…

vue实现看板

vue实现看板

Vue 实现看板功能 使用 Vue 实现看板功能可以通过组件化开发、状态管理和拖拽库结合完成。以下是一个完整的实现方案: 基础项目结构 src/ ├── components/ │ ├── Ka…

vue实现hovuer

vue实现hovuer

Vue 实现 Hover 效果 在 Vue 中实现 hover 效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 直接控制 通过 :hover 伪类实现,无需额外的 JavaScrip…

vue 实现 confirm

vue 实现 confirm

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