在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all

前天来了个新需求, 有一个授权书的文件要点击下载, 需要在前端生成, 以前没做过那就开始查资料吧,还真的发现有生成pdf文件的组件(此处感谢前辈们写的组件),叫做 jspdf.

然后还有一个把页面渲染成画布的插件,叫做 html2canvas, 那好,开心写吧.

但是首先这两个插件的导包就让我头疼, 因为网上的例子大多数都是js标签导包的,而我们用的是react框架, 版本号我最后在github上找到了,

"html2canvas": "1.0.0-alpha.12"
"jspdf": "1.5.3"
这里要说一句, html2canvas的导包是有坑的, 因为我在做渲染画布的时候发现换行的样式不能被渲染,把导包换成最新的就行了,我也建议大家用最新的版本,虽然是alpha版本,不过也是无奈之举,最后细讲.
好了可以开始写了,先在页面引入
import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';
生成并下载的代码如下: 
 
 /** 导出授权证书 */
exportCertificate(orderitem,item){
var jsonstr = eval('(' + orderitem.attachment + ')');
var title = item.title; // 如果要操作数据在这里写 // 然后把DOM元素传进去
html2canvas(document.getElementById('authorization'), {
allowTaint: false,// 这些参数的配置可以在官方api找到
taintTest: false,
letterRendering: true
}).then(function(canvas) {
var pageData = canvas.toDataURL( 'image/jpeg', 1.0);// 画布转为图片
var pdf = new jsPDF('', 'pt', 'a4');// 生成pdf对象,方向默认竖直,尺寸ponits,格式a4[595.28,841.89]
pdf.addImage(pageData, 'JPEG', 0, 0, 595.28, 592.28/canvas.width * canvas.height ); // addImage后两个参数控制添加图片的尺寸,此处将页面高度按照a4纸宽高比列进行压缩
pdf.save(title + '-authorization.pdf'); // 文件名可以自己取一个
});
}
html2canvas文档简书地址:https://www.jianshu.com/p/6a07e974a7e8

在使用旧版本的html2canvas时出现的问题,换行不被渲染,见图:

 
 
上图是页面的效果,作品链接的地方是换行了的,可是使用旧版本的html2canvas的时候存在的问题就是渲染成画布的时候不换行,之前用的版本是0.5.0beta:见图
 
 
后来版本改为1.0.0-alpha.12就好用了,如图
 

  参考链接,谢谢大神们

https://www.cnblogs.com/jinzhenzong/p/9328985.html

https://blog.csdn.net/weixin_42078778/article/details/81487710

在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all的更多相关文章

  1. IOS下载查看PDF文件(有下载进度)

    IOS(object-c) 下载查看 PDF 其实还是蛮容易操作的.在下载前,首先要把 IOS 可以保存文件的目录给过一遍: IOS 文件保存目录 IOS 可以自定义写入的文件目录,是很有限的,只能是 ...

  2. PHP通过sql生成CSV文件并下载,PHP实现文件下载

    /** * PHP通过sql生成CSV文件并下载 * @param string $sql 查询sql,结果为二维数组 * @param array $title 数据,CSV文件标题 * @para ...

  3. C# 生成pdf文件客户端下载

    itextsharp.dll 下载:http://sourceforge.net/projects/itextsharp/ 程序需引用:itextsharp.dll,itextsharp.pdfa.d ...

  4. 24.-Django生成csv文件及下载

    一.csv文件定义 逗号分隔值(comma-separated values, csv,有时页称字符分隔值,因为分分隔字符页可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本) 说明:可被常见 ...

  5. php 在客户端生成txt文件并且下载

    在访问php时生成txt文件 $filename = 'file.text'; //也可以是其他后缀格式的 $ua = $_SERVER["HTTP_USER_AGENT"]; f ...

  6. flask使用pymysql连接MySQL,生成xls文件并下载到本地

    版本一:将MySQL数据写入到excel(xsl)文件并下载到默认文件夹(一般问电脑的下载文件夹里面),并显示特效到前端页面. flask框架连接MySQL,我们使用pymsql这个工具,如下操作: ...

  7. 使用wcf编写坐标字符串生成shapefile文件,在iis发布供前端调用

    项目有一需求,需要由坐标字符串(格式:x,y,点名)生成shapefile,由于在前台开发类似功能比较麻烦而且也不适用,最终决定使用WCF来实现,不借助现有GIS软件,基于GDAL实现. 实现过程如下 ...

  8. iOS实现pdf文件预览,上下翻页、缩放,读取pdf目录

    最近有个朋友想做一个pdf预览,要求能够上下滑动翻页.带缩放.目录跳转功能. 因为之前我只做过简单的预览,那时直接用uiwebview实现的,这次找了下资料,发现一个比较好的库. 其原理实现: 自定义 ...

  9. meteor---在合并打包多个文件ZIP下载的功能

    实现多个文件边打包边下载的功能,速度还可以,本人亲测,欢迎大家来指点archiver --用NPM安装这个模块---本人文件存储在file-collection 中,可以用fs : fs.create ...

随机推荐

  1. 我的CSDN博客&Github地址

    我的 CSDN 博客地址: https://blog.csdn.net/qq_40147863 Github 地址: https://github.com/xpwi

  2. Servlet映射规范和隐式映射

    问题描述: web.xml中配置了缺省路径"/"后,原先在webapp下的静态页面(html)无法通过URL访问了,为什么? 过程尝试: 1. 将html后缀改为.jsp后可以正常 ...

  3. HTML5-入门。

    什么是HTML5? HTML5是超文本语言,不是编程语言,html5是html语言的最新版本,需要注意浏览器的兼容性问题. HTML5技术一般是指的是HTML5.CSS3.JavaScript三种技术 ...

  4. notepad 操作总结

    1.竖向选择 先把鼠标光标放在起始位置,然后同时按 Alt+Ctrl 或Alt+shift键,然后移动鼠标选取内容. Word中只能用Alt+Shift .

  5. Linux下部署redis以及相关简介

    什么是redis? Redis是一个高性能的key-value数据库.key-value分布式存储系统查询速度快.存放数据量大.支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询.key ...

  6. Oracle使用ODBC连接配置

    该配置是在windows 7 32位下进行的,程序已经通过了测试(使用VBS进行的测试) 1.文件下载 ------------------------------------------------ ...

  7. 按钮在执行frame动画的时候怎么响应触发事件?

    按钮在执行frame动画的时候怎么响应触发事件? 代码中效果(请注意,我并没有点击到按钮,而是点击到按钮的终点frame值处): 对应的代码: // // ViewController.m // Ta ...

  8. Python学习---django模板继承180123

    django模板继承  --20180123 a.include 模板标签 b.extend(继承)模板标签 ------include 模板标签 该标签允许在(模板中)包含其它的模板的内容. 标签的 ...

  9. JavaScript 学习总结

    JavaScript学习总结 1.JavaScript基础介绍 2.JavaScript基础-数据类型 3.JavaScript基础-运算符与基础程序设计 Break:结束当前循环,不再进行下一次循环 ...

  10. [转载] c++对结构体数组排序

    按结构体中某个成员进行排序,下面代码以成员b1为升序的排序 代码: #include<iostream> #include<algorithm> using namespace ...