今天跟大家伙儿分享一下我搞的这个户口打印程序,说起来这事儿也挺有意思的。
起初,是老丈人那边说,每次去派出所打个户口本复印件,排队不说,还得看人家脸色,忒麻烦。他就随口一说,问我能不能整个小程序,自己在家就能打印。
我一听,这需求听起来不难!正好最近手头有点空,就答应了下来。心想,不就是个打印程序嘛还能难倒我?
说干就干,我先是上网搜了一堆资料,了解了一下打印的原理。发现这玩意儿说简单也简单,说复杂也复杂。最开始想直接用网页调用打印机,后来发现权限是个大问题,浏览器安全限制太多,搞不定。
没办法,只能换思路。我寻思,要不搞个桌面程序?这样权限就大了,想怎么调打印机就怎么调。于是就开始研究各种桌面开发框架。
一开始想用Python的Tkinter,简单粗暴,但是界面实在太丑了,老丈人肯定不满意。然后又看了PyQt,这个倒是漂亮,但是学起来有点费劲。还是选择了C#的WPF,毕竟以前也用过,上手快,界面也好看。
环境搭就开始吭哧吭哧写代码。是连接打印机,这个倒是不难,网上找了一段代码,稍微改改就能用。然后是户口信息的读取,这个稍微麻烦点。
因为户口信息都是存在派出所的系统里,我肯定没权限直接去数据库里读。我只能让老丈人把户口本扫描成PDF,然后我用OCR识别出里面的文字。
OCR识别这块儿也踩了不少坑。一开始用的免费的OCR库,识别率惨不忍睹,一堆乱码。后来咬咬牙,买了某家的付费OCR服务,识别率总算上去了。
信息读取出来之后,就是排版和打印了。这个我参考了一些打印模板,用WPF把界面画出来,然后把信息填进去。打印的时候,直接调用WPF的打印API,就把户口本复印件打印出来了。
程序写好之后,我给老丈人试用了一下。他老人家乐得合不拢嘴,说以后再也不用跑派出所了。
不过这个程序也还有一些问题。比如OCR识别率还是不够高,偶尔会有错误。还有就是,只能打印户口本复印件,不能打印其他证件。
下一步,我准备优化一下OCR识别算法,提高识别率。然后,再增加一些其他证件的打印功能,让这个程序更加实用。
这回实践还是很有意义的。不仅帮老丈人解决了一个实际问题,也让我对打印技术有了更深入的了解。以后有机会,我还会继续研究这方面的技术。