该应用场景是,是使用luckysheet生成PDF,一共分了四种情况,传值的时候只需要判断,生成html的宽度(需要乘0.75,因为是pt单位做对比)只要大于a4的宽度就需要纵向打印

  1. 单张纵向a4
  2. 单张横向a4
  3. 分页纵向a4
  4. 分页横向a4
  5. 这四种都可以识别
import html2Canvas from 'html2canvas';
import JsPDF from 'jspdf';
/*** 导出页面为PDF格式,1pt === 4/3px,1px === 0.75pt* @param { String } title 文件名* @param { Number } type 0:生成PDF、1:生成base64* @param { Boolean } longitudinalShow true:横向打印,false:纵向打印* @returns { Promise }*/
export function getPdf(title, type, longitudinalShow = false) {return new Promise((res, rej) => {html2Canvas(document.querySelector('#printHtml'), {allowTaint: true, // 是否允许不同源的图片污染画布taintTest: false, // 是否在渲染前测试图片useCORS: true, // 是否尝试使用 CORS 从服务器加载图片dpi: window.devicePixelRatio * 1, // 将分辨率提高到特定的DPIscale: 1, // 用于渲染的比例,默认为浏览器设备像素比率}).then((canvas) => {// a4纸 pt尺寸let a4Size = {w: 595.28,h: 841.89,};// 算的是 px单位需要转 pt,a4纸与当前canvas的间距,用于居中let l = (((longitudinalShow ? a4Size.h : a4Size.w) * 1.33 - canvas.width) / 2) * 0.75;let pageData = canvas.toDataURL('image/jpeg', 1.0);let PDF = new JsPDF({// landscape:横向打印,默认纵向打印orientation: longitudinalShow ? 'landscape' : '',unit: 'pt',format: 'a4',});// 表高度,pt单位比较let sheetHeight = canvas.height * 0.75;let t = 0;// 是否需要转换宽高(a4纸打印做转向了,但是分页处理没有转向)let isRotate = longitudinalShow ? a4Size.w : a4Size.h;// 当表小于a4的高时,无需分页if (isRotate > sheetHeight) {/*addImage(img, JPEG, left, top, width, height) pt单位1. 宽高传0,默认为原始图片的px单位2. 如果传入图片原始宽高会识别为pt,打印出来后会进行1.333倍的放大3. 打个比方a4纸的宽pt单位为595.28,px单位为793.71,一个图片宽高为180px如果使用默认为0的,打印出来还是为180px,如果手动设置180,打印出来就会转换为240px意思就是如果图片原始为px单位,设置的pt单位打印就不需要传,如果图片原始为pt单位,设置的pt单位打印就需要传*/PDF.addImage(pageData, 'JPEG', l, 24, 0, 0);} else {while (sheetHeight > 0) {PDF.addImage(pageData, 'JPEG', l, t, 0, 0);sheetHeight -= isRotate;t -= isRotate;// 避免添加空白页if (sheetHeight > 0) {PDF.addPage();}}}if (!type) {PDF.save(title + '.pdf');} else {var basePDf = PDF.output('datauristring');res(basePDf);}});});
}

使用html2Canvas、JsPDF分页打印(分享)相关推荐

  1. html2canvas+jsPDF实现横向打印iframe中的内容

    需要用到的插件:html2canvas   jsPDF.debug.js  jquery html2canvas github地址:https://github.com/niklasvh/html2c ...

  2. html转换pdf 分页,(html2canvas jspdf)html转pdf带分页

    1.下载npm包 npm i html2canvas jspdf -s 2.页面引入 import html2canvas from 'html2canvas'; import jsPDF from ...

  3. html2canvas+jspdf 完美解决html导出且分页 解决图片显示不全问题

    html2canvas+jspdf 完美解决html导出且分页 解决图片显示不全问题 参考文章: (1)html2canvas+jspdf 完美解决html导出且分页 解决图片显示不全问题 (2)ht ...

  4. html2pdf的使用与html2Canvas+jspdf长图不分页

    html2pdf的使用 html2pdf在https://github.com/eKoopmans/html2pdf.js说明的很清楚了,下面给出一个例子 const handleDownload = ...

  5. html2canvas + jspdf 实现 html导出pdf

    html2canvas + jspdf 实现 html导出pdf 1.下载插件 npm install html2canvas jspdf --save 2.utils中创建htmlToPdf.js文 ...

  6. npoi 设定视图为分页预览_按班级分页打印,只要两步就行,不需要再筛选复制打印了...

    话说在猪爸爸幼儿园,和谐可亲的伊伊老师,最近遇上了一个小难题,每次要将各个班级的学生成绩打印出来,但是各个班级的成绩,都是放在一个工作表上,每次都需要筛选,然后把每一个班级的数据复制粘贴到其他工作表, ...

  7. html表格打印填充分页,window.print()页面打印之表格内容分页填充进行分页打印

    windwow.print()用于打印当前窗口的内容,很简便,可当内容特殊并且打印有特殊需求的时候就要绕个圈了.下面是需要打印的表格: 当数据量少的时候像上面的表格一样,中间的内容只有5条数据,打印出 ...

  8. Java实现表格打印翻页_简单又实用的小文章来了----表格分页打印的那些小事(2)...

    前言 之前写过一篇表格分页打印的实践,其基本思路是按照一比一还原打印宽高,然后根据页面高度内容以及内容长度进行粗略计算,针对不能显示的进行内容分割. 相比上次逻辑稍微繁琐一点,今天分享的方式是更加简单 ...

  9. vue 打印(分页打印)

    最近项目中碰到一个需求,需要前端预览打印当前页面的内容,但是在打印的时候需要分页打印,想了很多办法,最后解决,在这做一个分享. 首先是打印,网上有很多方法,这里面我用的是一个插件 vue-print- ...

最新文章

  1. 精度87%!业内首个动静统一的图像分割套件重磅推出
  2. 设计模式入门,适配器模式,c++代码实现
  3. python numpy np.lexsort()(使用键序列执行间接稳定排序)(具体没太搞懂区别?)
  4. VTK:几何对象之Sphere
  5. libgit2 0.28.1 发布,纯 C 实现的可移植 Git 核心开发包
  6. 存储过程学习笔记(一)
  7. 创建vue项目(三)路由跳转、反向代理、本地存储、状态管理
  8. 第六节:教你如何在html中绑定数据
  9. MIT研发“读心机”:不开口也能对话,人生开挂全靠它
  10. 电路计算机辅助设计上海电力学院,上海电力学院电路计算机辅助设计1.doc
  11. 空间说说秒赞java_人生靠反省,Java靠泛型
  12. AcWing 1945. 奶牛棒球(枚举+二分)
  13. 计算机语言的英文发音,求:英语句子发音软件!!!
  14. 数据库课设 - 机票预订系统
  15. python数据分析师面试题选
  16. Matlab下载安装详细教程
  17. linux删除ip地址的命令
  18. rviz点云渲染卡顿问题
  19. 【Java进阶营】Java面试题收集
  20. win11系统下 安装成功ENVI5.6sarscape但不显示插件

热门文章

  1. 已停止访问该网页-微信域名拦截检测接口分享
  2. Hesse矩阵极大极小值判断
  3. 全球与中国笔式万用表市场现状及未来发展趋势2022-2028
  4. 苹果开发者账号封号经历及挽救措施经验总结
  5. 内推 | 【泰隆银行-总行-数据分析岗】杭州 年薪35W
  6. Win7局域网打印机共享设置(详细图文教程)
  7. 删除通话记录怎样恢复
  8. 漫谈C语言及如何学习C语言(转)
  9. 鸿业revit电气插件使用结果
  10. [linux]ubuntu限速软件