前言
之前见过很多都是使用js来进行打印的,这次分享个php的,这里只说下php的方法。需要的同学可以自己动手实现一下哦!
遇到的问题:
虽然市场中不断有新的编程语言诞生,但不得不承认PHP在web开发领域仍一直占有很大份额,高效开发是他一直以来最大的一个优点,而且他的学习成本也较低,入门门槛较低,和Python一样是解释性语言,很多人都说他是世界上最好的语言。其实语言并没有好坏之分,只有是否适用,每门语言都有自己的优缺点,毕竟想要获得一样东西,总要放弃点什么,有舍有得,看自己怎么权衡,只要能解决问题就是好的,不管黑猫白猫抓到老鼠就是好猫。自从swoole的加持以及和GO语言的结合,也弥补语言本身的很多不足,慢慢缩小和其他语言之间的差距,不过还是有很长的路要走。--题外话
回归正题,用php语言开发的商城系统,需要用到批量打印发货单、快递单的功能。这个该怎么实现。目前看到的大多办法基本都是使用浏览器自带的打印功能打印网页,或者通过JS将特定内容显示在网页上,或者显示在浏览器自带的打印窗口。然后通过浏览器自带的打印功能进行打印,但是这样怎么保证打印出来的页面合理?或者还有什么办法?因为通过浏览器打印在排版上不容易控制,有时候还会产生布局错位,我们曾经为了解决这个问题,就把要打印的内容按照特定格式设计好写进PDF,然后再打印,但是依然无法解决自动打单的效果。
然后就找到了使用windows系统接口,使用类似于桥接的方式调起打印机打印订单或者票据,方法如下:
Windows平台
PHP有一个叫Printer的Windows扩展,使用win32api调用系统打印机服务。可以打印格式化的文档、报表,还可以画一些简单的图形,打印图片。样例代码:
/* get the sample text */$lipsum=file_get_contents('lipsum.txt'); /* open a connection to the printer */$printer=printer_open("Lexmark X850e XL V"); /* write the text to the print job */printer_write($printer, $lipsum); /* close the connection */printer_close($printer);
参考资料:http://phpstarter.net/2010/05/send-print-jobs-directly-from-php/
Unix/Linux平台
可以使用system()
函数调用lpr
工具连接打印服务器来完成打印工作
system('lpr -P "Hp Deskjet" document.pdf');
资料:http://linux.about.com/library/cmd/blcmdl1_lpr.htm
实际用途
- 客户下订单时,在发货中心自动打印装箱单/发票。
- 在 Intranet 网站上,将所有公司打印机都配置在服务器端,这样用户就可以使用 Web 应用程序,而不必担心在他们的工作站上设置打印机。
- 自动打印由 CLI PHP 脚本生成的报告
总结
说到底,最终还是需要通过pdf来解决排版的问题,下面介绍几款生成PDF的第三方库。
PHP生成PDF文件的扩展:
TCPDF官网获取最新版本:http://www.tcpdf.org
还可以根据个人喜好选择下面几个
- FPDF
- mPDF
- DOMPDF
- Snappy(wkhtmltopdf)
如果还需要生成其他文档,比如word,Excel(导数据常用)可以了解一下PHPOffice,后面会专门写一篇文章介绍这些库的使用和技巧