打印机在办公室里面,但是几个小伙伴平常都在实验室做事,2个位置之间没有网络连接,所以没办法通过常规的方式打印文件。以前,我们都是通过微信发送给办公室的同事帮忙打印,但经常麻烦别人总是不太好,所以构建了这个系统。
其结构如下:
+----------------------+ +-----------+-------------+ +------------+
| | | | | | |
| | | | | | |
| wechat mini APP +----------->+ NginX | Python | | Python |
| | | | | | | +-----------+
| | | + | | | | | |
+----------------------+ | | | | | | |
| PHP | TCP Server +-------->+ TCP Client +------->+ Printer |
| | | | | | |
+----------------------+ | | | | | | |
| | | | | | | +-----------+
| | | | | | |
| PC Tool +----------->+ | | | |
| | | | | | |
| | | | | | |
+----------------------+ +-----------+-------------+ +------------+
User client Server Client Printer
-
User Client端。包括2个部分,其一是微信小程序客户端,可以选择聊天记录中的文件,并发送到打印机;另一个是电脑端使用的工具,实现和小程序一样的功能。
-
Server端。包含了一个Nginx做http和https的代理,然后通过php做简单的处理,存在到固定的打印目录下;另外,TCP Server会监控打印目录,如果有变换,就通知相连的TCP Client来抓取打印文件;
-
Client端。最好的方案当然是利用pi之类的平台,但是我们办公室的打印是联想的,无linux驱动,无力吐槽。所以最后是把Client端放在了小伙伴的OA PC上,反正他也不用。Client端在在获取打印的命令后,会去服务端get文档,然后调用print打印,最后通知Server打印完成;
-
Printer端。打印机,只要在PC上设置好默认的打印机选型即可;
-
微信小程序工程文件。这个repo本身就是一个微信小程序的项目,利用微信开发者工具可以导入;
-
Python相关代码在python目录下,包括;
2.1 server.py,服务端的TCP Server代码;
2.2 client.py,Client端的TCP Client代码;
2.3 pc_client.py,用户侧的打印工具代码;
-
PHP相关代码在php目录下;
3.1 upload.php,响应post的后端代码;
-
nginx配置代码在nginx目录下;