网站首页 > 技术文章 正文
jsPDF大多数做前端开发的可能都使用过,常用来生成pdf文件,一般搭配html2canvas可以将网页内容导出为pdf,然后使用save方法就能下载生成的pdf文件。
一般情况下,基本都能满足我们产品的需求,但是总存在一些不太一般的情况,比如要在小程序和App使用,发现要么是生成的文件内容排版不行,要么是无法预览和下载,下面分享几点不常用但实用的小技巧:
1、如何生成不分页的pdf文件?
其实只需要在初始化时,将第三个参数设置为文档的宽高就行,即:
new jsPDF('p', 'pt', [width, height])
width和height可以通过html2canvas导出的canvas获取,也可以通过文档对象获取。
2、如何在小程序、App里面生成指定格式的pdf文件?
我们在小程序或App里面使用jsPDF导出文件时,为了用户的体验效果常常是按照手机分辨率来设计UI的,这就导致导出的pdf文件也只能以这种大小显示,我们想要生成指定格式的文件就只得另外处理,可以采取以下两种方式:
(1)通过webview或者iframe嵌入网页的方式,根据需求写好页面,在此页面调用jsPDF生成文件,就能生成指定格式的文件了;
<web-view src="http://127.0.0.1:5500/index.html"></web-view>
(2)通过jsPDF提供的方法进行绘制,原理类似canvas,调用相应的api即可绘制如图片、文字、线段和图形。
let pdf=new jsPDF();
pdf.text("hello world",10,10);
pdf.save();
3、如何让导出的pdf文件可以编辑?
我们指定html2canvas是通过绘制图像的方式导出的canvas,以此种方式生成的文件是不能编辑的,所以只能采用上面提到的绘制内容的方式,使用jsPDF提供的绘制方法将内容按照需求绘制到文件里。需要注意的是,因为jsPDF不支持绘制中文内容,绘制中文文本内容会乱码,需要使用其GitHub提供的工具,将支持中文的字体转码成js文件,然后在需要的页面引入,详情可参考官网示例。
4、如何在小程序、App实现预览和保存pdf文件的功能?
我们在小程序使用jsPDF的save方法时,发现无法下载也无任何报错,查看源码发现其save方法实现逻辑实际上是浏览器常用的a标签下载方式,即
小程序不支持因此无法下载并保存,那么,我们是否可以通过获取获取其生成的内容自己处理呢?
答案是肯定的,查看其说明文件,我们发现有以下几个方法可以获取输出内容:
我们不能直接生成文件,因此可以选择的只有3个,即
output(type: "arraybuffer"): ArrayBuffer;
output(type: "blob"): Blob;
output(type: "bloburi" | "bloburl"): URL;
根据后台接收的格式进行选择,我们就以导出blob为示例:
let blob = pdf.output('blob');
let fileUrl = new File([blob], `xxx.pdf`, { type: blob.type });
//上传文件至后台
uploadFile(fileUrl);
这样即可将生成pdf文件上传,然后通过后台返回文件的URL地址,即可实现预览和下载了。
创作不易,觉得有用的希望点赞关注和转发~~欢迎评论交流
- 上一篇: 一波小福利,前端100本必看PDF电子书
- 下一篇: 前端实现最佳截图方案(下) 前端截图生成图片
猜你喜欢
- 2025-06-28 前端神库!让你能在 Nodejs 里操作浏览器玩出花样!
- 2025-06-28 OpenAI久违发了篇「正经」论文:线性布局实现高效张量计算
- 2025-06-28 黑客WEB攻防技术实战宝典,WEB网络安全PDF电子书合集
- 2025-06-28 高效处理报表,掌握原生JS打印和导出报表为PDF的顺畅技巧!
- 2025-06-28 界面美观功能强大,终于可以告别单调的swagger ui了——knife4j
- 2025-06-28 PDF.js 很强,但 PDFSlick 可能更适合你!
- 2025-06-28 PDFgear——一款接入AI智能化模型的免费PDF聊天软件
- 2025-06-28 5种开源PDF解析方案(JS/Node.js)及实战教程
- 2024-10-06 ?? JavaScript提取PDF图片 ?? js 导出pdf
- 2024-10-06 VUE前端编程:PDF插件填坑记 vue-to-pdf
你 发表评论:
欢迎- 657℃几个Oracle空值处理函数 oracle处理null值的函数
- 647℃Oracle分析函数之Lag和Lead()使用
- 646℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 638℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 633℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 622℃【数据统计分析】详解Oracle分组函数之CUBE
- 618℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 598℃大学生悬浮窗搜题答案神器?分享8个软件和公众号,来对比看看吧
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)