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

html2canvas + JsPDF.js 导出pdf分页时的问题

问题描述

前一段时间 实现了html2canvas + jspdf.js 导出pdf的功能 项目当时没有测试做完就先搁置 最近项目要上线发现分页时问题 这篇文章记录一下之前的bug

import html2canvas from 'html2canvas';
import JsPDF from 'jspdf'
export function savePdf(el,  title) {html2canvas(el, {useCORS: true,allowTaint: true,dpi: 192,//导出pdf清晰度scale:2,}).then(async (canvas) => {// 新建JsPDF对象const pdf = new JsPDF("p", "mm", "a4");let ctx = canvas.getContext('2d'),a4w = 192, a4h = 277,    //A4大小,210mm x 297mm,四边各保留10mm的边距,显示区域190x277imgHeight = Math.floor(a4h * canvas.width / a4w),    //按A4显示比例换算一页图像的像素高度renderedHeight = 0;while(renderedHeight < canvas.height) {let page = document.createElement("canvas");page.width = canvas.width;page.height = Math.min(imgHeight, canvas.height - renderedHeight);//可能内容不足一页//用getImageData剪裁指定区域,并画到前面创建的canvas对象中page.getContext('2d').putImageData(ctx.getImageData(0, renderedHeight, canvas.width, Math.min(imgHeight, canvas.height - renderedHeight)), 0, 0);pdf.addImage(page.toDataURL('image/jpeg', 1.0), 'JPEG', 10, 10, a4w, Math.min(a4h, a4w * page.height / page.width));    //添加图像到页面,保留10mm边距renderedHeight += imgHeight;if(renderedHeight < canvas.height)pdf.addPage();//如果后面还有内容,添加一个空页page = null}pdf.save(title + ".pdf");}).catch((e) => {console.log(e)}).finally(() => {});
}

在这里插入图片描述

分页的pdf 就能正常的展示

参考地址: https://www.cnblogs.com/BoyTNT/p/11711439.html

相关文章:

  • 使用Fragments(片段)提升你的Vue.js开发体验
  • 电路设计(27)——交通信号灯的multisim仿真
  • Lua速成(2)
  • python 中常用的热门库介绍
  • 如何用Python3自撰一个简单的后端框架
  • python自动化学习--3.8python操作EXCEL文件python日志收集处理
  • STM32F103学习笔记(七) PWR电源管理(原理篇)
  • 糖尿病性视网膜病变(DR)的自动化检测和分期
  • 【element-ui】el-select multiple多选,表单校验问题解决方法
  • stm32——hal库学习笔记(ADC)
  • PDF Expert for Mac v3.9.2中文激活版下载
  • v-rep--websocket接口
  • 中介者模式(Mediator Pattern)
  • Adobe Acrobat DC中如何合并pdf并生成目录
  • 云时代【4】—— 资源隔离与控制技术
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 4个实用的微服务测试策略
  • CSS 提示工具(Tooltip)
  • CSS魔法堂:Absolute Positioning就这个样
  • Debian下无root权限使用Python访问Oracle
  • Javascript编码规范
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • MySQL的数据类型
  • Vue学习第二天
  • Zsh 开发指南(第十四篇 文件读写)
  • 浮动相关
  • 构建二叉树进行数值数组的去重及优化
  • 什么是Javascript函数节流?
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 王永庆:技术创新改变教育未来
  • 我的面试准备过程--容器(更新中)
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $.ajax()
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三十五)大数据实战——Superset可视化平台搭建
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)项目管理杂谈-我所期望的新人
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET 中 GetProcess 相关方法的性能
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .net的socket示例
  • .NET和.COM和.CN域名区别
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?