html2canvas, JsPDF生成pdf

html2canvas, JsPDF生成pdf创建 pdf js 引入依赖 importVuefro vue importhtml2c html2canvas importJsPDFf jspdf constPDF PDF install function Vue options targetDom 需要打印的 dom 对象 name pdf 的名字 callback 回调函数 Vue prototype create

// 创建 pdf.js // 引入依赖 import Vue from 'vue' import html2canvas from 'html2canvas' import JsPDF from 'jspdf' const PDF = { 
   } PDF.install = function (Vue, options) { 
    / * targetDom: 需要打印的dom对象 * name:pdf的名字 * callback: 回调函数 */ Vue.prototype.$createPdf = function (targetDom, name, callback) { 
    let cloneDom = targetDom.cloneNode(true) cloneDom.style.width = targetDom.scrollWidth + 'px' cloneDom.style.height = targetDom.scrollHeight + 'px' cloneDom.style.background = '#FFFFFF' document.body.appendChild(cloneDom) html2canvas(copyDom, { 
    scale: 1, // 提升画面质量,但是会增加文件大小 useCORS: true, // 允许跨域图片 当图片是链接地址时,需加该属性,否组无法显示图片 imageTimeout: 0, // 图片加载延迟,默认延迟为0,单位毫秒 height: targetDom.scrollHeight, // canvas的高度设定 width: targetDom.scrollWidth, // canvas的宽度设定 dpi: window.devicePixelRatio * scale, // 将分辨率提高到特定的DPI }).then(canvas => { 
    document.body.removeChild(cloneDom) // a4纸的尺寸[592.28,841.89] const A4_WIDTH = 592.28 const A4_HEIGHT = 841.89 let contentWidth = canvas.width let contentHeight = canvas.height let pageData = canvas.toDataURL('image/jpeg', 1.0) // 一页pdf html页面生成的canvas高度; let pageHeight = contentWidth / A4_WIDTH * A4_HEIGHT // 未生成pdf的html页面高度 let leftHeight = contentHeight // 页面偏移 let position = 0 // a4纸的尺寸[592.28,841.89],html页面生成的canvas在pdf中图片的宽高 let imgWidth = A4_WIDTH let imgHeight = A4_WIDTH / contentWidth * contentHeight // 设置pdf的尺寸,pdf要使用pt单位 已知 1pt/1px = 0.75 pt = (px/scale)* 0.75 let pdf = new JsPDF('', 'pt', 'a4') // 有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度 // 当内容未超过pdf一页显示的范围,无需分页 if (leftHeight < pageHeight) { 
    pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight) } else { 
    while (leftHeight > 0) { 
    pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight) leftHeight -= pageHeight position -= A4_HEIGHT // 避免添加空白页 if (leftHeight > 0) { 
    pdf.addPage() } } } // 直接下载 // pdf.save(name + '.pdf') // base64转成文件 let buffer = pdf.output('datauristring') let myfile = dataURLtoFile(buffer, name) callback(myfile) }) } } Vue.use(PDF) export default PDF 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233524.html原文链接:https://javaforall.net

(0)
上一篇 2025年7月12日 上午8:01
下一篇 2025年7月12日 上午8:22


相关推荐

  • 方程自己解(1)——物理信息神经网络(PINN)

    方程自己解(1)——物理信息神经网络(PINN)文章目录前言(一)物理神经网络(PINN)解读1.1PINN基本背景1.2PINN算法描述前言  最近正在看利用“深度学习”(大概吧,其实只是利用了neuralnetwork的自动微分特性(AD)),在看一些文章的同时,将文章中提到的开源代码用起来和复现一些基本方程求解能够加快我学习的进度,这里将持续贴出一些方程和代码的求解过程。当然非常希望同学和朋友们可以给我指出错误,最后如果能够坚持下去,这个系列的工作会分享到github,同时如果对各个开源程序有所帮助那就更好了!  由于会参考到很多文章

    2025年8月14日
    5
  • 项目总结——机房收费系统合作版「建议收藏」

    项目总结——机房收费系统合作版

    2022年2月4日
    55
  • [灵魂拷问]MySQL面试高频100问(工程师方向)

    [灵魂拷问]MySQL面试高频100问(工程师方向)黑客技术点击右侧关注,了解黑客的世界!Java开发进阶点击右侧关注,掌握进阶之路!Python开发点击右侧关注,探讨技术话题!作者丨呼延十排版丨Java团长juejin….

    2025年12月12日
    4
  • Kimi月之暗面AI模型:长文本分析新标杆

    Kimi月之暗面AI模型:长文本分析新标杆

    2026年3月12日
    1
  • ES7的新特性

    ES7的新特性ES7 总体变化不大 主要增加了两个新特性 1 Array prototype includes arr index 这个方法我经常在刷 LeetCode 上用过 相对于 ES6 中的 indexOf 基本作用是一样的 都是检查一个元素是否存在于数组中 但是它返回的是一个布尔值 在实际运用中 更为实用 可以很清晰的看到 第二个参数 index 可以从数组特定的索引开始寻找 2 Exponentiati 求幂运算符 这意味着 我们的代码可以更加简洁了

    2026年3月18日
    2
  • 服务器矿机系统,云服务器矿机系统选择_云服务器系统哪个好

    服务器矿机系统,云服务器矿机系统选择_云服务器系统哪个好云服务器矿机内容精选换一换公有云平台支持弹性云服务器在专属主机与公共资源池之间迁移,具体包括:将创建在专属主机上的弹性云服务器迁移至其他专属主机。将创建在专属主机上的弹性云服务器迁移至公共资源池,即不再部署在专属主机上。将公共资源池的弹性云服务器迁移至专属主机上,成为专属主机上创建的弹性云服务器。关机状态的弹性云服务器才能执行迁移操作。云备份或云服务器备份不受冷迁用户可以在管理控制台对专属主机上…

    2022年9月30日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号