关于在VUE中使用html2canvas+jspdf方案将HTML页面导出为PDF遇到的坑

html2canvas + jsPdf 实现导出pdf(及部分问题解决方案) 再做项目中遇到了需要导出pdf的功能,遇到很多问题包括html2canvas截屏不全,jsPdf导出文字图片不展示-内容错位-背景黑色-jsPdf超过一页被分割等问题,就是把我的解决方案写在这给大家点思路和便利。 1.html2canvas和jsPdf简单介绍 一.html2canvas html2canvas官网 npm引入方式 npm insatll --s... 阅读详情

首先网上有很多教程,我就简单记录下,主要是记录我遇到的问题
首先 npm install html2canvas jspdf -s
然后在main.js中引入

// 引入html转pdf的js
import htmlToPdf from './assets/js/htmlToPdf.js'
Vue.use(htmlToPdf)

 

因为我多个页面要用到导出,所以我使用了一部分公用js,这部分直接写在页面的方法中也当然是可以的

// 导出页面为PDF格式
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
export default {
    install(Vue, options) {
        Vue.prototype.getPdf = function() {
            // 导出之前先将滚动条置顶,不然会出现数据不全的现象
            window.pageYOffset = 0;
            document.documentElement.scrollTop = 0
            document.body.scrollTop = 0

            const loading = this.$loading({
                lock: true,
                text: '导出中...',
                spinner: 'el-icon-loading',
                background: 'rgba(0, 0, 0, 0.7)'
            });
            var title = this.htmlTitle
            html2Canvas(document.querySelector('#pdfDom'), {
                allowTaint: true,
                useCORS: true,
            }).then(function(canvas) {
                let contentWidth = canvas.width
                let contentHeight = canvas.height
                let pageHeight = contentWidth / 592.28 * 841.89
                let leftHeight = contentHeight
                let position = 0
                let imgWidth = 595.28
                let imgHeight = 592.28 / contentWidth * contentHeight

                let pageData = new Image();
                //设置图片跨域访问
                pageData.setAttribute('crossOrigin', 'Anonymous');

                setTimeout(() => {
                    pageData = canvas.toDataURL('image/jpeg', 1.0);
                    let PDF = new JsPDF('', 'pt', 'a4')
                    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 -= 841.89
                            if (leftHeight > 0) {
                                PDF.addPage()
                            }
                        }
                    }
                    loading.close();
                    PDF.save(title + '.pdf')
                }, 1000);
            })
        }
    }
}

 

注释的地方就是我的坑,还好填上了

这部分就是我的代码,用法呢
在页面中将要导出为pdf的部分用 id=”pdfDom”包裹起来,当然,你要写成别的也是可以的,自己看着改改名字就行

然后在你的导出按钮上加上点击事件 @click=getPdf(“这里是你的id名称”),
然后就可以等待完美的绘制了。

咳咳,下面说说我的问题

1. 图片跨域无法访问绘制的问题

2. 偶尔会发生页面绘制不全,有时候一半,有时候差一点

我的解决办法是:第一个问题,我与后台沟通,对图片的访问加了跨域访问,还有就是给上面的代码中注释部分加了跨域
而第二个我自己找了良久始终不得方法,最后还是同组的老大在网上找到的答案

这个方案绘制页面为图片时,页面滚动条必须在顶部,不然会导致页面绘制图片不全的情况

 

VUE页面导出PDF踩坑指南 导出方案用的是html2canvas+jspdf,简单的导出很容易实现,但是也会有一些问题:一是不同分辨率下导出内容不同的问题,这个需要固定导出内容的宽度;二是会遇到页面内容被切割的问题,因为导出原理是先使用html2canvas将DOM元素转换为canvas,再利用 canvas 的 toDataURL 方法输出为图片,之后使用jspdf添加图片生成PDF。图片生成PDF过程中必然用统一的格式切割图片分页,所以内容很容易被切割; 阅读详情

相关推荐

Vue组件开发-使用 html2canvas 和 jspdf 库实现PDF文件导出 设置页面大小及方向

在 Vue 项目中实现导出 PDF 文件、调整文件页面大小和页面方向的功能,使用将 HTML 内容转换为图片,再使用jspdf把图片添加到 PDF 文件中。

LCG元的博客 1494

vue html导出为pdf(解决分页问题+模糊问题)

html2canvas+jsPDF导出pdf问题总结,html转pdf部分元素缺失

u013754060的博客 7057

Vue 前端 实现 HTML 转 PDF 并导出(方案一:html2canvas + jspdf 前端直接实现)

Vue 前端 实现 HTML 转 PDF 并导出(方案一:html2canvas + jspdf 前端直接实现)

RosaChampagne的博客 4129

vue中使用html2canvas+jsPDF实现pdf的导出

vue中使用html2canvas+jsPDF实现pdf的导出

weixin_45956838的博客 2936

vue使用html2canvas jspdf实现pdf下载导出功能

1.安装 全局、局部引用;2.封装html2canvas结合JsPDF 下载导出方法;3.组件页面调用

