青浦之家微信打印机

2014年 28月 09日 23:47

微信还有一个火爆的产品就是微信打印机咯。
原理很简单,收消息的接口 收到图片验证后,发给打印机。
查看了网上的产品都卖的比较贵,只好自己写了玩玩啦。
初步的成本计算,电脑+喷墨打印机+耗材。 喷墨打印机的选择,最好选择连供方式的打印机,耗材成本低。

自己做了个视频演示

####题外话 试了各种软件,微视,快拍等都无法完成效果,最后还是一段一段录制视频,iMovie编辑。。这软件挺简单的。不错!

简单介绍下我这个版本。

  • 采用linux。
  1. 缺点:无法以软件形式出售给商家,(就是无法在商家现有的电脑上直接安装软件)。
  2. 缺点:无法去教会商家自行修改等复杂操作。
  3. 优点:定制好后,可脱离键盘鼠标操作。
  4. 优点:开发容易。
  5. 优点:成本低,低配置电脑,开发板(我在树莓派运行。成本低至极点!!)
  • 使用PHP nodejs
  1. 依然依赖浏览器,BS架构,好处是CSS可直接简单做好漂亮的页面。
  2. 不能像软件一样交由商家操作。
  3. php模块CURL,GD,一个用于下载图片,一个用于合并模版+照片缩放。
  4. 代替平是NGINX+PHP CLI (自行脑洞吧。。权限略麻烦)
  • 使用cups
  1. 有主流驱动,但是好多硬件设备不支持。我用的EPSON L301需单独安装驱动,但是官网没有ARM驱动。
IMG_20141014_143036.jpg
IMG_20141009_112613.jpg
AF9CF196-C2F9-4468-8746-2EDE1ACC0090.png

下面的代码主要是本地端的 选择了NODEJS的原因。 可以通过NODEJS转发解决跨域问题。 直接调用命令执行lp打印 其中注释掉的基本是余留的旧代码。。可无视。起初选择了一些打印组件。但是都存在一些小问题。实在无奈。。查阅手册发现直接调用命令 很简单!


var http=require('http');
var url=require('url');
var urlparse = url.parse;
var fs=require('fs');
var child_process=require('child_process');
//var mine=require('./mine').types;
var path=require('path');
//var Printer=require('lp-client');
var express = require('express');
    var options={};
    options.destination='EPSON L300 Series';
    options.debug=false;

var app = express();
app.use("/proxy", function (req, res) {
var url = req.url.substr(6); 
var target = urlparse(url);

var headers = {};
for (var k in req.headers) {
if (k === 'host' || k === 'connection') {
continue;
}
headers[k] = req.headers[k];
}
//console.log(url);
//console.log(target.path);
var options = {
host: target.hostname,
port: target.port || 80,
path: target.path,
method: req.method,
headers: headers
};
var proxyReq = http.request(options, function (response) {
res.writeHead(response.statusCode, response.headers);
response.on('data', function (chunk) {
res.write(chunk);
});
response.on('end', function () {
res.end();
});
});
proxyReq.on('error', function (err) {
proxyReq.abort();
res.writeHead(500);
res.end(url + ' error: ' + err.message);
});
req.on('data', function (chunk) {
proxyReq.write(chunk);
});
req.on('end', function () {
proxyReq.end();
});
});

app.use("/printer", function (req, res) {
    var params=url.parse(req.url,true).query;

try{
//  var qlp=new Printer(options);
//qlp.queueFile('/var/www/html/wx_photos/print/'+params.dourl);
//delete(qlp);
var lcmd='lp  /var/www/html/wx_photos/print/'+params.dourl+' > /var/www/html/wx_photos/log/'+params.dourl+'.log';
var ch=child_process.exec(lcmd,
function(error,stdout,stderr){
    console.log(stdout);
    console.log(stderr);
    console.log(error);
    }
);
}catch(error){
        console.log(error);
    }

        console.log('打印'+params.dourl);
            res.write('1');



});

app.use(express.static(__dirname + '/qpweb'));
app.listen(2017);
console.log('青浦之家打印服务已启动');