顺晟科技
2021-06-16 10:34:57
210
首先分解问题。将这头大象放进冰箱有几个步骤:
请求最新订单,得到要转换成pdf的网页(写一个网页实现这个业务逻辑)
用脚本把网页转换成pdf(casperjs,phantomjs)
将pdf上传到服务器(shell scp)
将最新订单标记为外壳卷曲
如果有订单,循环执行1;否则,等待10分钟再执行1。
其实整个工作流程的关键是第二步,就是把网页变成pdf,所以在这个问题上做了一些研究,按照时间轴顺序分为三个阶段:初级、中级、。
初级:说到网页转pdf,首先想到的是chrome浏览器自带的cmd p页面打印功能。此时的操作步骤如下
制作一个适合A4的网页(浏览器提供A4和A3)。尝试找到网页后【每页大小为width:794pxheight:1123pxborder:1px固体rgba(0,0,0,0.01);】在这个尺寸下,不会出现跨页、pdf尺寸溢出等问题。
打开网页,等待加载周期结束
按cmd p打开浏览器自带的打印机,将其拖到页面末尾,等待加载
按保存,输入文件名,并保存到本地目录
因为最终交付是A5格式的,所以有必要使用mac附带的pdf阅读器将A4转换为A5格式的pdf
中级:从初级的印刷步骤来看,很明显,一旦订单量上来,我们就要配负责印刷的工作人员来做这种重复性、枯燥的事情。这时候我们就开始尝试其他的打印解决方案,让程序帮我们完成这些重复又枯燥的事情。当然,网页转换成pdf的方案有很多,包括C (wkhtmltopdf)、Ruby (pdf kit)、Java (ASCII Doc)、node.js(phantomjs)。最后因为是前端开发人员,所以选择了node.js下的phantomjs解决方案,它是这样自我介绍的。幻影JS是一个无头的WebKit,可以用JavaScript API编写脚本。这个框架的主要目的是配合茉莉、摩卡等一些测试框架来测试没有界面的网页。api中有一个截屏,里面有page.render('a.pdf ')功能,可以直接实现将网页保存为pdf的功能。后来casperjs在phantomjs官网被安利采用(Casper JS和phantomjs的关系类似jquery到javascript),语法更简单。在这个阶段,我意识到
用一个网页提供一堆网页网址转换成pdf
使用casperjs脚本对要打印的url数组进行爬网
依次将每个网址转换成pdf格式,并根据指定的文件名保存
Filezilla拖动并上传到ftp
:中级实现的几个功能虽然极大地解放了劳动力,但并不理想,全自动化。其实在印刷这一步,中间阶段的流程学习一下就好了。只需添加一些业务逻辑,让程序依次打印订单,然后配合shell脚本实现即可。具体步骤可以参考本文开头把大象放进冰箱的步骤。
写这个系统会有一些坑或者问题,所以总结一些小技巧和经验。
以我的经验,不同版本的casperjs和phantomjs有不同的特点。
在casper 1.1.0 beta3和phantomjs 1.9.8中,执行捕获功能,会直接等待网页的所有图片加载完毕,然后生成pdf。
在以后的版本中,比如casper 1.1.0 beta5和phantomjs 2.1.1,抓取功能不会等待所有的内容被加载,所以打开网页后需要设置一些等待时间。
因为在项目中,你需要在这两个不同的版本中打印不同的内容(capserjs phantomjs),所以你需要在同一台计算机上安装两个不同的版本
全局安装旧版本的casper 1.1.0 beta3和phantomjs 1.9.8
在当前目录下安装新版本的casper 1.1.0 beta5和phantomjs 2.1.1
建立一个软链接,用于转移到当前目录中的新版本的casper
ln-s node _ modules/Casper js/bin/Casper js。/
ln-s node _ modules/Casper js/bin/Casper js。/
在node _ modules/Casperjs/bin/Casperjs . js更改启动配置项。
default_exec' : '。/phantomjs '
用启动新程序。/casperjs,并用capserjs启动旧程序
如果想兼容老的casperjs版本,更好不要升级到mac OS sierra 10.12。便宜后,你点击系统升级。升级到这个系统后,npm和自制不兼容,你要升级XCODE。最终最新的casperjs可以运行,但是旧的Casper JS 1 . 1 . 0 Beta-3(Phantom JS 1 . 9 . 8)已经不能运行了。后来,该公司建立了一个新的苹果电脑(OSX EL Captian 10.11.6),它完美地运行了新旧卡斯珀js
Scp(安全拷贝)在将文件拷贝到服务器时需要输入密码。通过建立信任关系,现在配置了免登录。
这里介绍两个概念:SSH公钥(~/。ssh/id_rsa.pub)和公钥授权文件(~/。ssh/authorized_keys)
在本地执行ssh-keygen并生成id_rsa.pub
Scp id_rsa.pub服务器地址/。嘘
Cat id _ rsa.pub ~/。ssh/authorized _ keys将本地机器的公钥放入服务器的公钥授权文件中,这样就可以了
在shell端,get请求通过curl实现,接口返回的数据通过post获取
curl ' http://oicqzone.com.com/print confirm '
04
2022-06
16
2021-06
16
2021-06
16
2021-06
16
2021-06
16
2021-06