当前位置: 首页 > 后端技术 > Node.js

[工具]那些年你应该遇到的html转成pdf

时间:2023-04-03 10:51:57 Node.js

前言这几天遇到一个需求。需求的背景是这样的:我们有一个函数叫做contractpreview(后端返回一堆json前端渲染显示),现在想把最终的外观改成pdf,但是json数据需要根据具体业务需要计算。我想的是如何在不移动当前业务代码的情况下实现pdf展示,并在当前html渲染后直接生成合约html内容的pdf,作为资深搜索引擎开发工程师,打开我熟悉的搜索引擎和开始搜索【html转pdf】插曲关于wkhtmltopdf一开始搜索wkhtmltopdf下载链接https://wkhtmltopdf.org/直接下载操作系统对应的wkhtmltopdf版本https://baidu.combaidu.pdf打开baidu.pdf看完之后,感觉自己稳定了一半!butbutbutbut我们的前端是vue搭建的,url大概是这样的http://yun.xiaobaibar.com/#/login这个链接是我很久以前做的一个项目,用来补号的wkhtmltopdfhttp://yun.xiaobaibar。com/#/logindemo.pdf转成pdf其实是这个样子的!whatfuck后来大概看了下vue-router的原理。Vue-router直接找到一个匹配地址的组件或对象,并把它渲染出来,在地址后面加上#来欺骗浏览器地址的变化是由于正在进行的页内导航。简单的说就是入口页面->根据#路由->然后执行路由的js渲染页面,也就是入口页面的样式什么都没有,那为什么用wkhtmltopdf的时候是空白,本质上就是类似curl对应的页面内容,根据代码转成pdf,少了执行js的过程。最终解决方案puppeteer在此,感谢我们组的前端女老板。关于puppeteer是Chrome开发团队在2017年发布的一个Node.js包,用于模拟Chrome浏览器的运行。这个模拟很关键,就算能模拟浏览器运行,当然也能进行js渲染!详情可自行搜索。安装过程npmipuppeteernpmipuppeteer-core附带演示代码page.goto('http://yun.xiaobaibar.com/#/login');awaitpage.screenshot({path:'example.png'});awaitbrowser.close();})();nodedemo.js的结果,最终的工具很重要。在面试的时候可能不会凸显你的气质,但是在工作的时候确实可以让你的开发工作量减少很多。但是有人会说,我写php,我写java,但是你的方案是node。我一直有这样的想法,语言就是满足需求,需要什么就写什么。os:其实我还是只会写php