当前位置: 首页 > news >正文

Vue页面生成PDF后调起浏览器打印

一、安装依赖

首先,需要安装 html2canvas 和 jsPDF 库。

npm install html2canvas jspdf

二、创建公共方法+引入

在utils文件夹下创建两个文件分别为pdfExport.js和printPDF.js,代码如下:

  • pdfExport.js
import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';export const exportToPDF = async (elementId) => {console.log('Exporting PDF...');const content = document.getElementById(elementId);if (!content) {console.error(`Element with id ${elementId} not found.`);return;}try {const canvas = await html2canvas(content);const imgData = canvas.toDataURL('image/png');const pdf = new jsPDF({orientation: 'portrait',unit: 'mm',format: 'a4'});// 获取页面尺寸const pageWidth = pdf.internal.pageSize.getWidth();const pageHeight = pdf.internal.pageSize.getHeight();// 计算图片宽高比const imgWidth = pageWidth;const imgHeight = (canvas.height * imgWidth) / canvas.width;// 分页添加图片let position = 0;while (position < imgHeight) {pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);position += pageHeight;if (position < imgHeight) {pdf.addPage();}}// 将 PDF 转换为 Blob 对象const blob = pdf.output('blob');console.log('PDF Blob generated:', blob); // 打印生成的 Blob 对象信息return blob; // 返回生成的 Blob 对象,供后续使用} catch (error) {console.error('导出 PDF 失败:', error);throw error; // 抛出异常供调用者处理}
};
  • printPDF.js
export const printPDF = (blob) => {try {const url = URL.createObjectURL(blob);console.log('PDF Blob URL:', url); // 打印生成的 Blob URL// 创建一个隐藏的 iframeconst iframe = document.createElement('iframe');iframe.style.position = 'fixed';iframe.style.right = '0';iframe.style.bottom = '0';iframe.style.width = '0';iframe.style.height = '0';iframe.style.border = 'none';document.body.appendChild(iframe);// 设置 iframe 的 src 属性为 PDF 文件的 URLiframe.src = url;// 加载完成在进行打印操作,确保 PDF 加载完成iframe.onload = function() {iframe.contentWindow.focus();iframe.contentWindow.print();// 打印完成后移除 iframe 和释放 URLsetTimeout(() => {// document.body.removeChild(iframe);URL.revokeObjectURL(url);}, 500)};} catch (error) {console.error('打印 PDF 出错:', error);throw error;}
};

创建好后在main.js中引入方法

import { exportToPDF } from '../utils/pdfExport';
Vue.prototype.$exportToPDF = exportToPDF;import { printPDF } from '../utils/printPDF';
Vue.prototype.$printPDF = printPDF;

三、使用

  • html
<template><div><!-- 打印按钮 --><span class="mr20" @click="printPageFn">打印页面</span><!-- 需要打印的页面内容,可以是任意div,设置id就可以 --><router-view id="contentToExport"/></div>
</template>
  • Javascript
// 打印页面
printPageFn(){//注意传入的id是否与页面设置的id一致this.$exportToPDF('contentToExport').then((blob) => {this.$printPDF(blob);});
},

相关文章:

  • 基于Pytorch实现AI写藏头诗
  • JWT工具【工具类】
  • cdh zookeeper报错 Canary 测试建立与 ZooKeeper 服务的连接或者客户端会话失败。
  • C++智能指针举例
  • LabVIEW与Python的比较及联合开发
  • 编程机器人的参数表怎么看
  • 【Python】在运行中使用warnings.filterwarnings,可以忽略测试中遇到的问题
  • 【数学】什么是方法矩估计?和最大似然估计是什么关系?
  • 用C语言实现扫雷
  • 基于python实现视频和音频长度对齐合成并添加字幕
  • ubuntu gitlab 部署 私有git库
  • 银河麒麟系统安装
  • 为什么javascript中数组可以存储不同类型的元素,而大多编程语言数组必须存储相同的元素?
  • LeetCode-day11-2813. 子序列最大优雅度
  • 每日一题——Python实现PAT乙级1012 数字分类(举一反三+思想解读+逐步优化)五千字好文
  • [deviceone开发]-do_Webview的基本示例
  • [nginx文档翻译系列] 控制nginx
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【技术性】Search知识
  • 2017前端实习生面试总结
  • java中的hashCode
  • Js基础知识(四) - js运行原理与机制
  • Laravel Mix运行时关于es2015报错解决方案
  • Laravel Telescope:优雅的应用调试工具
  • Phpstorm怎样批量删除空行?
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Sass Day-01
  • 技术发展面试
  • 开发基于以太坊智能合约的DApp
  • 日剧·日综资源集合(建议收藏)
  • 事件委托的小应用
  • 用jQuery怎么做到前后端分离
  • 用Visual Studio开发以太坊智能合约
  • 用简单代码看卷积组块发展
  • 《码出高效》学习笔记与书中错误记录
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # .NET Framework中使用命名管道进行进程间通信
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $L^p$ 调和函数恒为零
  • %check_box% in rails :coditions={:has_many , :through}
  • (13)Hive调优——动态分区导致的小文件问题
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (正则)提取页面里的img标签
  • (转)setTimeout 和 setInterval 的区别
  • ***检测工具之RKHunter AIDE
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .net6Api后台+uniapp导出Excel
  • .net对接阿里云CSB服务