Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/yang999876/sharedprinter


https://github.com/yang999876/sharedprinter

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

        

# 如何搭建一个自助打印机

自助打印机整体架构还是比较简单的,需要三个部分,客户端,服务端,打印终端。

## 客户端
客户端负责让客户选择文件,配置打印设置,支付相应价格,并持续关注打印进度。这里我选择使用微信小程序,方便分享,方便接入微信支付。小程序前端开发的教程,网上已经有很多了,我就不班门弄斧了,这里推荐几个不错的教程。

[微信官方的教程和文档,首选](developers.weixin.qq.com/miniprogram/dev/framework/quickstart/getstart.html#申请账号)

[前后端全流程教程,包括备案,https](https://blog.csdn.net/JackieLeeWelas/article/details/89303306)

[云开发教程,云开发是微信提供的nodeJs后端解决方案,不需要配置环境,作为学习还是非常方便的](https://developers.weixin.qq.com/community/develop/article/doc/000c266faecb1802a420e8f4a66413)

[黑马的视频教程](https://www.bilibili.com/video/BV1834y1676P/?spm_id_from=333.337.search-card.all.click&vd_source=c4b113af3635381484ac1cc6db0e8123)

UI框架我使用了ColorUI,这个库提供了色彩丰富的UI组件和预制,使用也很方便。[这是官方教程](https://docs.xzeu.com/#/)

开发前需要注意,不建议使用小程序云存储作为文件服务器,云存储的文件下载带宽很小,完全满足不了即时打印的需求。我购买了阿里云的服务器,5M带宽,40g固态硬盘,只要及时删除旧打印文件,小规模测试完全够用。

这里重点讲解接入微信支付的步骤。个人资质的小程序是不允许接入微信支付的,如果你需要使用微信支付的服务,你至少需要申请一个个体工商户资质。申请个体户需要一个场地,但这并不意味着你需要租一个办公室才能注册,你完全可以在家注册一个个体户工作室,我当初就是这样操作的,几乎没有什么成本,流程也并不复杂。你需要带上你家的房产证复印件,你的身份证原件和复印件,房产的所有者给你开一个场地使用证明,你就可以去当地工商局注册工作室了。跑两趟工商局,一般就可以办下来了。

## 服务端
服务端负责接收客户端的文件,将打印文件和配置转发给对应打印终端,并持久化保存用户数据、打印记录之类的。这是我的数据库架构,比较简单,可以参考下

![数据库架构](asset/数据库结构.png)

我购买了阿里云的服务器和域名,一年不到两百,小规模运营,算力和带宽都够用。需要注意的是微信小程序不支持http协议,需要使用https协议,如果你像我一样使用web技术栈开发小程序,需要在服务器上配好SSL证书。

[这里有免费的https配置教程](https://cloud.tencent.com/developer/article/2328422)

[Certbot的官网](https://certbot.eff.org/)

当然你也可以选择使用TCP协议,那就是另一个技术栈了。

我使用flask作为http服务器框架,MySQL作为数据库。细节就不做赘述了,我写的破烂后端代码没什么参考价值,主打一个能跑就行。

[通过Nginx部署flask项目 - 神雕爱大侠 - 博客园](https://www.cnblogs.com/sdadx/p/10360208.html)

## 打印终端
打印终端由一台控制机和一台打印机组成,我的控制机使用了Linux系统,使用CUPS控制打印机,CUPS是苹果带头研发的一个Unix环境下的通用打印解决方案,现在已经成为Linux下打印的事实标准。CUPS支持代码接入和使用指令打印,非常适合我这种个人用户编程控制打印机。(企业级通常会用Windows控制打印机,可操作性更好,驱动兼容也更好)

关于控制机选择,有两个坑:一是处理器架构,X86设备优于arm设备,二是操作系统,windows优于linux。我尝试过arm架构的orangePi设备作为控制机,驱动很难找,找到了打印效果也不正常,最后还是换回了X86的升腾c92瘦客户机。

需要注意,并不是所有打印机都有Linux驱动,我一开始选择使用了兄弟牌的2260d,这一款有官方的Linux驱动,而且驱动支持也比较好,基本什么文件都可以打印,但是打印速度比较慢。我使用过的打印机还有兄弟的5585d,这一款也有官方Linux驱动,打印更快,但是很多文件渲染不出来,算是踩了一个坑,不要买这个。我还用过惠普的M501,有Linux驱动,但是不能用命令控制双面打印方向,只能按照设定的横向翻页或者竖向翻页。少量pdf可能打不出来,大部分都没问题。但是驱动支持好不好的信息基本不能从网络上搜索出来,得踩完坑才知道,还是比较坑爹的。选择打印机前唯一能做的就是在官网上搜索是否有官方驱动,没有就不要买了,或者选择使用Windows,用C#开发一个打印控制系统。

这里是一些关于CUPS的教程:

[CUPS官网](https://www.cups.org/documentation.html)

[官方教程,教你用命令行控制打印机。这是我使用的方案](https://www.cups.org/doc/options.html)

Windows下代码控制打印没有找到一个完整的方案,我找到了一些部分可行的方案,如果有高手知道完整的控制方案,欢迎在评论区分享。

[C#实现调用打印机(打印字符串、打印绘图、打印图片),还差打印水晶报表_c#调用打印机-CSDN博客](https://blog.csdn.net/weixin_42401291/article/details/83624081)

[C#控制打印机打印 - 码农阿亮 - 博客园 (cnblogs.com)](https://www.cnblogs.com/wml-it/p/15982300.html)