总结前端开发中遇到的问题,分享前端知识 1658

html2canvas 与 jspdf 相结合生成 pdf 内容被截断的终极解决方案

html2canvas 与 jspdf 相结合生成 pdf 内容被截断的终极解决方案,设置背景色为白色,然后转成图片后,获取截断处图片像素点,从截断处往上一行行扫描像素点颜色,碰到这一行颜色都是全白的,代表是从这里开始截断,将这个高度开始将往下的内容都放到下一页,设置背景色为白色,然后转成图片后,获取截断处图片像素点,从截断处往上一行行扫描像素点颜色,碰到这一行颜色都是全白的,代表是从这里开始截断,将这个高度开始将往下的内容都放到下一页

construct2 导出html打不开,关于在VUE中使用html2canvas+jspdf方案将HTML页面导出为PDF遇到的坑...

首先网上有很多教程,我就简单记录下,主要是记录我遇到的问题首先npm install html2canvas jspdf -s然后在main.js中引入// 引入html转pdf的jsimport htmlToPdf from './assets/js/htmlToPdf.js'Vue.use(htmlToPdf)因为我多个页面要用到导出,所以我使用了一部分公用js,这部分直接写在页面的方法中也...

weixin_35466750的博客 380

WPS接入DeepSeek,实现AI辅助功能

总的来说,借助 WPS 中宏功能与 DeepSeek 大模型的结合,文档处理、内容创作和数据分析等任务都能更加智能化、自动化。这不仅大幅提升了工作效率,也为办公场景带来了全新的智能化办公体验。

运维老生常谈 3789

vue将页面导出pdf,vue导出pdf

vue导出pdf 新需求:需要前端下载把当前html下载成pdf文件 菜鸟觉得牛逼啊,这必须记录下来嗷嗷嗷嗷 1、第一步:我们要添加两个模块 //第一个:将页面html转换成图片 npm install --save html2canvas //第二个:将图片生成pdf npm install jspdf --save 2、第二步: 定义全局函数…创建一个htmlToPdf.js文件在指定位置.我个人习惯放在('src/components/utils/htmlToPdf’)中 htmlToPdf.js文

weixin_45869649的博客 1万+

【项目实战-MATLAB】:基于机器学习的虹膜识别系统设计

虹膜识别主要包括虹膜定位、虹膜裁剪、极坐标变换、归一化、HOG特征提取、虹膜识别六个主要步骤。本系统采用MATLAB作为开发工具实现 主要算法:霍夫变换预处理 HOG特征提取 SVM进行识别

qq_45047246的博客 6534

Monocle2拟时轨迹基因模块的GO富集解析

本文详细解析了如何对Monocle2拟时分析中得到的基因表达模块进行GO富集分析。通过从热图对象中提取聚类模块,并利用clusterProfiler等工具进行功能注释,将抽象的基因表达时序模式转化为可解释的生物学功能主题,如免疫应答、细胞外基质组织等,从而深入理解细胞命运转变的驱动机制。

gpt4scribbler的博客 493

html2canvas + jspdf实现页面导出成pdf

通过这个封装,我们实现了一个轻量级且功能完备的 PDF 导出工具。它不仅解决了最让人头疼的 长页面截断 问题,还通过 scale 参数保证了导出的清晰度。

softshow1026的博客 1079

RRAM/ Near Memory Computing (NMC) Survey - Reading Notes 0707

Reading Notes of Resistive Random Access Memory – Day 2 Chapter 3 RRAM Characterization and Modeling Overview of RRAM Physical Mechanism A general picture for the filamentary switching mechanism. Forming: 对本征RRAM样本,加电压VformingV_{forming}Vforming​,中间氧化层的O

Blog of Lucky H6 985

【html转pdf】html页面导出为pdf文件,纯html版本,简单实现pdf转换【html2canvas+jspdf】

最近遇到的需求,把html转成pdf文件下载导出。目前网上看了下,有三种方法,但是其中两种需要后端配合一种是纯前端实现的,比较简单。所以就使用了这种。也就是html2canvas + jspdf 的这种方法这种方法实现的思路就是,通过html2canvas 把元素内的数据截图出来成一个图片然后把这个图片通过jspdf 方法转成pdf格式输出出来但是也有缺点,就是只是一个图片,而且清晰度也没有那么高。只能说勉强实现一个需求,先应付一下,后续会继续看其他的写法,然后更新。

seeeeeeeeeee的博客 9566

Mixly/Arduino实战:WS2812点阵动态显示自定义图案与汉字

本文手把手教你使用Mixly和Arduino驱动WS2812点阵屏,实现自定义图案与汉字的动态显示。内容涵盖硬件连接、取模软件设置、高效数据处理技巧(巧用Excel)、Mixly图形化编程及Arduino代码解析,并深入探讨动态显示与滚动汉字原理,最后提供常见问题排查与性能优化心得,助你从零开始轻松玩转智能硬件。

