html2pdf 手机,jspdf+html2canvas将html生成的pdf

本文介绍了如何解决在使用html2canvas将Echarts图表和表格结合的页面导出为PDF时,由于高度计算不准确导致内容显示不全的问题。通过计算图表和表格实际高度并动态设置canvas.height,确保了导出PDF时内容的完整呈现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遇到一个需求就是将页面的echarts图表和table表格以pdf形式导出

function TOPDF() {

var title = '多部门对比分析报告'

html2canvas(document.getElementById('export_content'), {

dpi: 172, //导出pdf清晰度

// onrendered: function (canvas) {

// //返回图片URL,参数:图片格式和清晰度(0-1)

// var pageData = canvas.toDataURL('image/jpeg', 1.0);

// //方向默认竖直,尺寸ponits,格式a4【595.28,841.89]

// var pdf = new jsPDF('', 'pt', 'a4');

// //需要dataUrl格式

// pdf.addImage(pageData, 'JPEG', 0, 0, 595.28, 592.28 / canvas.width * canvas.height);

// pdf.save(title+'.pdf');

//},//导出pdf清晰度

onrendered: function(canvas) {

var contentWidth = canvas.width

var contentHeight = canvas.height

//一页pdf显示html页面生成的canvas高度;

var pageHeight = (contentWidth / 592.28) * 841.89

//未生成pdf的html页面高度

var leftHeight = contentHeight

//pdf页面偏移

var position = 0

//html页面生成的canvas在pdf中图片的宽高(a4纸的尺寸[595.28,841.89])

var imgWidth = 595.28

var imgHeight = (592.28 / contentWidth) * contentHeight

var pageData = canvas.toDataURL('image/jpeg', 1.0)

var pdf = new jsPDF('', 'pt', 'a4')

//有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)

//当内容未超过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 -= height

//避免添加空白页

if (leftHeight > 0) {

pdf.addPage()

}

}

}

pdf.save(title + '.pdf')

},

//背景设为白色(默认为黑色)

background: '#fff'

})

}

复制代码

不过一般都是配合echarts图表里面加的额外的按钮来控制的,具体的配置为

option = {

toolbox: {

feature: {

myTool1: {

//自定义按钮 danielinbiti,这里增加,selfbuttons可以随便取名字

show: true, //是否显示

title: '导出EXCLE', //鼠标移动上去显示的文字

icon: 'image:// /web/images/excel-ext.png', //图标

option: {},

onclick: function() {

//点击事件,这里的option1是chart的option信息

ToExcle() //这里可以加入自己的处理代码,切换不同的图形

}

},

myTool2: {

//自定义按钮 danielinbiti,这里增加,selfbuttons可以随便取名字

show: true, //是否显示

title: '导出PDF', //鼠标移动上去显示的文字

icon: 'image:// /web/images/pdf-ext.png', //图标

option: {},

onclick: function() {

//点击事件,这里的option1是chart的option信息

TOPDF() //这里可以加入自己的处理代码,切换不同的图形

}

}

}

}

}

复制代码

自己去阿里矢量图标库去找自己想要的图标,弄到该配置项里面去。

但是遇到一个bug就是可能pdf导出来之后内容显示不完全,因为里面的高度没有动态计算,导致内容显示不完全,此时可以加一行代码去计算表格还有echarts图表的高度的和然后赋值给height配置项,该配置项就是canvas.height的值。

allowTaint: true,

height: $('#table').outerHeight() + $('#echarts').outerHeight()

复制代码

嗨!对于Docker零基础入门精通,我可以给你一些指导。首先,让我们从Docker的基础开始。 1. 安装Docker:首先,你需要在你的机器上安装Docker。你可以去Docker官方网站上下载适合你操作系统的版本,并按照官方文档中的说明进行安装。 2. Docker镜像和容器:Docker使用镜像和容器来管理应用程序和服务。镜像是一个只读的模板,它包含了构建应用程序所需的所有文件和配置。容器是基于镜像创建的运行实例,它可以被启动、停止、删除等操作。 3. Dockerfile:Dockerfile是一个包含了一系列命令的文本文件,用于自动化构建Docker镜像。通过编写Dockerfile,你可以定义构建镜像所需的环境、依赖和配置。 4. Docker命令:学习一些常用的Docker命令是非常重要的。这些命令可以帮助你管理镜像、容器、网络等。一些常用的命令包括:`docker run`(运行容器),`docker build`(构建镜像),`docker stop`(停止容器)等。你可以通过查阅Docker官方文档来了解更多命令的详细用法。 5. Docker Compose:Docker Compose是一个用于定义和管理多个Docker容器的工具。它使用YAML文件来配置应用程序的服务、网络、卷等。通过使用Docker Compose,你可以轻松地启动、停止和管理多个容器。 6. Docker网络:Docker提供了不同类型的网络,用于连接和通信容器。你可以使用默认的桥接网络,也可以创建自定义网络。此外,Docker还支持外部网络和容器之间的链接。 7. Docker卷:Docker卷是用于持久化数据的机制。通过使用卷,你可以将容器内的数据存储到宿主机上的特定位置,从而实现数据的持久化和共享。 这些是Docker入门的一些基本概念和工具。一旦你熟悉了这些基础知识,你可以进一步学习Docker的高级特性,如Docker Swarm(用于集群管理)、Docker Registry(用于镜像存储和分发)等。 希望这些信息对你有所帮助!如果你有更具体的问题,我会尽力回答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值