首先把问题进行分解嘛,把这只大象放进冰箱要经过几个步骤:
其实吧,整个workflow最关键的就是第二步,把网页转成pdf,所以在这个问题上做了些研究,按时间轴顺序分为这么初级,中级,高级这么三个阶段。
初级:谈到网页转pdf,最先想到的一定是chrome浏览器自带的 cmd+p 这个网页打印功能。这个时候的操作步骤是
中级:从初级这个打印步骤看,很明显,一旦订单量上来了,我们就要配制定的负责打印的员工,去做这类重复枯燥的事情,这时候我们就开始尝试其他的打印解决方案,让程序帮我们完成这些重复枯燥的事情。 当然网页转pdf的方案很多,有c++(wkhtmltopdf),ruby(pdfkit),java(asciidoc),node.js(phantomjs),最终因为自己是前端开发,所以选择了node.js下 phantomjs的解决方案,它是这么自我介绍的PhantomJS is a headless WebKit scriptable with a JavaScript API. 这个框架的主要用途是配合一些Jasmine,Mocha这些测试框架用来做无界面的网页测试。api里其中有一块是 screen capture,其中有个page.render('a.pdf')函数,直接可以实现把一个网页保存为pdf这个功能。后来又在phantomjs官网被安利了 casperjs (和phantomjs的关系类似于 jquery之于javascript),语法更加简便。在这个阶段,我实现了
高级:中级实现的几个功能虽然极大的解放了劳动力,但还不是最理想的,全自动化的。其实打印那一步,借鉴中级阶段的流程就好了,只要加上些业务上的逻辑,让程序能做到循坏依次打印订单,然后配合上shell脚本就能实现啦。具体步骤就参照本文开头的把大象放进冰箱的几个步骤。
在写这套系统中,当然会遇到一些坑或难题,所以总结了一些小技巧,小经验。
在我的使用经验中,不同版本的casperjs,phantomjs有不同的特性,
因为在项目中,需要在这两种不同版本的(capserjs+phantomjs)做不同内容的打印,所以需要在同台电脑里装两个不同的版本
在全局安装老版本casper 1.1.0 beta3和 phantomjs 1.9.8
在当前目录安装新版本casper 1.1.0 beta5和 phantomjs 2.1.1
建立软链接用于在当前目录下调用到新版本的casper
在node_modules/casperjs/bin/casperjs.js 改启动配置项
如果想兼容老版本的casperjs的话,这个最好不要升级到 mac OS sierra 10.12 ,一天手贱,点了下系统升级,然后升级到这个系统后 npm ,homebrew各种不兼容,还要配合升级XCODE。最终是能把最新的casperjs跑起来,但老版本的casperjs1.1.0beta-3(phantomjs1.9.8)已经跑不起来了。后来公司整了台新mac(OSX EL Captian 10.11.6),完美的运行着新老两套casperjs
scp (secure copy)向服务器拷贝文件时需要输入密码。通过建立信任关系,现配置免登录。
在这里先介绍两个概念:SSH公钥(~/.ssh/id_rsa.pub)和公钥授权文件(~/.ssh/authorized_keys)
在shell端,用curl实现 get请求,post获取接口返回数据