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

vue项目纯前端实现导出pdf文件

1、下载插件

npm install html2canvas
npm install jspdf

2、创建htmlToPdf.js,地址:src/utils/htmlToPdf.js

import html2Canvas from 'html2Canvas'  
import JsPDF from 'jspdf'  export default {  install(Vue, options) {  Vue.prototype.getPdfFromHtml = function (eleId, pdfFileName, hide) {  // 确保传入了正确的元素ID  const ele = document.getElementById(eleId);  if (!ele) {  console.error('No element found with ID:', eleId);  return;  }  pdfFileName = pdfFileName || "pdf";  // 滚动置顶(如果需要)  window.pageYOffset = 0; // 或者使用 window.scrollTo(0, 0);  // ... 其他可能的滚动设置(如果有)  // 使用html2canvas捕获元素并转换为canvas  html2Canvas(ele, {  dpi: window.devicePixelRatio * 2, // 根据需要调整DPI  useCORS: true, // 允许跨域图片  // ... 其他选项  }).then(canvas => {  // 隐藏加载消息(如果有)  this.$message.closeAll(); // 假设您使用的是Element UI的message组件  // 创建PDF文档并添加canvas内容  const pdf = new JsPDF('p', 'mm', 'a4'); // 使用A4纸,横向  const imgProps = pdf.getImageProperties(canvas.toDataURL('image/png'));  // 根据需要添加多页内容(如果需要)  let heightLeft = imgProps.height;  const top_left_margin = 10; // 您可以根据需要调整边距  const pdfWidth = pdf.internal.pageSize.getWidth() - 2*top_left_margin;  const pdfHeight = pdf.internal.pageSize.getHeight() - 2*top_left_margin;  while(heightLeft > 0) {  pdf.addImage(canvas.toDataURL('image/png'), 'PNG', top_left_margin, top_left_margin, pdfWidth, Math.min(pdfHeight, heightLeft));  if (heightLeft > pdfHeight) {  pdf.addPage();  }  heightLeft -= pdfHeight;  // 如果需要,可以在此处添加页眉/页脚等  }  // 保存PDF  pdf.save(pdfFileName + '.pdf');  }).catch(error => {  console.error('Error generating PDF:', error);  // 显示错误消息(如果需要)  this.$message.error('生成PDF时出错');  });  };  }  
};

3、main.js中引入

import htmlToPdf from './utils/htmlToPdf.js'Vue.use(htmlToPdf)

4、vue页面中使用

在需要打印的块元素上边添加id='pdfDom'

this.GetPdfFromHtml('pdfDom',this.name)

http://www.lryc.cn/news/384554.html

相关文章:

  • 以Bert训练为例,测试torch不同的运行方式,并用torch.profile+HolisticTraceAnalysis分析性能瓶颈
  • 地球地图:快速进行先进土地监测和气候评估的新工具Earth Map
  • 6.22套题
  • openEuler搭建hadoop Standalone 模式
  • nginx更新https/ssl证书的步骤
  • 【Android面试八股文】说一说Handler的sendMessage和postDelay的区别?
  • Java学习 - Redis主从复制
  • 图的拓扑排序
  • windows USB 设备驱动开发-总章
  • springboot解析自定义yml文件
  • 【C/C++】静态函数调用类中成员函数方法 -- 最快捷之一
  • 佣金的定义和类型
  • python数据分析实训任务二(‘风力风向’)
  • Java技术栈总结:数据库MySQL篇
  • vue-cli 项目打包优化-基础篇
  • 24/06/26(1.1129)动态内存
  • 基于 elementUI / elementUI plus,实现 主要色(主题色)的一件换色(换肤)
  • js 计算某个日期加月份最后月份不会增加或者跳变
  • Git简介与详细教程
  • 创建OpenWRT虚拟机
  • 智慧安防新篇章:如何科学设定可燃气体报警器校准检测周期
  • 如何优化Spring Boot应用的启动时间
  • (Effective C) 2.3 作用域
  • Python 基础 (标准库):堆 heap
  • 动手学深度学习(Pytorch版)代码实践 -卷积神经网络-30Kaggle竞赛:图片分类
  • 【LeetCode】每日一题:数组中的第K大的元素
  • Keil5.38ARM,旧编译器(V5)安装
  • 【perl】脚本编程的一些坑案例
  • MIX OTP——使用 GenServer 进行客户端-服务器通信
  • 2024年云安全发展趋势预测