weixin_29185199的博客 450

【LDLTS解析】从重叠峰到精准参数:拉普拉斯深能级瞬态光谱如何重塑半导体缺陷分析

本文深入解析了拉普拉斯深能级瞬态光谱(LDLTS)技术如何革新半导体缺陷分析。针对传统DLTS难以分辨重叠峰的痛点,LDLTS通过拉普拉斯逆变换对高精度电容瞬态曲线进行数学解卷积,成功分离发射率相近的缺陷信号,实现从模糊宽峰到精准独立峰的转变。该技术不仅大幅提升了缺陷激活能和捕获截面等关键参数的提取精度,更推动分析范式从经验拟合转向第一性原理,为先进半导体工艺开发与良率提升提供了强大的精准诊断工具。

weixin_29224309的博客 261

Vue项目中导出页面为PDF文件

记录在Vue项目中导出页面为PDF文件功能一、使用步骤代码如下(示例):} else {})本文对Vue项目导出页面pdf方法做了封装,再任何需要导出的文件中直接调用。

m0_56991378的博客 4209

从零开始:用这些公开数据集搞定电力AI项目(含鸟巢、绝缘子、负荷预测等33个实战资源)

本文系统梳理了电力AI领域33个精选公开数据集,涵盖目标检测、负荷预测等关键场景,如鸟巢检测、绝缘子缺陷识别等。通过实战案例解析数据预处理、模型选型及性能优化策略,帮助工程师快速构建端到端解决方案,解决电力AI项目中的数据获取与处理难题。

weixin_42522552的博客 211

Vue使用jsPdf将页面导出成pdf文件

1 、我们要添加两个模块 ①第一个.将页面html转换成图片 npm install --save html2canvas ②第二个.将图片生成pdf npm install jspdf --save 2、定义全局函数..创建一个htmlToPdf.js文件在指定位置.我个人习惯放在('src/components/utils/htmlToPdf') 文件路径...

weixin_30851867的博客 3231

链路聚合Eth-trunk以及华为交换机配置实例

链路聚合简介 以太网链路聚合Eth-Trunk简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性。 目的: 随着网络规模不断扩大,用户对骨干链路的带宽和可靠性提出越来越高的要求。在传统技术中,常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽,但这种方案需要付出高额的费用,而且不够灵活。 采用链路聚合技术可以在不进行硬件升级的条件下,通过将多个物理接口捆绑为一个逻辑接口

ChaseAug的博客 2万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

html导出PDF 使用html2canvas和jspdf插件实现

npm install html2canvas jspdf --save 在项目工具方法存放文件夹utils中创建htmlToPdf.js文件,代码如下: vuecli3z中放在public下 // 导出页面为PDF格式 import html2Canvas from 'html2canvas'; import JsPDF from 'jspdf'; export default { ...

前端的路上 981

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

vue中将页面导出为.pdf和.html

vue中将页面导出为pdf介绍导出为.PDF导出为.htmlConclusion 介绍 如果项目中包含报表业务,通常都会有导出功能。根据不同需求导出为不同格式导出,有PDF、Excel、Word格式等…当然,导出的方法也有很多,一般都是后端导出前端直接点击下载即可,但是是不是前端就不能实现导出功能呢,也不是。这里,就在vue项目中使用已有的依赖包来实现导出功能。 导出为.PDF // step 1...

weixin_43443341的博客 3118

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Vue使用jspdf导出页面为PDF格式

安装两个依赖 将页面html转换成图片 cnpm install --save html2canvas 将图片生成pdf cnpm install jspdf --save 把htmlToPdf.js(在上传中心可以找到我上传的这个js)放到文件夹中,这里放到的是“src\components\base” 在main.js里引用 import htmlToPdf from './compon...

u011599033的博客 3068

vue使用jspdf导出表格(非html2canvas导出)

vue使用jspdf vue导出页面表格为pdf vue使用jspdf导出页面表格 vue使用jspdf导出后端返回的表格数据为pdf

huanhuan03的博客 2581

html2canvas jspdf 将html转成 pdf

项目搭建安装插件html2canvas和jspdf在项目中引入遇到的问题多行省略号 安装插件html2canvas和jspdf npm install html2canvas--save npm install jspdf --save html2canvas可以通过获取HTML的某个元素,然后生成Canvas,能让用户保存为图片。 jsPDF 是一个基于 HTML5 的客户端解决方案,用于生成...

宇你晴天的博客 3669

Vue中将页面导出为PDF

在Vue中实际是把页面利用canvas转换成图片,然后再用图片的base64码转成PDF,这里就使用到了两个插件html2canvas和jspdf。在目录src下创建utils文件夹,里面创建一个exportPdf.js,将下面内容复制到js文件里面。在项目或者需要用到的组件中引入方法。.........

HAI_GUI的博客 7027
上一篇: 最近学到的一些前端知识
下一篇: 关于移动端H5使用xhr上传文件
Cirzearchenille
博客等级 码龄10年 30粉丝 19原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值